Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 中断插座连接_Java_Sockets - Fatal编程技术网

Java 中断插座连接

Java 中断插座连接,java,sockets,Java,Sockets,我有一个socket程序,它通过PrintWriter(out.write(String str))发送文本数据,而另一侧的BufferedReader(in.readLine())正在接收这个数据 如果某个客户端断开连接,我想用某种“超时”来保护我的程序,但我测试了它,在工作期间,当客户端关闭时,服务器仍在发送数据,并且没有中断,也没有套接字关闭 对于客户端也是一样,我想断开连接并显示信息,例如“服务器不工作”。 我该怎么办 // Server out = new PrintWriter( s

我有一个socket程序,它通过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();
}

我想你的问题是印刷作家。见:

此类中的方法从不抛出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()){
      //...
   }
}

在套接字上设置读取超时。