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

ServerSocket没有任何错误地丢失连接

史昊焱
2023-03-14

我正在尝试使用SocketServer来生成网页、JS脚本和其他东西。看起来像这样:

ServerSocket serverSocket = new ServerSocket(port);
while (!stop) {
    Socket socket = serverSocket.accept();
    new Thread() { @Override ...
        InputStream inputStream = socket.getInputStream();
        OutputStream outputStream = socket.getOutputStream();
        // And here we reading requests and writing responses
    } }.start();
}

在大多数情况下,它是有效的。Chrome成功从该服务器接收页面。

但是今天我注意到,如果有人足够快地发出大量请求,服务器就会开始拒绝连接。所以Chrome给了我这个:

net::ERR_SOCKET_NOT_CONNECTED

服务器端,我看不到我的try-catch中的任何错误。

我做错了什么?

共有3个答案

欧阳子石
2023-03-14

问题是关于输入流。available()方法返回零并使我不时将请求视为空。谢谢你的帮助。

陈毅
2023-03-14

如果由于任何原因,客户端和服务器之间的网络连接丢失,只有当您尝试在套接字中读取或写入某些内容时,您才会被告知。

您需要添加代码来处理此类错误并尝试再次建立新连接。

齐高寒
2023-03-14

这很奇怪,因为你必须发出waaay toooo Maa任何请求才能失败。也许你没有向我们展示你所有的代码?

无论如何,以下是可能发生的情况:

您在内部使用的ServerSocket(int-port)构造函数将委托给新的ServerSocket(int-port,int backlog,InetAddress bindAddr)构造函数,为其传递backlog的值。这是服务器繁忙时可以挂起的连接数。

.接受()调用返回到下一次调用.接受()的那一刻起,服务器就处于繁忙状态。如果您的服务器在调用.接受()之间有很多工作要做,(即如果创建新线程的调用需要很长时间,)那么在此期间服务器将无响应,如果在此期间有足够的连接到达,则任何超过50个的连接都将被拒绝。

因此,要么提供更大的积压,要么(更有可能的是)重组您的代码,以便服务器在调用.接受()之间不会花费如此长的时间。

 类似资料:
  • 我正在尝试从macos上使用swift开发的应用程序连接到realm object server 当我尝试连接时,会出现“网络连接丢失”错误,但我可以从浏览器中毫无问题地打开领域服务器。。顺便说一句,这个问题最近发生了,它在几周前工作正常 这里,用户总是,错误描述是 这发生在本地服务器和一个托管在数字海洋 服务器版本1.8。3. xcode控制台日志 2018-01-15 12:46:07.077

  • 问题内容: 注意:我没有尝试在Windows或2.7.3以外的Python版本下重现下面描述的问题。 引发问题的最可靠方法是通过(在之下)通过管道传递以下测试脚本的输出: 即: 我的问题是: __如图所示(在Unix /下)运行脚本时, 如何修改上面的测试脚本 以避免错误消息? (如测试脚本所示,不能用来捕获错误。) 诚然,上面的示例是高度人为的,但是当我的脚本的输出通过某些第三方软件传递时, 有

  • 我正在使用JVMTI代理进行动态字节码检测。我必须测试那些“热”的方法,即调用JIT编译器的方法。为此,我监听,并在其回调函数中调用。这反过来对包含“hot”函数的类调用,然后开始实际的检测。 目前,我正在安装我的类来生成一些线程。我也听线程启动和打印他们在我的代理。在类加载时使用简单的(不使用),我的插装可以完美地工作并生成新的线程。当在类加载时仪器时,我得到以下输出: 当我通过调用和来检测类文

  • 问题内容: 当我使用节点mysql时,在12:00到2:00之间出现错误,表明服务器已关闭TCP连接。这是完整的消息: 有解决办法。但是,以这种方式尝试后,问题也会出现。现在我不知道该怎么办。有人遇到这个问题吗? 这是我按照解决方案编写的方式: 问题答案: 尝试使用以下代码来处理服务器断开连接: 在您的代码中,我错过了之后的部分

  • 问题内容: 我们正在使用 订阅主题。但是,我们经常遇到错误。我已经使用JavaScript客户端(mqttws31.js)测试了连接,效果很好。表示连接没有问题。 错误:- MQTT消息:- 配置 :- pom.xml: 在调试时:- 在上述方法中,有时会抛出。所以基于catch块,它使用 问题答案: 我只是想分享一下,以防万一。…我有相同的异常,并通过确保生成了唯一的客户端ID(使用 )来解决它

  • 我有以下问题,当我运行testng套件时,我得到以下错误: “参数'paramName'是@test on method testMethod所必需的,但尚未标记为@OPtional o或已定义”。这里的所有问题都是正确的,这是我试图执行的代码的一部分: 如果此测试是,则扩展自基本测试,该测试在测试之前调用了以下方法 我不包括驱动程序被实例化的情况。如果有人知道会发生什么的话。