Java ServerSocket连接限制? [英] Java ServerSocket connection limit?

查看:224
本文介绍了Java ServerSocket连接限制?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用套接字运行了几个测试,我遇到了一些奇怪的行为:在第50个客户端Socket连接到它之后,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.

以下程序是我的实验代码,在当前状态下,不抛出异常并正常终止。但是,如果 Socket [] clients 的数组大小增加到超过50,则在第50次连接后尝试连接的任何客户端套接字都会被服务器套接字拒绝。

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.

问题:为什么50是服务器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();
    }
}



我已经运行测试另外50个插座连接到另一个本地服务器,并没有发生100套接字打开和关闭的问题,所以我推断,它的服务器套接字拒绝连接,而不是一些限制打开客户端套接字,但我已经无法发现为什么服务器套接字

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.

推荐答案

这一切都在 JavaDoc


进入连接指示(连接请求)的最大队列长度设置为50.如果队列已满时连接指示到达,则拒绝连接。

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.

显然,您的 ServerSocket 从不接受任何连接,只是监听。您必须调用 accept()并开始处理连接或增加待办事项队列大小:

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连接限制?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆