【发布时间】:2012-10-19 20:26:35
【问题描述】:
我使用套接字运行了一些测试,遇到了一些奇怪的行为:服务器套接字将在第 50 个客户端套接字连接到它之后拒绝连接,即使该客户端套接字在下一个打开之前关闭,即使连接之间增加了延迟。
以下程序是我的实验代码,在当前状态下,不会引发异常并正常终止。但是,如果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 个连接,即使它们没有同时连接。
【问题讨论】:
标签: java sockets connection serversocket