【问题标题】:BufferedReader in not throwing an exception after connection to socket endsBufferedReader 在连接到套接字结束后不抛出异常
【发布时间】: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


【解决方案1】:

你描述的情况是不可能的。因此,它没有发生。对等套接字必须仍然打开。检查您的观察结果。

【讨论】:

  • 是的,它是打开的,因为我在 linux 控制台中使用 ctrl+c 关闭了服务器并且它没有关闭。我不知道如何解决它。
  • 修复什么?服务器不关闭?这是一个不同的问题。
猜你喜欢
  • 2011-03-09
  • 2018-02-21
  • 2011-08-27
  • 2012-02-27
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
相关资源
最近更新 更多