奇妙な動作が発生しています:
iPhoneデバイスから送信されるTCPリクエストを処理するJava ServerSocketに基づくサーバーがあります。iPhone を Wi-Fi 経由で接続して使用すると、ネットワークに問題がないことに気付きました。iphone は接続を開き、ストリームからの書き込みと読み取りを行う必要があり、顕著な遅延はありません。ここまでは順調ですね。ただし、3g を使用すると、最初のメッセージが送信されてから応答が完全に返されるまでに 1.5 秒の遅延が発生します。サーバーがメッセージをソケットにフラッシュした直後に、メッセージの最初のバイトが読み取られるようですが、残りのメッセージは約 1 秒間 (!) 遅延しています。
このネットワークの動作は、iPhone 側に到着するバッファ サイズを出力することと、サーバー側で Wireshark を使用してネットワークを監視することの両方で確認しました。 Wireshark もこれを示しています。最初のバイトは 1 バイトのメッセージ サイズ (常に 0 BTW) で送信され、残りのメッセージはその後、1 つまたは複数の大きなメッセージ (~1300 バイト) で送信されます。
メッセージは、8 バイトのヘッダー (2 つの整数 - タイプとサイズ) と、そのサイズの本文で構成されます。
本当に奇妙なことは、c ++で同じプロトコルを使用する同様のサーバーを(pocoサーバーを使用して)作成すると、完全に機能することです。
ソケットの DataOutputStream を使用して、2 つの writeInt 命令と本体を書き込む write(byte[]) を使用してヘッダーを書き込みます。次に、ストリームをフラッシュします。
この種の動作を引き起こす可能性のあるソケットオプション(Java)があるかどうかは誰にもわかりませんか?
どんな助けでも大歓迎です。