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

如何从客户端检测网络断开(JAVA)[重复]

艾善
2023-03-14

我已经编写了java客户端服务器套接字连接代码。因为服务器接受客户机连接,然后服务器使用PrintStream发送数据,客户机在readline()中读取数据。在此之后,客户端将在readline中等待服务器。如果存在网络断开,客户端将在readline中保持等待,并且从不从readline退出。是否有一种方法从客户端本身检测断开?或者我是否必须编写新的心跳线程来检查网络断开?

共有1个答案

长孙玉泽
2023-03-14
  1. <罢工> ClientSocket.isConnected():这是错误的,它不会返回true,并且会一直返回false直到服务器也断开连接
  2. 您可以尝试通过输出流发送数据,但将得到一个异常,特别是IOException(中断管道)
  3. 您还可以使用socket.keepalive(true)这将使用套接字中内置的心跳功能,您将因此得到一个异常。

干杯。

 类似资料:
  • 问题内容: 我正在调试基于ac的linux socket程序。作为网站上所有可用的示例,我应用了以下结构: 当删除服务器关闭其服务器程序时,我可以检测到断开连接。但是,如果拔下以太网电缆,则send函数仍然返回正值,而不是-1。 假设无法更改服务器端,如何在客户端程序中检查网络连接? 问题答案: 但是,如果拔下以太网电缆,则send函数仍然返回正值,而不是-1。 首先,您应该知道实际上并没有发送任

  • 当我再次调用时,第二次调用将按预期返回。但我想明白,为什么第一次打电话成功了?我是否遗漏了某些特定于TCP的细节?这种奇怪的(对我来说)行为只针对{活动,错误}连接。

  • 我正在使用C#window应用程序表单对TCP多线程服务器进行工作,我正在尝试检测客户端的机器是否关闭并断开与服务器的连接。看了一些帖子,有了一些想法: 如何确定tcp是否连接? 我的代码如下: 多谢帮忙。

  • 我正在编写一个使用tcp套接字的服务器/客户端应用程序,我的问题是如何检测半开放连接,我计划使用keep-alive但有些人建议我做我自己的协议,所以我现在的计划是: 在服务器端: 服务器会等待10秒等待客户端发送数据,如果在给定的时间内服务器没有收到客户端的消息,服务器会将客户端标记为断开连接,否则,如果服务器收到客户端的消息,则会重新设置计时器。 我现在的问题是,这样行吗?还是我做错了?还是一

  • 我对kryonet客户端断开有问题。有谁能帮我弄清楚这个问题的根源是什么吗? 利用kryonet库,客户端需要发送和接收KeepAlive数据包才能保持连接。客户端线程将自动处理此操作。但是如果我的客户端做了一个繁重的工作(注意:在另一个线程中),它似乎会阻止客户端线程做这件事。 问题出现在读取大的数据库表时,从表中选择一些列(每个Gega的大小)需要花费时间 不同的超时阈值 kryo 2.23和

  • 问题内容: 最后使用jQuery AJAX(和JSONP)的“超时”属性解决了这个问题。看到我自己的答案! 请查看更新的部分,我也尝试过使用applet。 如果可以使用applet实现提供解决方案,也将毫不犹豫地接受您的答案。 我正在使用基于Java的Web应用程序。我的要求是检查特定端口(例如1935)是否在客户端打开或阻塞。我实现了一个“ jsonp”(为什么使用“ jsonp”?我发现通过A