如何使用活动套接字连接正确关闭活动?

时间:2012-02-04 01:52:07

标签: java android sockets

我有一个总是有效的套接字连接的Android应用程序。如果连接丢失,应用程序将立即重新连接到服务器。 套接字在单独的线程中运行。

我可以在不同情况下正确关闭套接字。例如,当按下屏幕关闭或后退按钮时。

我试图用以下方法覆盖onPause,onResume,onDestroy:

我可以在不同情况下正确关闭套接字。例如,当按下屏幕关闭或后退按钮时。

我试图覆盖onPause,onResume,onDestroy。我已经尝试了所有这三种方法,

明确关闭套接字:

socket.close();

将其归零:

socket = null;

我也尝试过shutdownInput方法:

socket.shutdownInput();

但是服务器继续认为套接字是活的。

P.S。:顺便说一句,当我重新编译并再次运行android app时,连接就会顺利进行。

2 个答案:

答案 0 :(得分:0)

在处理套接字时,您所描述的内容似乎是common issue;即使您可能正确地关闭了客户端上的套接字(即在您的Android应用程序中),您的服务器也没有意识到这一点,那可能是 为什么它仍然认为套接字是活着的。

答案 1 :(得分:0)

您应该让服务器关闭套接字。如果您不这样做,服务器将相信客户端服务器仍处于打开状态,直到服务器尝试写入/读取尝试。

我建议检查客户端 - 服务器协议:您应该从服务器读取一些可以解释为关闭请求的“命令”;然后服务器也可以关闭套接字。服务器端的这样的东西可以帮助你

1 - 服务器创建侦听套接字

2 - 服务器accept()

3 - 以下内容:

while( readClientCommand() !=CLOSE_COMMAND)

   // process command

4 - socket.close();