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
在客户端识别连接关闭(Android Studio)_Android_Sockets_Client_Bufferedreader - Fatal编程技术网

在客户端识别连接关闭(Android Studio)

在客户端识别连接关闭(Android Studio),android,sockets,client,bufferedreader,Android,Sockets,Client,Bufferedreader,我已经构建了一个服务器(python)-客户端(android Studio-java)应用程序。 我试图在客户端识别服务器已关闭其连接 问题是我无法识别它。 我已尝试在关闭服务器后检查msgSlice==“”或==“”或==null。 他们都没有变成现实。它也不会抛出异常 奇怪的是,当我删除行“if(input.ready())”时,当服务器关闭连接(并打印第二个日志)时,它确实会出现异常。 但由于某些原因,数据有时会以错误的顺序接收,并且我在接收一些没有此行的数据时遇到问题(尤其是base6

我已经构建了一个服务器(python)-客户端(android Studio-java)应用程序。 我试图在客户端识别服务器已关闭其连接

问题是我无法识别它。 我已尝试在关闭服务器后检查msgSlice==“”或==“”或==null。 他们都没有变成现实。它也不会抛出异常

奇怪的是,当我删除行“if(input.ready())”时,当服务器关闭连接(并打印第二个日志)时,它确实会出现异常。 但由于某些原因,数据有时会以错误的顺序接收,并且我在接收一些没有此行的数据时遇到问题(尤其是base64图像)

BufferedReader创建:

input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
接收线程:

while (active && MainActivity.currentContext.equals(context)) {
                    String msg = "";       //full message (ends when '$' is sent)
                    String msgSlice = "";
                    while (!msgSlice.equals("$") && active && MainActivity.currentContext.equals(context))
                    //Loop until received full message (ends with \r\n$\r\n)
                    {
                        // add message slices to the full message
                        msg += msgSlice;    //slice of message (ends when "\r\n" is sent)
                        msgSlice = "";
                        try {
                            if(input.ready())
                                msgSlice = input.readLine();
                        } catch (Exception e){
                            Log.e("errorRecieve", "" + e.toString());
                            if (e.getMessage().equals("Connection reset")) {
                                Log.e("COM closed", "Server closed connection: " + e.toString());
                                closeConnection();
                                return;
                            }
                        }
                    }
                    if (!msg.equals("") )
                        handleMsg(msg);
                }