どのように読み取り/書きnettyがその他の側面を使用readUTF/writeUTF?

StackOverflow https://stackoverflow.com/questions/4787286

  •  24-10-2019
  •  | 
  •  

質問

ようにしているとのコミュニケーションサーバーを使用する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送を追加できますか、そのような分野の人々と働くことなくスレッドの懸念?

を追加できる分野に店舗がある。やる必要はありませんの同期のスレです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top