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

回到顶部