ServerSocket
すべてのクライアントへの接続を開くことになっているサーバーがあります。問題は、クライアントが ConnectionPort が既に使用されているかどうかを確認する必要があることです。つまり、クライアントはポート 12345 をチェックし、ServerSocket
「待機」があるかどうか結果を取得し、そうでない場合は次のポートを取得する必要があります。
したがって、最終的に 2 つまたは 3 つのクライアントがポート 12345、12346、12347 でサーバーに接続されます...
私はこれを書きました:
serverSocket = new ServerSocket(incomingPort, 1); // backlog 1 = Minimum
incomingSocket = serverSocket.accept();
readerIn = new BufferedReader(new InputStreamReader(incomingSocket.getInputStream()));
outgoingSocket = new Socket(incomingSocket.getInetAddress().getHostAddress(), outgoingPort);
dataOutputStream = new BufferedOutputStream(outgoingSocket.getOutputStream());
pwOut = new OutputStreamWriter(outgoingSocket.getOutputStream());
最初のクライアントを接続し、(最後の 3 行で) クライアントに「戻る」別の接続を開きます。クライアント側では、ほぼ同じことを書きましたが、その逆です。
outgoingSocket = new Socket(serverIP, inPort1);
dataOutputStream = new BufferedOutputStream(outgoingSocket.getOutputStream());
pwOut = new OutputStreamWriter(outgoingSocket.getOutputStream());
serverSocket = new ServerSocket(outPort1);
incomingSocket = serverSocket.accept();
readerIn = new BufferedReader(new InputStreamReader(incomingSocket.getInputStream()));
接続を開こうとする次のクライアントは、同じポートから開始して同じことを行います。私はそのException
ようなものを手に入れたいと思っていましConnectException
たが、何もありませんでした。バックログの「バッファ」に関係していると思います。それはすべてを継続し、なるのをServerSocket
待ちますが、永遠に待ちます。サーバー自体は、最初の接続で既に占有されています。
私は多くの投稿を読みましたが、少なくともタイムアウトまで、それはoutgoingSocket.isConnected()
与えtrue
ていると言っています。サーバーがすでに占有されていることを確認する方法はありますか? または、少なくともバックログを「無効」にして、すべての着信接続が拒否されるようにしますか?.isClosed()
false