【问题标题】:Java Socket Programming: Detect whether client and server are connectedJava Socket编程:检测客户端和服务器是否连接
【发布时间】:2016-09-23 10:44:27
【问题描述】:

我正在开发一个安卓应用程序。该应用程序充当客户端。它不断地向服务器发送一些数据(假设每半秒后)。服务器正在我的 PC 上运行。如何从我的应用程序中检测到服务器已关闭,以便通知用户?下面是我将数据从客户端发送到服务器的代码:

Socket socket = null;
PrintWriter out = null;
try {
    socket = new Socket(ip, PORT);
    out = new PrintWriter(socket.getOutputStream(), true);
    out.println(myMessage);
}
catch (IOException e) {
    e.printStackTrace();
}

【问题讨论】:

  • 这段代码后面还有什么继续使用socket的吗?
  • 检查this post。我认为它回答了你的问题。这个link 说明了。
  • 是的,我继续使用 out.println() 发送消息。我在另一个线程中执行此操作,每半秒后继续发送消息。
  • @caburse 我已经研究了这两个链接,但我无法在我的场景中实现它。
  • 连接不存在时会出现异常。但不能保证连接仍然存在,因为您还没有得到连接。为此,您必须实现某种心跳(例如,让您的服务器每 10 秒发送一次 "ping" 并在套接字上设置读取超时 + 简单地使您获得的数据无效)

标签: java android sockets


【解决方案1】:

PrintWriter 吞下异常。不要在网络代码中使用它。使用BufferedWriter。如果服务器已断开连接,您将在发送时收到异常......但不是立即,由于 TCP 缓冲。

【讨论】:

  • @EJP如果不是马上,要等多久?
  • 几次发送后。这取决于您发送的频率、发送次数和内部计时器。没有简单的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
  • 1970-01-01
  • 2014-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多