2012-04-21 7 views
0

基本的なクライアント/サーバー接続を設定していて、接続時にメッセージを相互に送信しようとしていますが、サーバーからメッセージを受信するクライアントがあります。サーバーはクライアントメッセージを受信しません。ここでは、クライアントから送信されたデータを読み取るための私の現在のコードは次のとおりです。Javaサーバーのソケット、DataInputStreamからの内容の読み取り

ServerThread.socket = new ServerSocket(5556); 
Socket client = ServerThread.socket.accept(); 
DataInputStream in = new DataInputStream 
    (
     new BufferedInputStream(client.getInputStream()) 
    ); 
String s = in.readUTF(); 
System.out.println("Client: " + s); 

それが何かをプリントアウトしていないことを利用し、ないだけでも、「クライアント:」

ここに私のクライアント接続のための私のコードがあります、メッセージを送信します。注:私はVBでこの部分を書きました:

client = New TcpClient() 
client.Connect("myiphere", 5556) 
Dim stream As NetworkStream = client.GetStream() 
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("Hello server") 
stream.Write(sendBytes, 0, sendBytes.Length) 

データが受信されない理由はありますか?なぜそれが遅れているのですか?私はtry catchブロックでコードのJava部分を調べてみましたが、エラーは発生しません。

ご協力いただければ幸いです。

+0

VBクライアントソケット出力ストリームをフラッシュしますか? –

+0

いいえ、私はしなかった、私はそれをフラッシュし、まだ変更はありません。 –

答えて

0

DataInputStreamのUTFは、の先頭に0と長さが付けられたです。

私はVBとあまり行っていないので、他のエラーがあるかどうかは知りませんが、試してみてください。

stream.Write(0, sendBytes.Length, sendBytes) 

私は、内のコードを示唆していなければならない

私は知らない言語です。 readUTFでそれを読み取る場合は、テキストバイトを送信する前に、0バイトと文字列の長さと等しいバイトを送信する必要があります。

編集: あなたは本当にDataInputStreamを使用したくないかもしれません。バイナリストリームを格納するためのものです。あなたがテキストを受信して​​いる場合、Java側でこれを試してみてください。

BufferedReader in = new BufferedReader(
    new InputStreamReader(
     client.getInputStream() 
    ) 
); 
String s = in.readLine(); 

テキストを送信していない場合は、ちょうどあなたがしたようにBufferedInputStreamを作成し、それをオフバイトをお読みください。

+0

申し訳ありません。 Write関数には、次のパラメータが必要です。Byte Array、int、int ,. –

+0

ああ、そうだ。もう一度私はVBを知らない - 私はストリームの終わりにバイトとしてこれらの整数を送信していると思った。あなたはバイト '0'、' sendBytes.Length'に等しいバイト、そしてデータそのものを送る必要があります。 – maybeWeCouldStealAVan

+0

また、テキスト用にDataInputStreamを使用してもよろしいですか? – maybeWeCouldStealAVan

0

readUTFは、指摘されているように、コンテンツが何バイト存在するかを示す2バイトが必要です。詳細は、http://docs.oracle.com/javase/6/docs/api/java/io/DataInput.html#readUTF()を参照してください。

InputStreamReaderを使用して解決しても、InputStreamReaderはUTF-16入力(1文字あたり2バイト)が必要ですが、VBクライアントはASCIIを送信しているため動作しません。私はあなたのVBクライアントがUTF-16を送信できるようにすることをお勧めします(もしmaybeWeCouldStealAVanのJavaコードを使用していれば)。あなたがそれを行うことができない場合(申し訳ありませんが、私はVBが可能なエンコーディングを知らない)、ちょうどreadUTFを作るために必要な余分な2バイトを書く。

関連する問題