サーバーでストリームをセットアップするために、次のコードを作成しました。
-(void)streamOpenWithIp:(NSString *)ip withPortNumber:(int)portNumber;
{
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (__bridge CFStringRef)ip, portNumber, &readStream, &writeStream);
if(readStream && writeStream)
{
CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
//Setup inpustream
inputStream = (__bridge NSInputStream *)readStream;
[inputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
//Setup outputstream
outputStream = (__bridge NSOutputStream *)writeStream;
[outputStream setDelegate:self];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream open];
}
}
サーバーに接続してデータを送受信できます。しかし、接続がまだ存在するかどうかを確認したい。Wi-Fi ルーターからケーブルを外しても、ストリームでデータを送信でき、エラーは発生しませんでした。
タイマーを使用してメッセージを送信し、何かを受信したかどうかを確認することで、アプリケーション レベルでこれを解決できます。ただし、これは、下位レベルの TCP Keep-Alive テクニックでも解決できます。
これを NSStream で実装するにはどうすればよいですか? チェック間隔を設定するにはどうすればよいですか?
TCPキープアライブでチェックしてストリームがダウンしたときにNSStreamEventErrorOcurredを取得すると思いますか?
この投稿を確認しましたが、わかりません: iOS でソケット接続を維持する
ご協力いただきありがとうございます!