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 で、サーバーに送信されたメッセージと、メッセージを含むサーバーの応答が表示されますか?
誰でも問題のあるコードを修正できますか? ありがとう。