我正在使用套接字运行一些测试,而且我遇到了一些奇怪的行为:即使客户端套接字在下一个套接字打开之前关闭,ServerSocket将在第50个客户端套接字连接到套接字后拒绝连接,即使在连接之间添加延迟。Java ServerSocket连接限制?
以下程序是我的实验代码,它在当前状态下不会抛出异常并正常终止。但是,如果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个连接,即使它们没有同时连接。
当客户端套接字关闭时,队列中的连接不会被删除吗? – Vulcan
@Vulcan显然不是。 – EJP
@EJP是的,但他们为什么不呢?对我来说,闭合套接字仍然排队等待连接似乎很奇怪。我想服务器套接字无法知道客户端套接字是封闭的。 – Vulcan