4

ポートが開いているかどうかを確認する方法については、まだ何も見つかりませんでした。AsyncSocket クラスで実現しようとしましたが、サーバー上のそのポートへのすべての接続を拒否しても、常に TRUE を返します。さらに、isConnectedAsyncSocket のメソッドを使用しようとしましたが、常に FALSE を返します。

これまでの私のコード:

//Init socket
socket=[[AsyncSocket alloc] initWithDelegate:self];

//results on TRUE always!
NSLog(@"Ready");

NSError *err = nil;
if(![socket connectToHost:@"10.1.2.40" onPort:25 error:&err])
{
    NSLog(@"Error: %@", err);
}
else
{
    NSLog(@"Connected");
}
//addition - results in FALSE always!

if([socket isConnected])
{
    NSLog(@"yes, its connected");
}
else
{
    NSLog(@"not connected...");
}
[socket disconnect];
4

1 に答える 1

1

自分自身をデリゲートにして、onSocket:willDisconnectWithError: メソッドを処理する必要があります。接続は完全に非同期であるため、基本的なシステムの問題 (ソケットが無効になっている、無効なアドレスを渡したなど) がない限り、その呼び出しは常に成功し、ソケット接続の試行はバックグラウンドで行われます。

その試行が失敗した場合、 onSocket:willDisconnectWithError: デリゲート メソッドが呼び出されるため、接続試行が失敗したことがわかります。

理由はわかりませんが、AsyncSocket クラスは kCFStreamStatusError ストリーム ステータスを「接続済み」と見なすため、接続済みとして表示されるのはそのためだと思います。AsyncSocket のソースでこれらすべてをたどることができます。

于 2011-12-30T20:42:30.387 に答える