NSStream の streamStatus に関する質問がありました。私のアプリケーションには、データの送受信に適した入力ストリームと出力ストリームがあります。ただし、以前に、サーバーがダウンした場合に、クライアント側で接続が切断されたという通知を受け取っていないことに気付きました。これを調査し、さまざまなテストを実装して数週間後、不適切なサーバーの切断またはクラッシュに対して適切な応答を提供するものがないことがわかりました. 次に、5 秒ごとに起動するタイマーを作成し、streamStatus をチェックする関数を呼び出しました。LAN 接続を無効にしてサーバーを切断すると、クライアントがまだ接続済みとして登録されていることに気付きました。クライアントのデバッグを開始したとき、streamStatus が常に返されることに気付きましたNSStreamStatusOpen
入力ストリームと出力ストリームの両方で。
私が行っていないことで、私が見逃していることはありますか? streamStatus を呼び出して受信する方法の小さなスニペットを以下に添付しました。
タイマーの初期化 (接続が成功した後に呼び出されます):
connectionTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(CheckStream) userInfo:nil repeats:YES];
ストリームの確認:
- (void)CheckStream
{
NSStreamStatus status = [input streamStatus];
if(status == NSStreamStatusClosed || status == NSStreamStatusError)
{
NSLog(@"Error: %d", status);
}
status = [output streamStatus];
if(status == NSStreamStatusClosed || status == NSStreamStatusError)
{
NSLog(@"Error: %d", status);
}
}