Java 中断插座连接
我有一个socket程序,它通过PrintWriter(out.write(String str))发送文本数据,而另一侧的BufferedReader(in.readLine())正在接收这个数据 如果某个客户端断开连接,我想用某种“超时”来保护我的程序,但我测试了它,在工作期间,当客户端关闭时,服务器仍在发送数据,并且没有中断,也没有套接字关闭 对于客户端也是一样,我想断开连接并显示信息,例如“服务器不工作”。 我该怎么办Java 中断插座连接,java,sockets,Java,Sockets,我有一个socket程序,它通过PrintWriter(out.write(String str))发送文本数据,而另一侧的BufferedReader(in.readLine())正在接收这个数据 如果某个客户端断开连接,我想用某种“超时”来保护我的程序,但我测试了它,在工作期间,当客户端关闭时,服务器仍在发送数据,并且没有中断,也没有套接字关闭 对于客户端也是一样,我想断开连接并显示信息,例如“服务器不工作”。 我该怎么办 // Server out = new PrintWriter( s
// 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();
}
我想你的问题是印刷作家。见: 此类中的方法从不抛出I/O异常,尽管有些 建设者可以。客户可询问是否存在任何错误 调用checkError()时发生 改用
请注意,java.util.Scanner也有同样的问题(如果您在服务器端使用它)我刚刚检查了,并且
PrintWriter.checkError()
方法帮助我解决了这个问题。当客户端断开连接时,方法返回true。如描述所述:在流未关闭时刷新流并检查其错误状态。
// Server
this.out = new PrintWriter(sock.getOutputStream());
while (true) {
this.out.write("Hello");
this.out.flush();
if(this.out.checkError()){
//...
}
}
在套接字上设置读取超时。