Android套接字连接问题

时间:2016-01-17 09:27:01

标签: java android

我正在创建一个作为服务运行的聊天应用程序。我使用套接字连接到聊天服务器,并使用setSoTimeout声明超时。

当连接空闲时(例如当我在家并连接到WiFi时)我从不会遇到问题。当我外出时,我的WiFi连接丢失,我的手机切换到3G。问题是套接字保持连接而不接收任何数据。 (因此不会调用超时异常。)<有时它会在30分钟后连接,但这需要减少到至少几秒钟。

我还尝试在我的AndroidManifest.xml中添加CONNECTIVITY_CHANGE广播检测器,这也没有用。

请参阅下面的套接字连接:

    socket = new Socket(proxy);
    SocketAddress socketAddress = new InetSocketAddress(HOST,
                PORT);
    socket.connect(socketAddress);
    if (socket.isConnected()) {
        socket.setSoTimeout(1020000); //Even when setting to 10000 makes no sense
        return true;
    } else {
        Log.w("WARNING", "Failed to connect to the server");
        return false;
    }

在后台还有一些循环运行,它会检查服务器是否有聊天消息,这些循环会在没有收到数据时触发重新连接,但这也不起作用。 (在重新连接期间,我将套接字设置为socket.close()socket = null,然后再次连接。)

那么有什么想法,也许我需要使用不同的套接字?或者其他一些代码来解决这个问题?感谢。

1 个答案:

答案 0 :(得分:0)

在这种意外(根据应用程序的角度)网络断开连接时,套接字将不知道它已断开连接。如果发生这种情况,唯一的方法是尝试将一些数据写入套接字。当套接字断开连接时,写入数据将抛出IOExcpetion,并显示Connection reset等消息。

您最好实施心跳方法来检测断开连接。每隔5~10秒发送到服务器的数据包会很快检测到网络断开。