Java Android上未检测到套接字已关闭?

Java Android上未检测到套接字已关闭?,java,android,sockets,Java,Android,Sockets,我已经为客户机-服务器通信编写了一个简单的网络引擎。它在Windows上运行良好,服务器知道客户端何时断开连接等(readLine()引发异常)。我尝试将引擎移植到Android,发送和接收数据正常,但由于某些原因,服务器无法检测套接字何时关闭(readLine()仍然被阻止,并且不会引发任何异常)。我甚至试着将安卓设备从互联网上断开,但它仍然没有检测到关闭的套接字。我想到了一个解决办法,实现超时,当客户端长时间不发送东西时,服务器会认为他断开了连接,但这可能不是一个好的永久解决方案 代码被tr

我已经为客户机-服务器通信编写了一个简单的网络引擎。它在Windows上运行良好,服务器知道客户端何时断开连接等(readLine()引发异常)。我尝试将引擎移植到Android,发送和接收数据正常,但由于某些原因,服务器无法检测套接字何时关闭(readLine()仍然被阻止,并且不会引发任何异常)。我甚至试着将安卓设备从互联网上断开,但它仍然没有检测到关闭的套接字。我想到了一个解决办法,实现超时,当客户端长时间不发送东西时,服务器会认为他断开了连接,但这可能不是一个好的永久解决方案

代码被try-catch异常包围:

String userInput;
BufferedReader stdIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));

while ((userInput = stdIn.readLine()) != null) {
    //do something
}

我找到了解决办法!Android上的Socket而不是引发异常会导致readLine()为null,但如果readLine()为null时while停止,则服务器代码不会执行任何操作。因此,我通过在while语句后添加一些代码来修复它。

套接字是有序关闭还是被对等方关闭?@alk不确定这是什么意思,但服务器需要知道客户端何时断开连接,即使客户端没有通过socket.close()强制关闭套接字,例如当应用程序被强制终止时,它无法调用socket.close()。stackoverflow上有100个问题,所有这些问题都与您的问题相同。其中之一是