Java ServerSocket连接限制?
我正在使用套接字运行一些测试,但遇到了一些奇怪的行为:ServerSocket将在第50个客户端套接字连接到它之后拒绝连接,即使该客户端套接字在打开下一个套接字之前就已关闭,即使延迟了在连接之间添加。
以下程序是我的实验代码,该代码在当前状态下不引发任何异常并正常终止。但是,如果将的阵列大小Socket[]
clients增加到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个连接,即使它们未同时连接也是如此。
回答:
全部在JavaDoc中:
传入连接指示(连接请求)的最大队列长度设置为50。如果在队列已满时到达连接指示,则拒绝连接。
显然,您ServerSocket
永远不会接受任何连接,只会听。您必须调用accept()
并开始处理连接或增加 积压队列 大小:
new ServerSocket(port, 100)
以上是 Java ServerSocket连接限制? 的全部内容, 来源链接: utcz.com/qa/418434.html