1
我想與使用DataInputStream.readUTF和DataOutputStream.writeUTF的服務器通信。如何使用netty在對方使用readUTF/writeUTF時讀寫?
我做了通常的啓動代碼設置我的客戶,並在MyClientHandler延伸SimpleChannelUpstreamHandler設置以下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());
}
});
,我有以下幾點:
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
}
}
我設法接收消息從服務器成功,但服務器沒有收到我的「你好那邊」的消息。不知道我可能忽略了什麼。
此外,請注意布爾發送,我可以添加這樣的領域,並與他們一起工作,而無需線程擔憂?
我認爲更簡潔的方法是將org.jboss.netty.handler.codec.frame.LengthFieldPrepender添加到服務器管道。這會自動將長度字段預先添加到傳出數據包。 – Abe 2011-05-04 08:01:59