9

GalaxyAceをWiFi経由でラップトップに接続する実験をしています。どちらのデバイスもWiFi経由でルーターに接続されており、どちらもJavaを使用しています。

TCP接続で時々非常に高いpingが発生した後、パケットが実際に送信されるタイミングを制御できるように、UDPに基づいて接続することにしました。

ただし、Androidは依然としてUDPパケットをバッファリングし、すぐには送信しないようです。これ、または送信データが数分の1秒間送信されない場合は、WiFiを完全にシャットダウンします。

まず、応答がない限り(UDPでのパケット損失をカバーする)、1秒に1回程度の不規則な間隔で電話にpingを送信し、ping要求を繰り返し送信しました。

    computer -> phone -> computer
    Pinging 192.168.1.40: 148.05968ms
    Pinging 192.168.1.40: 524.41156ms
    Pinging 192.168.1.40: 705.8688ms
    Pinging 192.168.1.40: 3.705367ms
    Pinging 192.168.1.40: 3.872159ms
    Pinging 192.168.1.40: 549.4541ms
    Pinging 192.168.1.40: 479.29843ms
    Pinging 192.168.1.40: 3.89936ms
    Pinging 192.168.1.40: 428.85876ms
    Pinging 192.168.1.40: 739.28125ms

私はこの問題を回避するために、100ミリ秒ごとに1バイトのデータを含むパケットを電話からコンピューターに送信し、それ以外のルーチンでは何も変更しませんでした。

    computer -> phone -> computer
    Pinging 192.168.1.40: 4.147753ms
    Pinging 192.168.1.40: 3.738213ms
    Pinging 192.168.1.40: 14.133768ms
    Pinging 192.168.1.40: 4.470561ms
    Pinging 192.168.1.40: 3.628386ms
    Pinging 192.168.1.40: 3.898334ms
    Pinging 192.168.1.40: 3.512401ms
    Pinging 192.168.1.40: 7.907006ms
    Pinging 192.168.1.40: 5.234216ms
    Pinging 192.168.1.40: 5.639137ms

私のアプリケーションではレイテンシーを低くすることが重要なので、このように空のパケットを送信し続けます(少なくとも実際のデータが送信されない限り)。無駄なデータをネットワーク全体に投げ込むことなく、Androidにできるだけ速く応答させることができるかどうか疑問に思っています。それで、よりエレガントな解決策はありますか?

ちなみに、問題はコンピューターではなくスマートフォンにあると思いますが、コンピューターが着信パケットを待ってから送信することも考えられます。しかし、私がネットワーキングについて知っていることから、これは非常にありそうもないことです。

ご協力いただきありがとうございます!

4

1 に答える 1

3

Java に関する限り、DatagramSockect.send(...) が呼び出されると、データグラムが「送信」されます。Java アプリケーション空間にはバッファリングがなく、OS でバッファリングを制御する方法はありません。

TCP または UDP のいずれかがパケットを「保留」している可能性はほとんどありません。根本的な問題は WiFi レベルの何かである可能性がはるかに高く、おそらくルーティングに問題があり、OS は問題が解決するまでパケットの送信を遅らせています。


おかげで、その間に他のパケットが送信されなかった場合にのみ、これらのキープアライブ パケットの送信を実装しました。

あなたのキープアライブ ping は望ましい効果をもたらしているようです...そして、根本的な問題は / 非アクティブのために WiFi の「リンク」が切断されていたことであると推測します。(「バッテリーを消耗させない」機能のように聞こえます...) これは、代替の修正方法として、WiFi タイムアウトを微調整できるかどうかを確認することを示唆しています。

それに加えて、誰もリッスンしていない別のポートにパケットを送信する方が速いでしょうか? なくても同じ効果があるはずですよね?

違いはほとんどありません。問題の原因が輻輳であるという証拠はありません。証拠は、電力を節約するために非アクティブなWiFiをオフにするあなたの電話を示しています...

于 2012-11-26T04:50:52.280 に答える