どのように読み取り/書きnettyがその他の側面を使用readUTF/writeUTF?
質問
ようにしているとのコミュニケーションサーバーを使用するdatainputstreamま.readUTFおよびDataOutputStream.writeUTF.
また、通常のx回試ーコードの設定マクライアントの設定は以下のpipelinefactory
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
@Override
public ChannelPipeline getPipeline() throws Exception {
return Channels.pipeline(
new LengthFieldBasedFrameDecoder(65536, 0, 2),
new StringDecoder(CharsetUtil.UTF_8),
new StringEncoder(CharsetUtil.UTF_8),
new MyClientHandler());
}
});
にMyClientHandler延SimpleChannelUpstreamHandler、以下の
boolean sent = false; //is this thread safe?
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
logger.log(Level.INFO, e.getMessage().toString());
e.getChannel().write("Hello over there!");
if(!sent){
//do something and set sent
}
}
から受けることになってしまいからのメッセージを受けるサーバに成功し、サーバーを受けていない私の"こんにちはが"メッセージ。だって見逃されがちです。
また、通知のboolean送を追加できますか、そのような分野の人々と働くことなくスレッドの懸念?
解決
- から受けることになってしまいからのメッセージを受けるサーバに成功し、サーバーを受けていない私の"こんにちはが"メッセージ。だって見逃されがちです。
でからのメッセージサーバを得ることができよLengthFieldBasedFrameDecoderのメッセージの長さい。
+--------+----------+
| Length | Message |
+--------+----------+
そのため、可能性があることをサーバに期待受信したメッセージの長さい。てみてはいかがでしょうか、lengthフィールドは、以下のように書きます?
+--------+---------------------+
| 0x0011 | "Hello over there!" |
+--------+---------------------+
[sample]
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
logger.log(Level.INFO, e.getMessage().toString());
byte[] message = "Hello over there!".getBytes("UTF-8");
ChannelBuffer buf = ChannelBuffers.buffer(message.length + 2);
buf.clear();
short len = (short)message.length;
buf.writeShort(len);
buf.writeBytes(message);
e.getChannel().write(buf);
if(!sent){
//do something and set sent
}
}
- また、通知のboolean送を追加できますか、そのような分野の人々と働くことなくスレッドの懸念?
を追加できる分野に店舗がある。やる必要はありませんの同期のスレです。
所属していません StackOverflow