DataInputStream.readUTFとDataOutputStream.writeUTFを使用するサーバーと通信しようとしています。
クライアントをセットアップするために通常のブートストラップコードを実行し、次のパイプラインファクトリを設定しました
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());
}
});
SimpleChannelUpstreamHandlerを拡張するMyClientHandlerには、次のものがあります。
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
}
}
サーバーからメッセージを正常に受信できましたが、サーバーが「こんにちは」メッセージを受信していません。何を見落としていたのかわからない。
また、送信されたブール値に注意してください。そのようなフィールドを追加して、スレッドの心配なしにそれらを操作できますか?