我有一个总是有效的套接字连接的Android应用程序。如果连接丢失,应用程序将立即重新连接到服务器。 套接字在单独的线程中运行。
我可以在不同情况下正确关闭套接字。例如,当按下屏幕关闭或后退按钮时。
我试图用以下方法覆盖onPause,onResume,onDestroy:
我可以在不同情况下正确关闭套接字。例如,当按下屏幕关闭或后退按钮时。
我试图覆盖onPause,onResume,onDestroy。我已经尝试了所有这三种方法,
明确关闭套接字:
socket.close();
将其归零:
socket = null;
我也尝试过shutdownInput方法:
socket.shutdownInput();
但是服务器继续认为套接字是活的。
P.S。:顺便说一句,当我重新编译并再次运行android app时,连接就会顺利进行。
答案 0 :(得分:0)
在处理套接字时,您所描述的内容似乎是common issue;即使您可能正确地关闭了客户端上的套接字(即在您的Android应用程序中),您的服务器也没有意识到这一点,那可能是 为什么它仍然认为套接字是活着的。
答案 1 :(得分:0)
您应该让服务器关闭套接字。如果您不这样做,服务器将相信客户端服务器仍处于打开状态,直到服务器尝试写入/读取尝试。
我建议检查客户端 - 服务器协议:您应该从服务器读取一些可以解释为关闭请求的“命令”;然后服务器也可以关闭套接字。服务器端的这样的东西可以帮助你
1 - 服务器创建侦听套接字
2 - 服务器accept()
3 - 以下内容:
while( readClientCommand() !=CLOSE_COMMAND)
// process command
4 - socket.close();