2011-12-10 11 views
1

Socketクライアント側でServerSocket接続をどのように待つことができるのでしょうか。クライアントソケットでServerSocket接続を待機する方法

最初にサーバー(送信)を実行すると、ServerSocket.acceptメソッドを使用してクライアント接続を待機します。問題は、サーバーが最初に実行されていなければクライアント(受信)を実行できないということです。私はクライアントがサーバーからの接続を待つことができる条件を追加したいと思います。出来ますか?

SEND(サーバー)

ServerSocket servsock = new ServerSocket(1234); 
Socket sock = servsock.accept(); 

(クライアント)を受信

Socket sock = new Socket(from, 1234); 

ERROR(クライアント)

java.net.ConnectException: Connection refused 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) 
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432) 
    at java.net.Socket.connect(Socket.java:529) 
    at java.net.Socket.connect(Socket.java:478) 
    at java.net.Socket.<init>(Socket.java:375) 
    at java.net.Socket.<init>(Socket.java:189) 

ありがとうございます。

答えて

2

マットありがとうございます。

Socket sock = null; 
    while (true) { 
     try { 
     sock = new Socket(from, 1234); 
     if (sock != null) { break; } 
     } 
     catch (IOException e) { Thread.sleep(1000); } 
    } 
    // rest of the code 
+0

'sock'はnullをテストできます。ちょうど '休憩 '。 – EJP

4

これを行うための組み込み方法はありません。クライアント側で例外をキャッチし、自分で再試行のメカニズムを実装する必要があります。

擬似コード:あなたはGUIを持っている場合

Socket sock = null; 
while (retryCounter < threshold) { 
    try { 
    retryCounter++; 
    sock = new Socket(form, 1234); 
    } catch (...) { 
    // handle exceptions 
    // possibly add a sleep period 
    } 
} 
if (sock == null) { 
    // you failed to connect 
} else { 
    // you're connected 
} 

は注意してください:あなたはあなたのUIの凍結を回避するために、別のスレッドまたは使用タイマーのそれのいくつかを実装する必要があります。

+0

キャッチ(...)に追加する必要はありますか? – Julien

+0

再試行を実行する例外を処理する必要があります。何かが起きたときにログに記録し、「致命的な」例外(再試行で解消しないもの)がある場合は救済してください。これは非常に一般的なもので、アプリケーションに必要なものによって異なります。 – Mat

+0

申し訳ありませんが分かりません。 pingや接続テストを送信するなどの簡単な方法はありますか? – Julien

関連する問題