ネットワークを監視するための小さなクライアントを作成するために、いくつかのJavaを使用しています。ネットワーク上の各ノードに対して、クライアントを実行していますが、着信接続をリッスンする ServerSocket も実行しています。私が書いたコードは ServerSocket.listen() メソッドでハングアップしているようです。サーバーソケットを開始する必要があるテストコードを実行しようとしています。セットアップが完了したら、データを送信します。基本的に私の問題は次のようになります。
クライアント.java
/*snip*/
public void listen(){
try{
ServerSocket server = new ServerSocket(1234);
server.listen();
Socket client = server.accept()
System.out.println("got connection");
... do stuff
catch(IOException ex){
ex.printStackTrace();
}
}
TestClient.java
/*snip*/
Client client = new Client();
client.listen();
System.out.println("client constructed, waiting for connection");
Socket sock = new Socket("localhost", 1234);
... do stuff
Java ServerSocket の他のすべての例は、それ自体をループして無限ループで実行するためだけに、それを独自のクラスに配置します。可能であれば、サーバーを別のメインメソッドから実行しようとしています。問題は、ソケットが接続を取得しないため、client.listen() メソッドが完了しないことです。そのコード行が TestClient で実行された後、接続を確立しようとします。Eclipse では、println のどちらも出力に出力されません。これを巧妙な方法で処理するために制御構造を記述する別の方法はありますか?