2016-03-28 85 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旨在在連接失敗時重試。