2011-11-09 11 views
0

受信されていない私は、私の会社の顧客サイトの一つで、本当に奇妙な問題に直面しています。 システムは、サイト内のいずれかのサーバーにHTTPリクエストを送信しようとします。 サーバーは、DMZ内から実行されるマシン上で実行されています。HTTPメッセージ本文が

クライアントはJavaであり、サーバーは、C#です。

Socket s = new Socket(); 
socket.connect([server address], timeout); 

SocketOutputBuffer output = new SocketOutputBuffer (socket); 

byte[] buffer = [creating the HTTP request headers] 
output.write(buffer); 
output.flush(); 

buffer = [creating the message body] 
output.write(buffer); 
output.flush(); 

クライアントアプリケーションをデバッグ

、最後の「output.flush()」仕上げ: -

[実際のコードに擬似から変更編集]: 私のコードは次のようにHTTPリクエストを送信します成功しました。 サーバー側では、HTTPヘッダーのみがサーバー側で受信されたことがわかります。

奇妙なことは、私は最後のフラッシュの後にソケットを閉じると、メッセージ本文がサーバに到着したということです。

どのような考えですか?

ありがとうございます。

+0

ハードをシャットダウンにソケットを設定する必要があります。あなたが最初のフラッシュ動作を知っているので、それを省略して、メッセージ本体の後でのみフラッシュしてみましたか? –

+0

コードを更新したので、最初のフラッシュを省略してみます。ありがとう。 –

答えて

0

のJavaはどのような?どのプラットフォームですか?この後にソケットを閉じますか?ソケットを正しくシャットダウンしましたか? 多くの場合、あなたはあなたの実際のコードを見ずに診断する(...フラッシュが保証されていない)、それはバッファされたデータの送信を完了することができますようにし

+0

クライアント側はAndroidデバイス(2.1)で動作します。 「ソケットをシャットダウンする」とはどういう意味ですか?あなたはソケットを閉じることを意味しますか?私の接続はサーバーにデータをストリーミングしているので、セッション全体を通してオープンにする必要があります。 返信いただきありがとうございます。 –

+0

@LiorOhana:O'Rooneyは、ソケットのクローズオプションを指しています。これは、ソケットを閉じるときに送信データがまだ保留されているときのソケットの動作を規定しています。デフォルトでは、ソケットへのアプリケーションハンドルがその後の使用から無効にされていても、一定期間、ソケットはバックグラウンドでデータを送信し続けます。 –

+0

@Remy:私が理解していることを確認するために、何らかの理由で私の接続が無効になった可能性がありますので、フラッシュが機能しない可能性があります。 10x –

関連する問題