2012-04-16 9 views
0

私はアンドロイドの2つのエミュレータ間にソケットチャネルを構築しようとしました。私は、次のコードを書いた:私は(IP、ポート)で、別のエミュレータを開始していないJavaで接続が確立されているかどうかを確認するには?

public SocketChannel connect2node(String ip, int port) { 
     SocketChannel client = null; 
     try { 
      client = SocketChannel.open(new InetSocketAddress(ip, port)); 
      client.configureBlocking(false); 
      client.register(selector, SelectionKey.OP_READ); 

      if (!client.isConnected()) { 
       Log.i("server connection", "error"); 
       return null; 
      } 
     } catch (IOException e) { 
      String s = e.getMessage(); 
      e.printStackTrace(); 
     } 

     return client; 
    } 

注意、接続は常に失敗することを意味します。私は上記のコードのデバッグを開始すると、それはそれは、その後、catchブロックにジャンプ

if (!client.isConnected()) { 

に来たとき、私が見つかりました:catchブロックで

 e.printStackTrace(); 

他のすべての行が実行されず、クライアントがあります戻り値はnullではありません。では、接続が正常に確立されたかどうかはどうすればわかりますか?

+0

スタックトレースとは何ですか? –

+0

これは何も印刷しません。私は 'e.printStackTrace()'もスキップしたと思う。 – stackunderflow

+0

不可能。再コンパイルして再テストすることをお勧めします。私の答えも見てください。 – EJP

答えて

0

isConnected()テストは無意味です。 open()が接続に失敗した場合、例外がスローされます。

+0

open()は成功し、isConnected()が例外をスローするまでコードが実行されます。 – stackunderflow

+0

@zwxはい、私はあなたの質問でそれを読んでいます。私の答えにはほとんど影響しません。テストを削除するだけです。それは無駄です。コード内のその時点でソケットを非接続にすることはできません。 – EJP

+0

はい、あなたは正しいです。 'isConnected()'テストを削除した後でも、例外はスローされず、うまくいっています。しかし、私の質問は、接続が確立されているかどうかをどのように伝えるかです。 'client'はnull以外の値として返されるので、私はそれが成功した接続と区別できません。 – stackunderflow

関連する問題