2012-12-01 140 views
2

我有经由PrintWriter的(out.write(字符串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(); 
} 

回答

2

我认为你的问题是PrintWriter。见its documentation

方法在这个类不会抛出I/O异常,尽管它的一些 构造的可能。客户端可以查询到任何错误是否有() 通过调用checkError发生的。

改为使用BufferedWriter

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

1

我只是检查和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()){ 
     //... 
    } 
} 
+0

的readLine()返回null。 – EJP