Java ServerSocket connection limit?(Java ServerSocket 连接限制?)
问题描述
I was running a few tests with sockets, and I encountered some strange behavior: A ServerSocket will refuse connections after the 50th client Socket connects to it, even if that client socket is closed before the next one is opened, and even if a delay is added between connections.
The following program is my experimental code, which in its current state, throws no exceptions and terminates normally. However, if the array size of Socket[] clients
is increased beyond 50, any client sockets attempting to connect after the 50th connection are refused by the server socket.
Question: Why is 50 the count at which socket connections are refused by a server socket?
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();
}
}
I have run tests where another 50 sockets connect to another local server, and no issue occurred with 100 sockets being opened and closed, so I've deduced that its the server socket is refusing connections, and not some limit of opening client sockets, but I have been unable to discover why the server socket is limited to 50 connections, even though they are not connected simultaneously.
It's all in the JavaDoc:
The maximum queue length for incoming connection indications (a request to connect) is set to 50. If a connection indication arrives when the queue is full, the connection is refused.
Apparently your ServerSocket
never accepts any connections, just listens. You must either call accept()
and start handling the connection or increase the backlog queue size:
new ServerSocket(port, 100)
这篇关于Java ServerSocket 连接限制?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Java ServerSocket 连接限制?
基础教程推荐
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01