Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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 BufferedReader在连接到套接字结束后不引发异常_Java_Sockets_Exception Handling_Connection_Bufferedreader - Fatal编程技术网

Java BufferedReader在连接到套接字结束后不引发异常

Java BufferedReader在连接到套接字结束后不引发异常,java,sockets,exception-handling,connection,bufferedreader,Java,Sockets,Exception Handling,Connection,Bufferedreader,当按下按钮时,我使用bufferedReader从客户端中的服务器读取输出,它工作正常,但是当连接关闭时,我无法让它使用方法errorHandling-我包装入(bufferedReader对象)。readLine在try/catch中,但它不会引发异常,也不会抛出。当连接失败时,checkError返回true。如果连接结束,程序将完全冻结,不会到达最后一个捕获 if(source==button) { String back = ""; if

当按下按钮时,我使用bufferedReader从客户端中的服务器读取输出,它工作正常,但是当连接关闭时,我无法让它使用方法errorHandling-我包装入(bufferedReader对象)。readLine在try/catch中,但它不会引发异常,也不会抛出。当连接失败时,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,无论是什么Tok nvm,这不是readline的错误,当我尝试使用read()读取单个字符时也会发生同样的情况-它会冻结。是的,它是打开的,因为我在linux控制台中使用ctrl+c关闭服务器,但它不会关闭。我不知道怎么修,修什么?服务器没有关闭吗?那是另一个问题。