2017-02-24 14 views
1

私は着信接続を待ち受けていたAndroidサーバーアプリケーションを作成しなければなりませんでした。それはルート以外のアプリケーションであり、ランダムな高位のポートをリッスンします。コードは自明で、デスクトップJava上でうまく動作します。ポートをリッスンして、非常に簡単なカスタム要求/応答プロトコルを意味します。Androidサーバー:着信接続がランダムにタイムアウトするのはなぜですか?

しかし、何らかの理由でAndroidアプリケーションでさえもacceptメソッドに入っています(つまり、着信接続を待つことになっています)。接続のタイムアウトが頻繁に発生します。

システムアプリケーション(たとえばADBサーバーなど)でさえも、定期的に着信接続をタイムアウトすることがあることがわかりました。例えばpaping出力を参照してください:

paping -p 5555 192.168.0.105 
paping v1.5.5 - Copyright (c) 2011 Mike Lovell 

Connecting to 192.168.0.105 on TCP 5555: 

Connection timed out 
Connection timed out 
Connection timed out 
Connection timed out 
Connection timed out 
Connection timed out 
Connection timed out 
Connection timed out 
Connection timed out 
Connection timed out 
Connection timed out 
Connection timed out 
Connection timed out 
Connection timed out 
Connection timed out 
Connected to 192.168.0.105: time=118.02ms protocol=TCP port=5555 
Connected to 192.168.0.105: time=140.02ms protocol=TCP port=5555 
Connected to 192.168.0.105: time=57.01ms protocol=TCP port=5555 
Connected to 192.168.0.105: time=77.51ms protocol=TCP port=5555 
Connected to 192.168.0.105: time=97.01ms protocol=TCP port=5555 
Connected to 192.168.0.105: time=122.02ms protocol=TCP port=5555 
Connected to 192.168.0.105: time=135.52ms protocol=TCP port=5555 
Connected to 192.168.0.105: time=52.01ms protocol=TCP port=5555 
Connected to 192.168.0.105: time=72.51ms protocol=TCP port=5555 
Connected to 192.168.0.105: time=92.51ms protocol=TCP port=5555 
Connected to 192.168.0.105: time=105.51ms protocol=TCP port=5555 
Connected to 192.168.0.105: time=5.50ms protocol=TCP port=5555 

だから、それはいくつかの着信データからデバイスの時間のように見え、ランダム後でタイムアウトし、そのあと受け入れを開始します。 ADBはシステム・アプリケーションなので、どのガイドラインにも従っていて、比較的バグのないものにする必要があります。

どのように問題を解決し、Androidデバイスが着信接続に迅速に応答できるようにする方法を知っていますか?そうしないと、着信トラフィックを必要とするアプリケーションはバグが発生し、信頼性が低くなります。

+0

'接続時間をoften.'?どの接続?サーバーはそれを聞いていませんでしたか?クリアしてください。 – greenapps

+0

はい、サーバーはリッスンしています。何らかの理由で受信接続がランダムに(全く接続できません)、Javaが 'accept'メソッド呼び出し内で待機しています。 – Vitaliy

+0

あなたはバグのあるルータを責めませんか?他のデバイスを試しましたか? – greenapps

答えて

0

デバイスが活発に使用されていない場合、アンドロイドOSはしばらくするとWifiラジオをオフにします。私はそれが "使用中"であると考えていることは確かではない。たぶんそれは、ユーザーがしばらくのデバイスを使用していない場合、通常のWi-Fi無線はオフにできhttps://developer.android.com/reference/android/net/wifi/WifiManager.WifiLock.html

からそれとは何か...

を持っています。

私のいくつかのアプリケーションでは、無線を目覚めさせるためにWifi Lockを使用しています。このような 何か: https://developer.android.com/reference/android/net/wifi/WifiManager.html

から :アプリケーションは、WiFiロックを作成するときに指定することができ、いくつかの異なるオプションがあります android.permission.WAKE_LOCK

public class MyActivity extends Activity { 
    private WifiManager.WifiLock wifiLock; 

    @Override 
    protected void onResume { 
     super.onResume(); 
     WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
     wifiLock = wifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, "SYNCVR"); 
     wifiLock.acquire(); 
    } 

    @Override 
    protected void onPause() { 
     wifiLock.release(); 
    } 
} 

を要求すべきです

WIFI_MODE_FULLこののWi-Fiのロック・モードでは

は、のWi-Fiはアクティブのままになります、 dは正常に動作する、すなわち、範囲内にある記憶されたアクセスポイントへの接続を自動的に確立しようと試み、記憶されたアクセスポイントが存在するが範囲内にないものがあれば周期スキャンを行う。

- こののWi-Fiのロック・モードでは

WIFI_MODE_FULL_HIGH_PERF

、Wi-FiはモードWIFI_MODE_FULLのように積極的に保持されますが、それは最小パケット損失、低パケットで高いパフォーマンスで動作デバイスの画面が消灯していても待ち時間が発生します。

-

WIFI_MODE_SCAN_ONLY

本のWi-Fiのロックモードでは、Wi-Fiはアクティブに維持されますが、サポートされる唯一の動作は、スキャンの開始であり、そしてそれに続きますスキャン結果の報告

希望はこのことができます:)

+0

これは、新しい着信接続要求のタイムアウトの問題を解決しません。接続がすでに確立されている場合、Wi-Fiロックを使用すると接続がより安定します。ただし、確立されなければならない新しい接続には影響しません。 – Vitaliy

関連する問題