繁体   English   中英

中断套接字连接

[英]Interrupting socket connection

我有一个套接字程序,它通过 PrintWriter(out.write(String str)) 发送文本数据,另一端 BufferedReader(in.readLine()) 正在接收它。

如果其中一个客户端断开连接,我想通过某种“超时”保护我的程序,但我对其进行了测试,并且在工作期间,当客户端关闭时,服务器仍在发送数据并且没有中断或套接字关闭。

客户端也一样,我想断开连接并显示信息,例如“服务器不工作”。 我该如何处理?

// Server
out = new PrintWriter( sock.getOutputStream());
while( true ) {
   this.out.write("Hello");
   this.out.flush();
}

// Client
in = new BufferedReader( new InputStreamReader( sock.getInputStream()));
while (true) {
   in.readLine();
}

我认为您的问题是 PrintWriter。 请参阅其文档

此类中的方法从不抛出 I/O 异常,尽管其某些构造函数可能会。 客户端可以通过调用 checkError() 来查询是否发生了任何错误。

改用BufferedWriter

请注意 java.util.Scanner 有同样的问题(如果你在服务器端使用它)

我刚刚检查过PrintWriter.checkError()方法帮助我解决了我的问题。 当客户端断开连接时,方法返回 true。 如描述所述: Flushes the stream if it's not closed and checks its error state.

// Server
this.out = new PrintWriter(sock.getOutputStream());
while (true) {
   this.out.write("Hello");
   this.out.flush();
   if(this.out.checkError()){
      //...
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM