私は、外部マシン上にあるサーバープログラムとの通信を含むWindows用のJavaプログラムを作成しようとしています。私のプログラムは、サーバーに正常に接続し、 、応答を待ちます。Javaクライアントサーバー送信バイト受信者が無期限に聴く
私はサーバが一度に1バイトずつ私にバイト(応答)を返していることを知っています。私はさまざまなメソッド(read、readByteなど)でDataInputStreamオブジェクトを使用しようとしましたが、そのメソッド(readLayLineなど)でBufferedReaderオブジェクトを使用しようとしましたが、すべてのリーダーオブジェクトと、すべて同じ問題に立ち向かう。
バイトが正常に読み取られています(1バイトまたはバイトが読み取られるたびに、それらをコンソールに出力できます)。問題は読者がいつ読書をやめるのか分からないことです。サーバーがすべてのバイトを送信しても、私の最後のリーダー関数は無限に多くのデータを待っているので、プログラムは読み取り関数でハングします。
この問題は、私が試したすべてのテクニックに影響するようです。私はシンプルなクライアントプログラムとサーバープログラムを使ってテストを実行しています。クライアントプログラムとサーバープログラムはそれぞれ40〜50行ほどあり、クライアントはサーバーに接続してバイトを送信します。私がサーバーリーダーのために試したすべてのテクニックでは、上記の同じ問題が発生します(すべてのデータを送信したにもかかわらず、サーバーはクライアントからの入力を待ってハングします)。
私は本当にこれについていくつかの助けが切望しています。このプログラムはすぐに終了することが重要です。この通信の問題を除いて基本的には完全です。どんな助けでも大歓迎です!最後に
-Rob
--EDIT--
、Iは、セグメントである(読み取られたメッセージのセグメントの数を追跡することにより、バイトの読み取りを終了するアルゴリズムに定住2つのヌル値:00で区切られ、期待されるセグメントの数(引数としてread関数に渡される)と比較します。それは理想的な方法ではありませんが、それは機能し、私はもうプログラムに取り組む時間がありません。
ありがとうございました。
ストリームを終了していますか? – npinti
クライアント・サーバー・テスト・プログラムでデータを送信した後、クライアント側でライター・オブジェクトをクローズしようとしましたが、それが機能しましたが、サーバーはランタイム例外を引き起こし、DataOutputStreamオブジェクトを作成しようとしたときクライアントに応答を書き込む。しかし、私が書こうとしている実際のプログラムでは、サーバが何をしているのか、していないのかを制御できません。 – Rob
また、データの長さを前もって送信することはオプションではありません。私が接触しているサーバーはそうしないため、サーバーコードを制御できません。 – Rob