2016-03-28 33 views
1

我正在使用org.java_websocket.WebSocket在我的Android设备上创建Websocket服务器。我有桌面上的客户端连接到它。与Wifi断开连接的Java web socket问题

我想,当WiFi不可用时,关闭服务器并通知客户端断开连接。发生什么事情是,当我有如下的广播接收机时,会关闭服务器,但客户很长时间都没有意识到它。这有什么理由吗?

public void onReceive(Context context, Intent intent) { 
    ConnectivityManager conMngr = (ConnectivityManager)context.getSystemService(context.CONNECTIVITY_SERVICE); 
    NetworkInfo wifi = conMngr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    NetworkInfo mobile = conMngr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

    // Perform operations here to shut down web socket server 
} 

基本上当无线网络连接用,我希望能够关闭服务器和客户端通知。为什么当我为每个连接执行conn.close()时,我没有在桌面客户端上收到通知?

另外,我的一个客户端是使用Starscreamhttps://github.com/daltoniam/Starscream)的Mac客户端。不知道是否有任何关于我应该知道的事情。

回答

0

如果您的WebSocket服务器完全符合IETF规范,它应该理解WS ping/pong控制帧。如果没有(并且您的客户端代码没有),那么您需要调查您的TCP超时设置。 TCP超时可能需要很多分钟。召回TCP旨在在连接失败时重试。