加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java ServerSocket连接限制?

发布时间:2020-12-14 23:54:47 所属栏目:Java 来源:网络整理
导读:我正在使用套接字进行一些测试,我遇到了一些奇怪的行为:在第50个客户端Socket连接之后,ServerSocket将拒绝连接,即使该客户端套接字在下一个打开之前关闭,即使延迟是连接之间添加. 以下程序是我的实验代码,它在当前状态下不抛出异常并正常终止.但是,如果Sock
我正在使用套接字进行一些测试,我遇到了一些奇怪的行为:在第50个客户端Socket连接之后,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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读