2011-07-25 7 views
1

私はサーバー(java) - クライアント(Android/Java)アプリケーションをプログラミングしています。サーバーはW7です。すべての通信は、クライアントで2回以上送信するまで、データのフリーズと読み取りを停止する1回の読み取りまでうまくいっています。Javaソケットがデータを読み取っていない

読み取られないデータはバイト配列です。私はこの点まで、すべてのコミュニケーションがうまくいくことを繰り返す。

Long lLength = new Long(length); 
byte [] bLength = this.longToBytes(lLength.longValue()); 
dos.write(bLength); 
dos.flush(); 

dos.write(bLength); 
dos.flush(); 

dos.write(bLength); 
dos.flush(); 

このコードは8つのバイト配列にlong値を変換:

は、ここで私は、データを送信するために使用したコードです。私が言ったように、最初の書き込みが実行されたとき(そしてクライアントがデータを待っているとき)、読み込みは行われません。私は最後のwrite()を実行するまでは実行されません。

そして、ここではそれを読むためのコードです:私は、トラフィックを盗聴するためにWiresharkのを使用しました

byte length[] = {0,0,0,0,0,0,0,0}; 
dis.read(length); 

、と私はバイト配列が送信されていることがわかりますし、ACKとのクライアントの答えが、読み込みは行われません。

Here私はwiresharkで行ったキャプチャをアップロードしました。プロトコルデータのみ。クライアントとサーバーで

は、ソケットは次のように設定されている:これは私が怒っ駆動さ

socket = new Socket(sIP, oiPort.intValue()); 
dos = new DataOutputStream(socket.getOutputStream()); 
dis = new DataInputStream(socket.getInputStream()); 

1つの時点で、アプリケーションがデータを読み取りを停止、なぜ、私は知りません私はいつもと同じ方法でそれを送ります。

は私もテストしてきたと言う...

は、私はこの問題は、クライアントソケットの入力バッファであってもよいこととし...しかし、私は何をするか、何をしようとするのか分かりませんサーバーはWXPSP3で動作し、それでも動作しません。

ありがとう、

Newlog

答えて

1

最初に私が見るのは、あなたのlongToBytesメソッドのコードです。実際には8バイトのバイト配列を作成していますか? 8バイト未満の配列を生成している場合は、それが問題を説明します。 (お客様のクライアントは8バイトを期待しており、到着するまでブロックされます。)

私は自分自身に質問したいことは、なぜwriteLongreadLongを使用していないのかということです。それはあなたのコードを簡素化し、おそらく問題を解決するでしょう。

+0

こんにちは、スティーブン。私はあなたが言ったことすべてをチェックしました。 Wiresharkでは、私は8バイトが送信されていることがわかります。書き込みとして、クライアントはデータを読み込まなかったので、私はwriteLongを使用しません。 (最初はwriteLongでした)。 – newlog

関連する問題