AsyncSocket только что прочитал один раз? - PullRequest
1 голос
/ 20 мая 2011


Я делаю простой клиентский сервер без CLRFdata, но я даю заголовок сообщения с собственной длиной сообщения.это мой код:

Этот метод отправляет данные

- (void)sendMessage:(NSString *)message {
unsigned char lendata = [message length];
 senddata = [NSMutableData dataWithBytes: &lendata length:sizeof(lendata)]  ;
[senddata appendData:[message dataUsingEncoding:NSUTF8StringEncoding]];
[socket writeData:senddata withTimeout:-1 tag:0];  
}  

Этот метод считывает данные из длины сокета = 1 байт до длинного кода в заголовке.

- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
NSString *message = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];

if(bheader){
    cdata++;
    if(cdata==2){
        [data getBytes:&idata];
        bheader = NO;
        cdata=0;
        cmessage = [[NSString alloc] initWithFormat:@""];
    }

}
else{  
    if (message){            
        cmessage = [[NSString alloc]initWithFormat:@"%@%@",cmessage,message]  ;
    }
    else
        NSLog(@"Error converting received data into UTF-8 String");

    cdata++;
    if(cdata==idata) {
        msgComplete=YES;
    }

}

if (msgComplete) {
    NSDictionary *userInfo = [NSDictionary dictionaryWithObject:cmessage forKey:kNotificationMessage];
    [notificationCenter postNotificationName:kNotification object:self userInfo:userInfo];
    cmessage=@"";
    msgComplete=NO;
    bheader=YES;
    cdata=0;
    [cmessage release];    
}         
[sock readDataToLength:1 withTimeout:-1 tag:0];  
}  

и этот метод

- (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag {
[sock readDataToLength:1 withTimeout:-1 tag:0];  
}  

Я успешно отправляю данные и получаю данные с сервера, использую этот код, я пытаюсь сделать так, чтобы логин и сервер получили данные и уведомления, и я получаю сообщение с этим кодом, но после этого яне могу получить сообщение с сервера, когда я снова отправляю сообщение, но в TCPDUMP я вижу сообщение, отправленное на сервер, и ответ сервера с сообщением?

Может кто-нибудь исправить мой код, где проблема?Спасибо.

...