当前位置: 首页 > 知识库问答 >
问题:

Java中的套接字连接没有限制[重复]

夹谷星纬
2023-03-14

我对Java和套接字还是新手。我有一个侦听连接的程序,如果有连接,它会将其发送到处理连接的类,并使用ExecutorService启动处理线程。

我想限制连接的数量,所以我发现套接字有一个参数。这是主要代码:

public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(123, 1);
        try {
            ConnectionListener listener = new ConnectionListener(server);
            listener.run();
        }
        catch (Exception exception) {
            exception.printStackTrace();
        }
    }

在本例中,我想将连接限制为1。我试图用大量并行执行python脚本来轰炸它,该脚本将数据发送到此端口。但我从未收到“连接被拒绝”或明显的连接延迟,就好像没有遵守限制一样。

我做错了什么?

共有2个答案

凌声
2023-03-14

backlog参数不限制您的程序将拥有的连接量。

积压参数处理您的服务器可以维护多少未接受的连接。如果您的积压为1并且一个客户端连接到您的服务器,接受第一个连接将允许接受其他连接。但是,如果您不接受第一个连接,任何未来连接到服务器的客户端都将被拒绝。

积压的2将支持两个不可接受的连接,并拒绝第三个连接。

此行为可能因平台而异。有关更多信息,请查看以下问题的答案:当积压工作已满时,为什么不拒绝ServerSocket连接?

回答这个问题的用户是网络领域的专业人士,如果你有兴趣进一步接触Q,他会有更多与Java服务器套接字相关的内容

虽然并非所有这些帖子都与服务器套接字直接相关(由于标记策略不佳,有些可能根本不相关),但我强烈建议您在空闲时间查看它们——您可能会学到一些有助于您解决未来问题的东西。

屈星腾
2023-03-14

您可以在接受一个连接后关闭ServerSocket。这对你有用。

要深入了解这个问题,您可以参考答案(为什么当积压已满时ServerSocket连接不被拒绝?)

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

  • 我正在创建我的计算机和android之间的客户端套接字连接。 以下是服务器的代码: 当我在计算机上运行客户端时,一切都正常。以下是计算机客户端的代码: 当我在android中运行this客户端代码时,系统停止工作,错误是什么?这是android客户端代码: 以下是应用程序崩溃的日志:

  • 问题内容: 调用一次后如何重新连接到套接字io ? 这是代码 如果我这样做,它会起作用。如果我这样做,它将断开连接。但是,如果我尝试使用重新连接,则连接不再起作用。我如何才能建立连接? 问题答案: 好吧,您可以在这里选择… 首次初始化套接字值时,应使用, 下次(调用一次断开连接后),您应使用再次连接。 所以你的应该是这样的

  • 这很好,但没有SSL。 我已经使用OpenSSL为服务器和客户机生成了SSL证书,结果是: 服务器的证书(PEM格式) 客户端的证书(PEM格式) 服务器的私钥(PEM格式) 客户端的私钥(PEM格式) CA文件(PEM、CER和CRT格式) null 会出什么问题?

  • 问题内容: 我正在使用套接字运行一些测试,但遇到了一些奇怪的行为:ServerSocket将在第50个客户端套接字连接到它之后拒绝连接,即使该客户端套接字在打开下一个套接字之前就已关闭,即使延迟了在连接之间添加。 以下程序是我的实验代码,该代码在当前状态下不引发任何异常并正常终止。但是,如果将的阵列大小增加到50以上,则服务器套接字将拒绝在第50个连接后尝试连接的任何客户端套接字。 问题: 为什么

  • 线程“main”java.net.ConnectException:连接超时:在java.net.dualStackplainsockeTimpl.Connect0(本机方法)在java.net.dualStackplainsockeTimpl.socketConnect(DualStackplainsockeTimpl.java:69)在java.net.abstractplainsockeTi