当前位置: 首页 > 面试题库 >

Java ServerSocket连接限制?

郭乐湛
2023-03-14
问题内容

我正在使用套接字运行一些测试,但遇到了一些奇怪的行为:ServerSocket将在第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个连接,即使它们未同时连接也是如此。


问题答案:

全部在JavaDoc中:

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

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

new ServerSocket(port, 100)


 类似资料:
  • 我有一个服务器写在JavaServerSocket。 我有一个客户端,它位于一个公司防火墙之上,除了公共端口之外,它阻止了所有东西。 我已在SMTP端口(#25)上启动服务器。 有防火墙的用户连接到它,到目前为止一切正常。 然后服务器处理ServerSocket.accept()。据我所知,它在一个随机端口上创建一个套接字(每次端口号都不同)。因为防火墙而失败。 我的问题是-如何制作ServerS

  • 是否可以使用OkHttpClient限制活动连接的数量?所以,如果达到限制,就不会选择和建立新的连接? 我的应用程序同时启动多个连接。

  • 我是网络新手,我正在尝试制作一个用于聊天的小型java应用程序。我想要的是ServerSocket接受一个并且只有一个连接。如果第二个Socket尝试连接到ServerSocket,它将引发异常,以便启动套接字的用户知道他无法连接到那个ServerSocket我查看了javadoc并找到了那个构造函数。 创建服务器套接字并将其绑定到指定的本地端口号和指定的积压工作。端口号为0表示自动分配端口号,通

  • 使用带有socket.io的nodejs服务器和客户机,我可以让14K个客户机进行连接。即使在使用集群时也略少。 CPU和RAM都没有耗尽。除了socket.io自己执行的自动ping之外,不会传输任何数据。 如果机器不够强大,我可以理解。但是,我希望服务器无论如何都会随机删除客户端,而不是每次尝试时都保持特定的数量。 编辑:这是在Windows上使用网络Storm,我会在Linux机器上测试,当

  • 是否有任何方法可以限制Apache Camel RabbitMQ系统与RabbitMQ服务器的连接数。默认情况下,它似乎为每个骆驼消费者/生产者创建了一个连接。

  • 我在unix(OSX)机器上使用kqueue建立了一个TCP/IP echo服务器,它可以打开100个TCP/IP端口,每个端口接受4000个客户端,我使用另外15台机器建立了大约23万个连接。(每道工序4000康纳,每箱4道工序) 服务器似乎可以接受更多,但问题是客户端,建立更多连接是有限制的。如Windows XP-3000、Windows7、UNIX-16384。 我怎么克服?