Java ServerSocket 连接限制?
2022-09-04 08:35:02
我使用套接字运行了一些测试,并且遇到了一些奇怪的行为:ServerSocket 将在第 50 个客户端套接字连接到它之后拒绝连接,即使该客户端套接字在打开下一个客户端套接字之前已关闭,即使连接之间添加了延迟。
以下程序是我的实验性代码,在当前状态下,它不会引发任何异常并正常终止。但是,如果阵列大小增加到 50 以上,则服务器套接字将拒绝在第 50 次连接后尝试连接的任何客户端套接字。Socket[] clients
问:为什么 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个连接, 即使它们不是同时连接的。