【发布时间】:2014-05-20 16:57:30
【问题描述】:
当按下按钮时,我使用 bufferedReader 从客户端中的服务器读取输出,它工作正常,但是当连接关闭时我无法让它使用方法 errorHandling - 我包裹在(bufferedreader 对象)。 try/catch 中的 readLine 但它不会抛出异常,连接失败时 out.checkError 也不会返回 true。如果连接结束,程序会完全冻结并且不会到达最后一个捕获。
if(source==button) {
String back = "";
if(out.checkError()){
errorHandling("I/O Closed");
return;
}
switch(currentOp){
case(0):
out.println("R "+input.getText());
break;
case(1):
out.println("P "+input.getText());
break;
case(2):
out.println("M "+input.getText());
break;
}
try{
if((back=in.readLine())==null) throw new SocketServerException();
}
catch(Exception e){
errorHandling("I/O Closed");
return;
}
【问题讨论】:
-
连接好像没有关闭。
-
是的,因为我在我的电脑上手动关闭了服务器。我认为问题在于 readLine() 读取直到它读取了一些行,并且由于没有什么可以读取它只是挂起程序。我不知道如何解决它。我尝试使用 socket.isInputClosed 等,但无论如何它们都返回 false
-
好的 nvm 这不是 readline 的错,当我尝试使用 read() 读取单个字符时也会发生同样的情况 - 它会冻结。
标签: java sockets exception-handling connection bufferedreader