2009-04-23 10 views
1

サーバがread()およびread()を使用している間にクライアントがreadUTF()およびwriteUTF()を使用するソケットプログラムを作成しました。クライアントと通信するためのwrite()。サーバがwriteを使用してデータを送信し、readUTF()を使用してデータを受信すると、Javaソケットプログラムはデータを読み取ることができません。

私のサーバーは、サーバーからのすべてのデータを読み取ることができます。私は、サーバー側でwrite()、クライアント側でreadUTF()を使用しています。

したがって、このシナリオでは、クライアントは、データサイズが大きく、一部のデータのみが受信された場合、サーバーによって送信されたすべてのデータを取得できません。

すべてのデータが確実に送信されるようにするにはどうすればよいですか?

+0

ソケットの実装について少し説明していただけますか? UDPやTCPなど? –

答えて

0

readUTFとwriteUTFは、UTFの変更された形式を使用することに注意してください。私は、あなたがサーバー上でread()とwrite()を使って何を送信しているのか分からないが、クライアントが期待しているものとサーバが予期しているものとの間に互換性があることを確認する必要がある。

クライアントとサーバーの両方を同じ方法で送受信します。それがあなたの問題を引き起こしているのかどうかは分かりませんが、無関係な悲しみをあなたに救います。

1

このシナリオでは、readUTFとwriteUTFを使用しないでください。代わりにバイト配列を読み書き:

read(byte [] b) 

次に、適切なStringコンストラクタを使用してバイト配列をストリングに変換します。

public String(byte[] bytes, 
       String charsetName) 

あなたがしようとキャッチすべきであるにUnsupportedEncodingException例外を。