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