Netty 客户端与网络调试助手通信实验

序言:

微微一笑,这是一个微微波澜的时代,相较于过去冷兵器时代,多了些什么、又少了些什么……
倘若我生于那个时代,微微一笑,毅然从兵,或许因为愚忠死得其所,但是却尽了一定时间内守护家人的意愿,或许会做的更好也说不定……哈哈

记得那年冬天 我们彼此陪伴 梦想是唯一的火焰 我们一起点燃
(一些青年围坐在一起,每个脸庞上都挂着微笑)

我们长发批肩 冷冷的旷野荒芜人烟 有兄弟还有烈酒 就能取暖
(微微一笑,你知道,你的同伴、敌人,一个个死在你身边是什么感觉吗?)

当我们谈起明天 总是觉得希望无限 总说再过二十年 还是条好汉

还记得二十年前 那一群懵懂的少年 擦亮了双眼 挺起了双肩 要将梦想实现
(黑衣少年坚定的目光,我不知道能给予你什么,我只知道要好好守护你
那些你想做的梦。
我们会支持你完成。
这样就能离你更近了,不是吗)

还记得二十年前 那一句执著的誓言 忘记了永远 却忘不了当年 曾经共苦同甘

我们好久不见 不曾把酒言欢 二十年前那个冬天 怎能想到今天

长发一一剪短 冷冷的旷野一如从前 多少当年的英雄 早已不见
(七郎抓紧着红绳,即使身体万箭穿心,因为勇气不是来自愤怒,而是你保护一样东西的决心)

 

 

环境:

1、idea

2、gradle相关jar包

3、下载一个网络调试助手噢~么么哒

 

 

一、我们在gradle文件中进行配置,这一点很重要~(么么哒)

 

group 'com.blackking'
version '1.0-SNAPSHOT'


buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.2.RELEASE")
    }
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile(
            "io.netty:netty-all:4.1.30.Final",
            "com.google.protobuf:protobuf-java:3.6.1",
            "com.google.protobuf:protobuf-java-util:3.6.1",
            "org.apache.thrift:libthrift:0.11.0",
            "org.springframework.boot:spring-boot-starter-web",
            "org.springframework.boot:spring-boot-starter-test"
    )
}
tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"

}

二、编写一个TcpClient类:帅气

public class TcpClient {

    private static final Logger logger = Logger.getAnonymousLogger();

 

    public static String HOST = "127.0.0.1";

    public static int PORT = 8999;

 

    public static Bootstrap bootstrap = getBoothstrap();

 

    public static final Bootstrap getBoothstrap(){

        EventLoopGroup group = new NioEventLoopGroup();

        Bootstrap b = new Bootstrap();

        b.group(group).channel(NioSocketChannel.class);

        b.handler(new ChannelInitializer<SocketChannel>() {

            @Override

            protected void initChannel(SocketChannel ch) throws Exception {

                ChannelPipeline pipeline = ch.pipeline();

                pipeline.addLast("FrameDecoder",new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE,0,4,0,4));

                pipeline.addLast("FrameEncoder",new LengthFieldPrepender(4));

                pipeline.addLast("new handler",new TcpClientHandler());

            }

        });

        return b;

    }

    public static final Channel getChannel(String host,int port){

        Channel channel = null;

 

        try{

            channel = bootstrap.connect(host,port).sync().channel();

        }catch(Exception e){

            System.out.println(String.format("连接server失败",host,port));

            return null;

        }

        return channel;

    }

    public static void sendMsg(Channel channel,Object Msg) throws Exception{

        if (channel != null){

            channel.writeAndFlush(Msg).sync();

        }else {

            logger.warning("连接失败~~ 靓仔");

        }

    }

 

    public static void main(String[] args) {

        try{

           long t0 = System.nanoTime();

           byte[] value = null;

           Channel channel = null;

           for(int i=0;i<50000;i++){

               channel = getChannel(HOST,PORT);

               value = (i+"靓仔").getBytes();

               ByteBufAllocator alloc = channel.alloc();

               ByteBuf buf = alloc.buffer(value.length);

               buf.writeBytes(value);

               TcpClient.sendMsg(channel,buf);

            }

            long t1 = System.nanoTime();

            System.out.println((t1-t0)/100000.0);

            Thread.sleep(1000);

            System.exit(0);

        }catch(Exception e){

            e.printStackTrace();

        }

    }

 

}

 

【上面这个是客户端,我们还要写一个服务端,或者不写嗯,用网络调试助手来实验这个客户端的质量,是否不间断发送数据包~】

 

三、客户端除了主类,还有处理器类,实现类

public class TcpClientHandler extends SimpleChannelInboundHandler<Object> {

 

    private static final Logger logger = Logger.getAnonymousLogger();

 

    @Override

    protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {

        if (msg instanceof ByteBuf){

            ByteBuf buf = (ByteBuf) msg;

            byte[] dst = new byte[buf.capacity()];

            buf.readBytes(dst);

            logger.info("client 接收到服务器返回的消息"+new String(dst));

            ReferenceCountUtil.release(msg);

        }else{

            logger.warning("so nice,continue");

        }

    }

}

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: TCP网络调试助手是一款基于JAVA语言开发的网络调试工具,适用于对TCP/IP协议的网络应用进行调试和测试。该工具提供了一个图形化的用户界面,用户可以通过该界面进行网络连接的建立、数据包的发送和接收、连接状态的监控等操作,从而实现对网络应用进行全面的跟踪和调试。 该工具的源码开放,用户可以在源码的基础上进行二次开发或自行定制,如增加新的功能模块、优化现有的代码等。源码的整体结构比较清晰,采用MVC模式实现了逻辑层、数据层和视图层的分离。逻辑层主要负责处理用户的操作请求和相应的业务逻辑;数据层负责数据的存储和管理;视图层则将数据层和逻辑层封装起来,向用户提供界面交互。 该工具的源码使用了常用的开发框架和库,比如Swing、Netty、Spring等。其中,Netty是一个基于NIO的客户/服务器框架,能够实现高性能、高可靠的网络应用开发;Spring则提供了依赖注入和AOP等高级开发功能,能够提高开发效率和代码的可维护性。 总的来说,TCP网络调试助手源码结构清晰,使用了一些常用的开发框架和库,具备扩展和定制的能力,适合Java开发者作为学习和参考。 ### 回答2: TCP网络调试助手是一个网络调试工具,用于方便地进行TCP/IP连接的建立、数据的发送、接收和分析,它的源码是指这个工具的程序代码。 该工具的源码主要由以下部分组成:界面代码、数据收发代码、数据分析代码。其中,界面代码实现了用户界面的显示和交互功能,数据收发代码实现了TCP/IP连接的建立、数据的发送、接收和错误处理等功能,数据分析代码实现了对收发数据进行分析,比如网络延迟、数据包丢失等,从而帮助用户找出网络故障的原因。 在该工具源码中,需要用到一些TCP/IP通信的基本概念和编程接口,比如Socket编程、TCP连接、数据包格式、地址转换等。因此,对于想要学习网络编程的程序员来说,该工具的源码可以作为一个很好的实践案例。 同时,该工具的源码也可以为其他程序员提供参考,以便他们开发出类似的网络调试工具,或者在自己的项目中,使用类似的网络通信功能。当然,使用该源码开发程序时,需要注意一些细节问题,比如网络安全、数据压缩、错误处理等,以确保程序的稳定性和安全性。 总之,TCP网络调试助手的源码具有一定的参考价值,它为网络编程的学习者和开发者提供了一个实际的应用场景,帮助他们更加深入地理解TCP/IP通信协议和编程接口,从而提高自己的编程水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值