ソケットを使用していくつかのテストを実行していたところ、いくつかの奇妙な動作に遭遇しました: ServerSocket は、50 番目のクライアント Socket がそれに接続した後、接続を拒否します。接続間に追加。
次のプログラムは私の実験的なコードで、現在の状態では例外をスローせず、正常に終了します。ただし、 の配列サイズがSocket[] clients
50 を超えて増加すると、50 番目の接続以降に接続を試みるクライアント ソケットは、サーバー ソケットによって拒否されます。
質問:ソケット接続がサーバー ソケットによって拒否される回数が 50 であるのはなぜですか?
public static void main(String[] args) {
try (ServerSocket server = new ServerSocket(2123)) {
Socket[] clients = new Socket[50];
for (int i = 0; i < clients.length; i++) {
clients[i] = new Socket("localhost", 2123);
System.out.printf("Client %2d: " + clients[i] + "%n", i);
clients[i].close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
別の50個のソケットが別のローカルサーバーに接続するテストを実行しましたが、100個のソケットが開閉されても問題は発生しなかったため、サーバーソケットが接続を拒否していると推測しましたが、クライアントソケットを開く制限はありませんが、同時に接続されていないにもかかわらず、サーバー ソケットが 50 接続に制限されている理由を発見できませんでした。