java tcp粘包_socket拆包与组班

java tcp粘包_socket拆包与组班importjava.nio.ByteBuffer;importio.netty.bootstrap.ServerBootstrap;importio.netty.buffer.ByteBuf;importio.netty.buffer.Unpooled;importio.netty.channel.ChannelFuture;importio.netty.channel.Channe…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

44ff9330108307659dcbcb3cbe1f3c8c.png

f81aacb62919f94e4faffda868e5c64f.png

import java.nio.ByteBuffer;

import io.netty.bootstrap.ServerBootstrap;

import io.netty.buffer.ByteBuf;

import io.netty.buffer.Unpooled;

import io.netty.channel.ChannelFuture;

import io.netty.channel.ChannelInitializer;

import io.netty.channel.ChannelOption;

import io.netty.channel.EventLoopGroup;

import io.netty.channel.nio.NioEventLoopGroup;

import io.netty.channel.socket.SocketChannel;

import io.netty.channel.socket.nio.NioServerSocketChannel;

import io.netty.handler.codec.DelimiterBasedFrameDecoder;

import io.netty.handler.codec.FixedLengthFrameDecoder;

import io.netty.handler.codec.string.StringDecoder;

import io.netty.handler.codec.string.StringEncoder;

public class Server {

public static void main(String[] args) throws Exception{

//1 创建2个线程,一个是负责接收客户端的连接。一个是负责进行数据传输的

EventLoopGroup pGroup = new NioEventLoopGroup();

EventLoopGroup cGroup = new NioEventLoopGroup();

//2 创建服务器辅助类

ServerBootstrap b = new ServerBootstrap();

b.group(pGroup, cGroup)

.channel(NioServerSocketChannel.class)

.option(ChannelOption.SO_BACKLOG, 1024)

.option(ChannelOption.SO_SNDBUF, 32*1024)

.option(ChannelOption.SO_RCVBUF, 32*1024)

.childHandler(new ChannelInitializer() {

@Override

protected void initChannel(SocketChannel sc) throws Exception {

//设置特殊分隔符

ByteBuf buf = Unpooled.copiedBuffer(“$_”.getBytes());

sc.pipeline().addLast(new DelimiterBasedFrameDecoder(1024, buf));

//设置字符串形式的解码

sc.pipeline().addLast(new StringDecoder());

sc.pipeline().addLast(new ServerHandler());

}

});

//4 绑定连接

ChannelFuture cf = b.bind(8765).sync();

//等待服务器监听端口关闭

cf.channel().closeFuture().sync();

pGroup.shutdownGracefully();

cGroup.shutdownGracefully();

}

}

import io.netty.bootstrap.Bootstrap;

import io.netty.buffer.ByteBuf;

import io.netty.buffer.Unpooled;

import io.netty.channel.ChannelFuture;

import io.netty.channel.ChannelInitializer;

import io.netty.channel.EventLoopGroup;

import io.netty.channel.nio.NioEventLoopGroup;

import io.netty.channel.socket.SocketChannel;

import io.netty.channel.socket.nio.NioSocketChannel;

import io.netty.handler.codec.DelimiterBasedFrameDecoder;

import io.netty.handler.codec.FixedLengthFrameDecoder;

import io.netty.handler.codec.string.StringDecoder;

import io.netty.handler.codec.string.StringEncoder;

public class Client {

public static void main(String[] args) throws Exception {

EventLoopGroup group = new NioEventLoopGroup();

Bootstrap b = new Bootstrap();

b.group(group)

.channel(NioSocketChannel.class)

.handler(new ChannelInitializer() {

@Override

protected void initChannel(SocketChannel sc) throws Exception {

//

ByteBuf buf = Unpooled.copiedBuffer(“$_”.getBytes());

sc.pipeline().addLast(new DelimiterBasedFrameDecoder(1024, buf));

sc.pipeline().addLast(new StringDecoder());

sc.pipeline().addLast(new ClientHandler());

}

});

ChannelFuture cf = b.connect(“127.0.0.1”, 8765).sync();

cf.channel().writeAndFlush(Unpooled.wrappedBuffer(“bbbb$_”.getBytes()));

cf.channel().writeAndFlush(Unpooled.wrappedBuffer(“cccc$_”.getBytes()));

//等待客户端端口关闭

cf.channel().closeFuture().sync();

group.shutdownGracefully();

}

}

import io.netty.buffer.Unpooled;

import io.netty.channel.ChannelHandlerAdapter;

import io.netty.channel.ChannelHandlerContext;

public class ServerHandler extends ChannelHandlerAdapter {

@Override

public void channelActive(ChannelHandlerContext ctx) throws Exception {

System.out.println(” server channel active… “);

}

@Override

public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {

String request = (String)msg;

System.out.println(“Server :” + msg);

String response = “服务器响应:” + msg + “$_”;

ctx.writeAndFlush(Unpooled.copiedBuffer(response.getBytes()));

}

@Override

public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {

}

@Override

public void exceptionCaught(ChannelHandlerContext ctx, Throwable t) throws Exception {

ctx.close();

}

}

import io.netty.channel.ChannelHandlerAdapter;

import io.netty.channel.ChannelHandlerContext;

import io.netty.util.ReferenceCountUtil;

public class ClientHandler extends ChannelHandlerAdapter{

@Override

public void channelActive(ChannelHandlerContext ctx) throws Exception {

System.out.println(“client channel active… “);

}

@Override

public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {

try {

String response = (String)msg;

System.out.println(“Client: ” + response);

} finally {

ReferenceCountUtil.release(msg);

}

}

@Override

public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {

}

@Override

public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {

ctx.close();

}

}

4c2bb1f0b41aeeb90abf3bd93e911554.png

import io.netty.bootstrap.ServerBootstrap;

import io.netty.channel.ChannelFuture;

import io.netty.channel.ChannelHandler;

import io.netty.channel.ChannelInitializer;

import io.netty.channel.ChannelOption;

import io.netty.channel.EventLoopGroup;

import io.netty.channel.nio.NioEventLoopGroup;

import io.netty.channel.socket.SocketChannel;

import io.netty.channel.socket.nio.NioServerSocketChannel;

import io.netty.handler.logging.LogLevel;

import io.netty.handler.logging.LoggingHandler;

import io.netty.handler.timeout.ReadTimeoutHandler;

public class Server {

public Server() {

}

public static void main(String[] args) throws Exception {

EventLoopGroup pGroup = new NioEventLoopGroup();

EventLoopGroup cGroup = new NioEventLoopGroup();

ServerBootstrap b = new ServerBootstrap();

((ServerBootstrap)((ServerBootstrap)((ServerBootstrap)b.group(pGroup, cGroup).channel(NioServerSocketChannel.class)).option(ChannelOption.SO_BACKLOG, 1024)).handler(new LoggingHandler(LogLevel.INFO))).childHandler(new ChannelInitializer() {

protected void initChannel(SocketChannel sc) throws Exception {

sc.pipeline().addLast(new ChannelHandler[]{MarshallingCodeCFactory.buildMarshallingDecoder()});

sc.pipeline().addLast(new ChannelHandler[]{MarshallingCodeCFactory.buildMarshallingEncoder()});

sc.pipeline().addLast(new ChannelHandler[]{new ReadTimeoutHandler(5)});

sc.pipeline().addLast(new ChannelHandler[]{new ServerHandler()});

}

});

ChannelFuture cf = b.bind(8765).sync();

cf.channel().closeFuture().sync();

pGroup.shutdownGracefully();

cGroup.shutdownGracefully();

}

}

import io.netty.bootstrap.Bootstrap;

import io.netty.channel.ChannelFuture;

import io.netty.channel.ChannelHandler;

import io.netty.channel.ChannelInitializer;

import io.netty.channel.EventLoopGroup;

import io.netty.channel.nio.NioEventLoopGroup;

import io.netty.channel.socket.SocketChannel;

import io.netty.channel.socket.nio.NioSocketChannel;

import io.netty.handler.logging.LogLevel;

import io.netty.handler.logging.LoggingHandler;

import io.netty.handler.timeout.ReadTimeoutHandler;

import java.util.concurrent.TimeUnit;

public class Client {

private EventLoopGroup group;

private Bootstrap b;

private ChannelFuture cf;

public static Client getInstance() {

return Client.SingletonHolder.instance;

}

private Client() {

this.group = new NioEventLoopGroup();

this.b = new Bootstrap();

((Bootstrap)((Bootstrap)((Bootstrap)this.b.group(this.group)).channel(NioSocketChannel.class)).handler(new LoggingHandler(LogLevel.INFO))).handler(new ChannelInitializer() {

protected void initChannel(SocketChannel sc) throws Exception {

sc.pipeline().addLast(new ChannelHandler[]{MarshallingCodeCFactory.buildMarshallingDecoder()});

sc.pipeline().addLast(new ChannelHandler[]{MarshallingCodeCFactory.buildMarshallingEncoder()});

sc.pipeline().addLast(new ChannelHandler[]{new ReadTimeoutHandler(5)});

sc.pipeline().addLast(new ChannelHandler[]{new ClientHandler()});

}

});

}

public void connect() {

try {

this.cf = this.b.connect(“127.0.0.1”, 8765).sync();

System.out.println(“远程服务器已经连接, 可以进行数据交换..”);

} catch (Exception var2) {

var2.printStackTrace();

}

}

public ChannelFuture getChannelFuture() {

if (this.cf == null) {

this.connect();

}

if (!this.cf.channel().isActive()) {

this.connect();

}

return this.cf;

}

public static void main(String[] args) throws Exception {

final Client c = getInstance();

ChannelFuture cf = c.getChannelFuture();

for(int i = 1; i <= 3; ++i) {

Request request = new Request();

request.setId(“” + i);

request.setName(“pro” + i);

request.setRequestMessage(“数据信息” + i);

cf.channel().writeAndFlush(request);

TimeUnit.SECONDS.sleep(4L);

}

cf.channel().closeFuture().sync();

(new Thread(new Runnable() {

public void run() {

try {

System.out.println(“进入子线程…”);

ChannelFuture cf = c.getChannelFuture();

System.out.println(cf.channel().isActive());

System.out.println(cf.channel().isOpen());

Request request = new Request();

request.setId(“4”);

request.setName(“pro4”);

request.setRequestMessage(“数据信息4”);

cf.channel().writeAndFlush(request);

cf.channel().closeFuture().sync();

System.out.println(“子线程结束.”);

} catch (InterruptedException var3) {

var3.printStackTrace();

}

}

})).start();

System.out.println(“断开连接,主线程结束..”);

}

private static class SingletonHolder {

static final Client instance = new Client((Client)null);

private SingletonHolder() {

}

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169721.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关于Kotlin扩展函数与lambda的上下文

    关于Kotlin扩展函数与lambda的上下文

    2022年3月13日
    50
  • 五大优秀的数据库设计工具[通俗易懂]

    五大优秀的数据库设计工具[通俗易懂]数据库的设计主要是针对一个特定的个环境,为了能够满足有效的数据存储和处理等要求,需要构造最优的数据库模式来建立数据库及其对应系统。数据库设计时根据用户的需求,在特定的数据库管理系统上设计和建立数据库的过程,是软件系统开发过程中的关键技术之一。在数据库领域内,通常把使用数据库的各类系统统称为数据库应用系统。数据库设计的目的是把软件系统中大量的数据按一定的模型组织起来,以实现方便、及时地存储、维护和检索等功能,是软件系统开发和建设的关键和重要组成部分之一,因此数据库设计往往比较复杂,最佳设计不可能一蹴而就,需

    2022年7月27日
    10
  • MySQL删除表提示Cannot truncate a table referenced in a foreign key constraint解决办法

    MySQL删除表提示Cannot truncate a table referenced in a foreign key constraint解决办法背景因为测试过程中,几套环境都是用的同一个库,数据有点冲突,需要删库。执行truncatetablexxx时提示:[Err]1701-Cannottruncateatablereferencedinaforeignkeyconstraint….解决办法删除之前先执行删除外键约束SETforeign_key_checks=0删除完之后再执行启动外

    2022年6月26日
    43
  • docker 运行tomcat_docker和tomcat区别

    docker 运行tomcat_docker和tomcat区别在学习狂神的docker内容网络学习这一步的时候,按照步骤启动tomcat镜像,但是执行ipaddr之后发现下面问题,经过分析这说明我们下载的Tomcat镜像是精简版的,利用这个镜像去打开一个容器的时候发现没有ipaddr这个命令。所以到导致我们上述报错。上图执行的命令敲错了,重新执行aptinstall-yiproute2…

    2022年7月27日
    11
  • Matlab循环语句_matlab中if语句的用法

    Matlab循环语句_matlab中if语句的用法《matlab循环语句》由会员分享,可在线阅读,更多相关《matlab循环语句(9页珍藏版)》请在人人文库网上搜索。1、matlab基本语句1.循环语句forfori=s1:s3:s2循环语句组end解释:首先给i赋值s1;然后,判断i是否介于s1与s2之间;如果是,则执行循环语句组,i=i+s3(否则,退出循环.);执行完毕后,继续下一次循环。例:求1到100的和,可以编程如下:sum=0fo…

    2022年9月28日
    3
  • CentOS搭建基于ZIPKIN的数据追踪系统

    CentOS搭建基于ZIPKIN的数据追踪系统

    2021年6月2日
    125

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号