TCP-IP学习笔记五:Netty使用--简单通信编程1

Springboot整合netty框架实现终端、通讯板子(单片机)TCP/UDP通信案例 如何springboot和netty案例的源代码 一个springboot整合netty框架的开发小案例, 实现服务端与单片机终端实时通信的通讯架构案例。 物联网通信给板子下发指令案例 附带源码及整合流程步骤 阅读详情

TCP/IP学习笔记五:Netty使用–简单通信编程1

标签(空格分隔):Netty 网络编程


Netty的简单使用示例。

编程思路按照注释进行就可以了。

一、导入Netty的jar

最先版本:netty-all-5.0.0.Alpha2.jar

二、服务器端

package com.netty.demo1.server;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;

/**
 * Netty NIO 服务器端
 * @author MOTUI
 *
 */
public class NettyNIOServer {

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

        //1.创建NIOServerSocketChannel的服务引导
        ServerBootstrap serverBootstrap = new ServerBootstrap();
        //2.创建线程池 boss(请求转发) worker(IO事件处理)
        NioEventLoopGroup boss = new NioEventLoopGroup();
        NioEventLoopGroup worker = new NioEventLoopGroup();
        //3.绑定线程
        serverBootstrap.group(boss, worker);
        //4.设置ServerSocket服务类
        serverBootstrap.channel(NioServerSocketChannel.class);
        //5.绑定IO处理事件
        serverBootstrap.childHandler(new ServerChannelInitializer());
        //6.绑定服务端口
        System.out.println("服务器监听8989端口");
        ChannelFuture future = serverBootstrap.bind(8989).sync();
        //等待服务器被关闭
        future.channel().closeFuture().sync();

        //释放线程资源
        worker.shutdownGracefully();
        boss.shutdownGracefully();  

    }   
}

注册IO事件处理类

package com.netty.demo1.server;

import io.netty.channel.ChannelInitializer;
import io.netty.channel.socket.SocketChannel;

public class ServerChannelInitializer extends ChannelInitializer<SocketChannel> {
    /**
     * 注册IO事件处理类
     */
    @Override
    protected void initChannel(SocketChannel ch) throws Exception {

        ch.pipeline().addLast(new ServerRequestResponseHander());
    }
}

IO事件处理类

package com.netty.demo1.server;

import java.util.Date;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerAdapter;
import io.netty.channel.ChannelHandlerContext;
import io.netty.util.CharsetUtil;

/**
 * 事件处理类
 * @author MOTUI
 *
 */
public class ServerRequestResponseHander extends ChannelHandlerAdapter {
    /**
     * 异常调用
     */
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause)
            throws Exception {
        System.out.println("发生异常了···异常信息:"+cause.getMessage());

    }

    /**
     * 读数据调用
     */
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg)
            throws Exception {
        ByteBuf buffer=(ByteBuf) msg;
        System.out.println("服务器接收到的数据:"+buffer.toString(CharsetUtil.UTF_8));
        //ctx.writeAndFlush(msg);//写回响应
        //响应一个时间
        ByteBuf buf=ctx.alloc().buffer(1024);
        buf.writeBytes(new Date().toString().getBytes());
        ctx.writeAndFlush(buf);

    }
}

客户端

package com.netty.demo1.client;

import java.net.InetSocketAddress;

import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioSocketChannel;

/**
 * Netty NIO 客户端
 * @author MOTUI
 *
 */
public class NettyNIOClient {

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

        //1.创建NIOSocketChannel的服务引导
        Bootstrap bootstrap = new Bootstrap();
        //2.创建线程池 worker(IO事件处理)
        NioEventLoopGroup boss = new NioEventLoopGroup();
        //3.关联线程池
        bootstrap.group(boss);
        //4.设置NioSocketChannel
        bootstrap.channel(NioSocketChannel.class);
        //5.绑定IO处理事件
        bootstrap.handler(new ClientChannelInitializer());
        //6.链接服务器
        ChannelFuture future = bootstrap.connect(new InetSocketAddress("192.168.0.117", 8989));

        //等待关闭连接
        future.channel().closeFuture().sync();

        //释放资源
        boss.shutdownGracefully();
    }   
}

客户端注册IO事件处理类

package com.netty.demo1.client;

import io.netty.channel.ChannelInitializer;
import io.netty.channel.socket.SocketChannel;

public class ClientChannelInitializer extends ChannelInitializer<SocketChannel> {
    /**
     * 注册IO事件处理类
     */
    @Override
    protected void initChannel(SocketChannel ch) throws Exception {

        ch.pipeline().addLast(new ClientRequestResponseHander());
    }
}

客户端IO事件处理类

package com.netty.demo1.client;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerAdapter;
import io.netty.channel.ChannelHandlerContext;
import io.netty.util.CharsetUtil;

/**
 * 事件处理类
 * @author MOTUI
 *
 */
public class ClientRequestResponseHander extends ChannelHandlerAdapter {
    /**
     * 异常调用
     */
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause)
            throws Exception {
        System.out.println("发生异常了···异常信息:"+cause.getMessage());

    }

    /**
     * 发送请求
     */
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        //创建ByteBuf

        ByteBuf buf = Unpooled.buffer(1024);
        buf.writeBytes("你好,我好,大家好!".getBytes());
        ctx.writeAndFlush(buf);

    }
    /**
     * 读数据调用
     */
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg)
            throws Exception {

        ByteBuf buffer=(ByteBuf) msg;
        System.out.println("客户端收到:"+buffer.toString(CharsetUtil.UTF_8));

        //关闭链接
        ctx.close();
    }
}

总结:

    编程思路按照官方文档进行编码,简单类型的传递没有太大的问题,对于对象类型数据的传输会存在一些问题(下篇介绍对象类型的传输)。
springboot整合netty实现tcp通信 在高并发的网络服务器中,经常会出现漏掉socket的情况,对应的结果有一种情况就是出现大量的CLOSE_WAIT状态的连接。:在TCP保活打开的情况下,最后一次数据交换到TCP发送第一个保活探测包的间隔,即允许的持续空闲时长,或者说每次正常发送心跳的周期,TCP保活机制,就是为了保证连接的有效性,探测连接的对端是否存活的作用,在间隔一定的时间发探测包,根据回复来确认该连接是否有效。是一个特殊的分隔符解码器,该解码器使用的分隔符为:windows的r\n和类linux的\n。 阅读详情

相关推荐

Reactor Netty TCP 服务器端-响应式编程-011

🤗 ApiHug × {Postman|Swagger|Api...} = 快↑ 准√ 省↓。

程序员超级伴侣-ApiHug 2619

Netty框架实现TCP/IP通信

      项目中需要使用到TCP/IP协议完成数据的发送与接收。如果只是用以前写的简单的socket套接字方法,每次接收发送消息都会创建新的socket再关闭socket,造成资源浪费。于是使用netty框架完成java网络通信。       Netty框架的内容很多,这里只是代码展示其中的一个功能。       这里使用的是

普通还不自信的程序员 3887

Netty实现TCP代理

Netty 实现一个简单的TCP代理

qq_36577699的博客 1320

netty网络编程(三)之tcp/ip协议与netty编程实战

tcp/ip协议与netty编程实战

yemuxiaweiliang的博客 1080

「Netty系列」彻底弄清网络七层协议、TCP/IP、IP、TCP(Netty前置一)

目前工作中使用Netty进行服务端开发,在实践中有自己一点点心得。接下来分享Netty系列文章。在学习Netty之前先了解下网络基础知识、分清网络七层协议、TCP/IP协议族、IP、TCP各代表什么含义。 一 基础 1.1 概述 1 网络分层中的IOS七层模型、TCP/IP协议族、TCP、IP,这些有什么不同 2 TCP协议通信过程中的三次握手和四次挥手到底是什么流程? 1.2 软件架构 在生活中,我们经常用QQ、微信、百度云盘、Goole、IE浏览器、火狐浏览器......。可以总结为两大类,c

flowerAndJava的博客 1143

Java TCP通信实战:从Socket到Netty的网络编程核心

网络通信是分布式系统与微服务架构的基石,其核心在于理解TCP/IP协议栈的工作原理。TCP作为面向连接的可靠传输协议,通过三次握手建立连接、流式数据传输及四次挥手断开连接,确保了数据的有序与完整送达。在Java生态中,这一原理映射为Socket与ServerSocket API,开发者需掌握消息边界处理、线程模型优化等关键技术,以构建高并发服务。针对粘包、半包等常见问题,应用层需采用长度前缀或分隔符等方案进行协议设计。随着并发需求增长,从BIO线程池模型演进至NIO多路复用,最终借助Netty框架的Chan

weixin_33795806的博客 420

实战Netty!基于私有协议,怎样快速开发网络通信服务?

在工作中,我经常使用netty开发一些服务,掌握netty的工作原理,开发一些服务端以及客户端是非常简单,本篇文章,我们就以具体的协议来进行一个简单的服务的开发。

初念初恋的博客 1368

Android端使用Netty框架实现TCP/IP通信

Android端采用Netty实现长连接通信最近项目需要

Handler棒棒哒的博客 2万+

Nginx+netty实现tcp负载均衡,获取客户端真实ip

在nginx.conf文件中,events,http同级添加配置启动nginx服务。

qq_27955093的博客 2239

大模型微调框架之TRL

近年来,大语言模型(LLMs)的快速发展推动了下游应用的繁荣,但如何高效地对这些模型进行对齐和微调,依然是研究与应用的热点。Hugging Face 开源的 TRL(Transformer Reinforcement Learning) 框架,提供了基于强化学习的语言模型训练方法,并支持 SFT(监督微调)、PPO(近端策略优化)、DPO(直接偏好优化)等多种方式,是目前对齐和微调 LLM 的重要工具。

和大家一起涨芝士 905

B站李沐讲论文笔记AlexNet

B站李沐讲论文笔记AlexNet

夏知识不进脑子薇的博客 790

netty获取ip和端口

InetSocketAddress insocket = (InetSocketAddress) ctx.channel().remoteAddress(); String clientIP = insocket.getAddress().getHostAddress(); String clientPort = String.valueOf(insocket.getPort());...

NRGAGA的专栏 6363

保姆级教程:在iQuant平台从零写一个Python量化策略(附完整代码示例)

本文提供了一份详细的iQuant平台Python量化策略开发教程,从环境准备到策略实现、回测优化,再到实盘运行,每个步骤都配有完整代码示例和常见问题解决方案。适合量化交易新手快速上手,掌握双均线策略等核心开发技巧。

weixin_42783709的博客 479

【Java Nio Netty】基于TCP的简单Netty自定义协议实现(万字,全篇例子)

基于TCP的简单Netty自定义协议实现(万字,全篇例子)

m0_53928179的博客 1750

Windows服务器渗透必备:5款杀软在线识别平台实测对比(附避坑指南)

本文针对Windows服务器渗透测试中的关键环节,实测对比了五款主流的在线杀软识别平台。文章从实战场景出发,深入分析了各平台在识别准确率、响应速度、隐匿性及使用风险上的差异,并提供了详尽的避坑指南与高级隐匿技巧,旨在帮助安全人员快速、精准地识别目标环境安全防护,为后续行动奠定情报基础。

weixin_29322553的博客 433

Unity 编辑器篇|(四)编辑器拓展GUI类 (全面总结 | 建议收藏)

GUI 类是 Unity GUI 的接口,并且具有手动定位功能。“即时模式”GUI 系统(也称为 IMGUI)是一个完全独立的功能系统,不同于 Unity 基于游戏对象的主 UI 系统。IMGUI 是一个代码驱动的 GUI 系统,主要用作程序员的工具。为了驱动该系统,需在实现脚本上调用 OnGUI 函数即时模式 GUI 系统常用于:创建游戏内调试显示和工具。为脚本组件创建自定义检视面板。创建新的编辑器窗口和工具以扩展 Unity 本身。

游戏开发小Y的博客 12万+

TCP-IP学习笔记七:Netty使用--简单通信编程3

TCP/IP学习笔记七:Netty使用–简单通信编程3标签(空格分隔): Netty 网络编程TCP-IP学习笔记五:Netty使用–简单通信编程1TCP-IP学习笔记六:Netty使用–简单通信编程2对于上个程序,对对象类型的传输,发送单个数据没有任何问题,运行很正常,当我们一次发送多个请求(包含多个对象)还是这样正常?会出现什么问题? 对客户端【IO事件处理类】代码进行修改: /**

MoTui的博客 1361

GEE 案例:基于陆地卫星8号(大气层顶反射率数据)LANDSAT/LC08/C02/T1_TOA的生态遥感指数RSEI计算、可视化和下载

摘要:基于GEE的遥感生态指数(RSEI)计算方法 本文介绍了利用Google Earth Engine(GEE)平台计算遥感生态指数(RSEI)的全流程方法。主要内容包括:研究区域定义、Landsat8数据获取与去云预处理、关键生态指标计算(地表温度LST、植被指数NDVI、湿度指数WET和建筑指数NDBSI)、主成分分析(PCA)降维处理,以及结果可视化与数据导出。通过结合多源遥感指标并采用归一化处理,构建了综合反映区域生态环境质量的RSEI指数。该方法为生态环境监测提供了高效的技术方案,所有计算过程均

此星光明博客 454

Netty实战专栏 | Java网络编程深入解析

大家好,我是Leo哥🫣🫣🫣,本次专栏学习Java并发以及netty应用的深度学习,netty提供了异步、事件驱动、非阻塞的网络编程模型,能够轻松处理高并发、高吞吐量的网络通信场景。是一个基于的高性能网络应用框架。但是在此之前我们需要对我们Java前置知识进行一些巩固和复习。那就是IO,Java网络编程,BIO,NIO,AIO相关知识点,前置知识是还是挺多,只有打好前面的基础我们才能更深入理解netty这个框架以及他的底层原理。对于IO相关的知识,大家可以看我之前写的这篇。

分享思想,留下痕迹。 1万+

手把手教你学Simulink——基于经典PID控制的电机系统场景实例:永磁同步电机(PMSM) PID转速控制仿真

*永磁同步电机(PMSM)因其高效、高功率密度和良好的动态响应特性,在现代工业自动化、电动汽车驱动系统等领域得到了广泛应用。为了实现对PMSM的速度精确控制,通常采用矢量控制(Field Oriented Control, FOC)**策略,其中PID控制器是实现速度环和电流环调节的关键组件。本教程将带你使用构建一个基于PID控制的永磁同步电机转速控制系统仿真模型PMSM电机建模矢量控制(FOC)策略实现PID控制器设计系统仿真与调试控制效果分析本文介绍了如何使用构建一个。

MHD0815的博客 6952

【C/C++ 性能优化】了解cpu 从而进行C++ 高效编程

在当代软件开发领域,CPU(Central Processing Unit,中央处理器)的性能优化一直是一个核心议题。尤其是对于C++开发者而言,无论是在Linux平台还是其他操作系统中,都需要深刻理解CPU的工作原理以及如何充分利用CPU资源,以确保软件运行的高效性和稳定性。正如计算机科学家Donald Knuth在《计算机程序设计的艺术》中所说:“过早的优化是万恶之源”,然而,这并不意味着我们应该忽视性能优化——相反,我们需要在正确的时间以正确的方式进行优化。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 4749

TCP-IP学习笔记六:Netty使用--简单通信编程2

TCP/IP学习笔记六:Netty使用–简单通信编程2标签(空格分隔): Netty 网络编程Netty进行对象类型数据的传递实例。编程步骤与简单类型数据传递相同。服务器端package com.netty.demo2.server;import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; im

MoTui的博客 2151

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

从通信协议到Netty RPC框架

在互联网技术里,有两件事最为重要,一个是TCP/IP协议,它是万物互联的事实标准;另一个是Linux操作系统,它是推动互联网技术走向繁荣的基石。在网络编程中最重要的模型便是OSI七层网络模型和TCP/IP四层网络模型。

cqdddgs的博客 1200

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Netty核心指南——TCP通信与数据处理

本文介绍了Netty中TCP粘包/拆包问题的解决方案及编解码技术应用。首先分析了TCP粘包/拆包的原因及四种解决策略,重点讲解了使用LineBasedFrameDecoder、DelimiterBasedFrameDecoder和FixedLengthFrameDecoder三种解码器解决半包问题的方法。随后对比了Java序列化的三大缺陷,并介绍了Protobuf、Thrift和JBoss Marshalling三种主流编解码框架的特点。文章通过具体示例展示了如何在Netty中实现高效的网络通信。

weixin_52344200的博客 774

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

基于IO、NIO和Netty的TCP聊天程序及springboot+netty实现网络聊天

文章目录一、IO、NIO、Netty的相关介绍1. IO和NIO的对比二、示例代码1.IO示例2.NIO示例3.Netty三、springboot+netty实现网络聊天1.创建项目2.代码模块 一、IO、NIO、Netty的相关介绍 1. IO和NIO的对比 1.1 传统IO 阻塞IO网络模型:服务器启动后会进入阻塞状态,等待client连接,每一个client端连接上服务器后,服务器会为每一个客户端起一个线程来处理客户端的需求。服务器的accept()方法、服务器新起的thread中,Socket

weixin_47306453的博客 2622

使用netty实现并维护TCP长连接

使用netty实现并维护TCP长连接Netty是什么Netty的优点Netty为什么并发高创建TCP长连接实例 Netty是什么 Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。 Netty 是一个广泛使用的 Java 网络编程框架(Netty 在 2011 年获得了Duke’s Choice Award,见https://www.java.net/dukeschoice/2011)。它活跃和成长于用户社区,像大型公司 Faceboo

shadowdowdow的博客 9317
上一篇: TCP-IP学习笔记四:NIO的网络编程-多线程实例
下一篇: TCP-IP学习笔记六:Netty使用--简单通信编程2
motui
博客等级 码龄10年 84粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值