FTh*_*son 11 java sockets connection serversocket
我正在使用套接字运行一些测试,我遇到了一些奇怪的行为:ServerSocket将在第50个客户端Socket连接到它之后拒绝连接,即使该客户端套接字在下一个客户端套接字打开之前关闭,即使延迟是在连接之间添加.
以下程序是我的实验代码,它在当前状态下不会抛出任何异常并正常终止.但是,如果阵列大小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();
}
}
Run Code Online (Sandbox Code Playgroud)
我已经运行了测试,其中另外50个套接字连接到另一个本地服务器,并且没有问题,100个套接字被打开和关闭,所以我推断它的服务器套接字是拒绝连接,而不是打开客户端套接字的一些限制,但我一直无法发现为什么服务器套接字限制为50个连接,即使它们没有同时连接.
Tom*_*icz 15
它全部在JavaDoc中:
传入连接指示(连接请求)的最大队列长度设置为50.如果在队列已满时到达连接指示,则拒绝连接.
显然你ServerSocket从不接受任何联系,只是倾听.您必须调用accept()并开始处理连接或增加积压队列大小:
new ServerSocket(port, 100)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32916 次 |
| 最近记录: |