Java ServerSocket 连接限制?

标签 java sockets connection serversocket

我用套接字运行了一些测试,我遇到了一些奇怪的行为:在第 50 个客户端套接字连接到它之后,ServerSocket 将拒绝连接,即使该客户端套接字在下一个打开之前关闭,即使在连接之间添加延迟。

以下程序是我的实验代码,在当前状态下,它不会抛出任何异常并正常终止。但是,如果 Socket[] 客户端 的数组大小增加到超过 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 个连接,即使它们不是同时连接的。

最佳答案

都在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.

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

new ServerSocket(port, 100)

关于Java ServerSocket 连接限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12981957/

相关文章:

java - 递归时出现StackOverflow错误如何处理?

java - 无法访问完整数组

python - 如何在 python asyncio 中等待 select.select 调用

sockets - 服务器未在 "Hello World"套接字程序中获取消息

reactjs - 无法从我的移动设备连接到我的 React 应用程序

iPhone - 显示无互联网连接

Java TimerTask <identifier> 预期

java - JavaScript 版本

c# - 如何使用线程池来处理新线程中的每个连接

java - Hibernate+PostgreSQL "Too Many Connections"错误