TCP/IP 経由で Linux C サーバーを使用して iOS クライアントをセットアップしています。私が直面している問題は次のとおりです。接続が完了すると、サーバーはデータを待機し (read())、iPod から受信したデータを画面に表示します。その後、再び read() に戻ります。この読み取り/書き込みは一度だけ行うことができますが、永続的に行うことはできません。コードは次のとおりです。
-(void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent
case NSStreamEventHasSpaceAvailable:
event = @"NSStreamEventHasSpaceAvailable";
connectButton.enabled = NO;
disconnectButton.enabled = YES;
if (theStream == oStream)
{
//send data
uint8_t buffer[11] = "I send this";
int len;
len = [oStream write:buffer maxLength:sizeof(buffer)];
if (len > 0)
{
NSLog(@"Data sent");
[oStream close];
}
}
break;
わかった。したがって、サーバー側で読み取りが行われると、このメソッドとケースは自動的に実行されます。これは、サーバーでの最初の read() 呼び出しではうまく機能しますが、2 回目の呼び出しでは、サーバーは一部のデータのためにハングアップしたままになります。私がxcodeに持っているログは、何が起こるかを示しています:
2011-06-17 16:23:50.154 sliderFinal[7430:207] >> : NSStreamEventOpenCompleted //ストリームの 1 つが開かれました
2011-06-17 16:23:50.156 sliderFinal[7430:207] << : NSStreamEventOpenCompleted //他のストリームが開かれた
2011-06-17 16:23:50.157 sliderFinal[7430:207] データが送信されまし た //サーバーからの最初の read() の後にデータが送信されました
2011-06-17 16:23:50.159 sliderFinal[7430:207] << : NSStreamEventHasSpaceAvailable //これは、サーバーからの最初の read() 呼び出しを参照します
最初のラウンドの後、サーバーが何かを待ち続けていることがわかります。このメッセージは、再び NSStreamEventHasSpaceAvailable に到達しないようです。何か案は?