我是Netty的新手,我想知道当TCP客户端有时发送可变长度的二进制记录(十六进制)时,如何读取/处理传入的TCP数据,有时会发送可变长度的ASCII记录,其中没有一个是分隔的通过回车或换行。
TCP客户端正在发送字节流,如下所示:
以'$'开头但具有不同字节数且不以任何字符终止的二进制字节流,
ASCII字节流,以'('和''结尾'开头但具有不同的字节数,不会被任何字符终止
两组记录都到达同一个端口。
我如何编写基于Netty的TCP服务器来处理/读取两者?
提前致谢。
注:Kunal
答案 0 :(得分:5)
结帐port unification example。它完全符合您的要求。
答案 1 :(得分:0)
首先,不要将所有内容混合在一起'$'是一个Char,它可以在大多数编码中用一个字节表示,但对于一个普通的char来说情况就不是这样了(在UTF-8中,char是一个可变长度编码的并且可以使用1,2或3个字节。
这取决于您的信息流的长度。
1)最简单的解决方案是,使用带有两个字段标题的框架 适合您的内存
然而,您可以使用FrameDecoder接收和解码整个帧。
2)如果您的信息流非常庞大并且无法容纳在内存中,那么您有两种解决方案:
在每种情况下,Netty都会为流式字符串生成一些 StringEncoder 和 StringDecoder 。还有一些 FrameDecoder 和 FrameEncoder ,带有各种有用的标题。