Netty基本介绍,参考 Netty与网络编程
1.1 什么是粘包拆包
例如:发送 ABC, DEF两个报文
-
收到ABCDEF一个报文,发生了粘包
-
收到AB,C,DEF三个报文,ABC发生了拆包
-
收到AB,CD,EF三个报文,即发生了拆包又发生了粘包
1.2 看一个粘包半包样例
- 客户端每次把消息“ABC,DEF,GHI,JKL,MNO\n" 发生一百次给服务端
- 服务端将每次收到的消息输出,并记录收到的次数,然后将消息返回客户端
我们看下面服务端输出的结果:
- 服务端一共接收到两次消息,说明消息被合并了,发生了粘包
- 第一次输出的消息最后一行只有"ABC,",这说明发生了拆包,一个完整的消息被拆分了才会出现这种情况
输出结果:
Server Accept[ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,] and the counter is:1
Server Accept[DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
ABC,DEF,GHI,JKL,MNO
] and the counter is:2
代码:
EchoClient.java
public class EchoClient {
private final int port;
private final String host;
public EchoClient(int port, String host) {
this.port = port;
this.host = host;
}
public void start() throws InterruptedException {
EventLoopGroup group = new NioEventLoopGroup();/*线程组*/
try {
final Bootstrap b = new Bootstrap();;/*客户端启动必须*/
b.group(group)/*将线程组传入*/
.channel(NioSocketChannel.class)/*指定使用NIO进行网络传输*/
.remoteAddress(new InetSocketAddress(host,port))/*配置要连接服务器的ip地址和端口*/
.handler(new ChannelInitializer<SocketChannel>()