0

TCP/IP で他の IP (ナビゲーション デバイス) からフル パケットを受信する必要があります。たとえば、デバイスは定期的に (1 分間で) 966 バイトを送信する必要があります。私の場合、最初に受信したバッファの長さは 256 バイト (パケットの最初の部分)、2 番目は 710 バイト (パケットの最後の部分)、3 番目は完全なパケット (966 バイト) です。最初に受信したバッファ長の最小値を手動で設定する方法は?

これは私のコードの一部です:

Executor bossExecutors = Executors.newCachedThreadPool();
Executor workerExecutors = Executors.newCachedThreadPool();
NioServerSocketChannelFactory channelsFactory =
                new NioServerSocketChannelFactory(bossExecutors, workerExecutors);
ServerBootstrap bootstrap = new ServerBootstrap(channelsFactory);
ChannelPipelineFactory pipelineFactory = new NettyServerPipelineFactory(this.HWController);
bootstrap.setPipelineFactory(pipelineFactory);
bootstrap.setOption("child.tcpNoDelay", true);
bootstrap.setOption("child.keepAlive", true);
bootstrap.setOption("child.receiveBufferSizePredictorFactory", 
  new FixedReceiveBufferSizePredictorFactory(2048)
);
bootstrap.bind(new InetSocketAddress(this.port));
4

1 に答える 1

1

receiveBufferSizePredictorFactoryを指定しても、メッセージは複数の に分割されますMessageEvent。これは、TCP/IP がメッセージ指向のプロトコルではなく、ストリーム指向のプロトコルであるためです。この一般的な問題に対処する適切なデコーダーを作成する方法を説明するユーザー ガイドをお読みください。

于 2011-12-01T07:55:03.540 に答える