java - 中断套接字连接

标签 java sockets

我有一个套接字程序,它通过 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。请参阅its documentation :

Methods in this class never throw I/O exceptions, although some of its constructors may. The client may inquire as to whether any errors have occurred by invoking checkError().

使用BufferedWriter相反。

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

关于java - 中断套接字连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13662006/

相关文章:

java - 在 @ManyToMany 映射中,未将数据插入数据库(空指针异常)

java - 如何从我的 ShrinkWrap 存档中删除我的测试类

java.lang.ClassFormatError JVMCFRE076 坏魔数(Magic Number)

java - 如何将换行符附加到 StringBuilder

c - 带有第一个 NULL 参数的 getaddrinfo 给出第一个 IPv4 而不是 IPv6

带路由器的 C++ 套接字

java - 模拟中时间管理的静态类

python - Tor、Stem 和套接字 - 使用 TOR 改变身份

c# - 如何判断 Socket 的发送缓冲区中有多少数据

c - sockaddr 中 sa_data 字段的用途是什么?