2012-03-22 4 views
1

ソケットからデータを受信するのに奇妙な問題があります。 空のソケットを使用しているクライアントでは。サーバーJava Netty上。 ソケットシンプルパケットへの書き込み:int numPacket、int textLength、utf8String text。クライアントで読む。ソケット。パケットが必要なときにキューに残ります

//server 
buffer.writeInt(packetId); 
ChannelBuffer ch = ChannelBuffers.copiedBuffer(text, CharsetUtil.UTF_8); 
buffer.writeInt(text.length()); 
buffer.writeBytes(ch); 

//client 
packetId = socket.readInt() 
packetLen = socket.readInt() 
text = socket.readUtfBytes(packetLen) 

時々、1つのパケット()のdoesntは、クライアントが受信しますが、サーバーが送信した、およびパケットが送信されたことをtcpdumpのショー。サーバーが新しいパケットを送信すると、クライアントは以前のパケットを読み込み、新しいパケットを受信せず、必要のないキューのように機能します。クライアントは、おそらくいくつかのバイト\nを待っているように、各または3つすべて

答えて

1

が見えるの後の悪い英語のため申し訳ありません p.s -_-

0

は、フレームの終わりを知っているなど\u、あなたのバッファのフラッシュを()を使用してみてください。私は、クライアントが送信の最後にnull byteを期待していたので、フラッシュと同様の問題がありました。

encoderをパイプラインの最後のエンコーダとして追加して試してみることもできます。 NULバイトを処理するための関連するコードを以下に示します。

ChannelBuffer nulBuffer = ChannelBuffers.wrappedBuffer(new byte[] { 0 }); 
    ChannelBuffer buffer = ChannelBuffers.wrappedBuffer((ChannelBuffer)msg,nulBuffer); 
+0

tcpdumpパケットが正しく送信されたことを示します。私のために助けてくれない – user1081056

関連する問題