Netty服务端接收TCP链接数据

注:使用netty之前,需要先引入netty包,不同的框架,引入netty包的方式不同

1.定义NettyServer类

用于初始化netty连接

public class NettyServer {public void start() throws Exception {System.out.println("启动记载netty");EventLoopGroup boosGroup = new NioEventLoopGroup();EventLoopGroup workerGroup = new NioEventLoopGroup();ServerBootstrap serverBootstrap = new ServerBootstrap(); // 引导类ServerBootstrap,这个类将引导服务端的启动工作serverBootstrap.group(boosGroup, workerGroup) // .group(bossGroup,workerGroup)给引导类配置两大线程组.channel(NioServerSocketChannel.class) // 指定服务端的IO模型为NIO NioServerSocketChannel是对NIO类型连接的抽象.option(ChannelOption.SO_BACKLOG, 1024) // 表示系统用于临时存放已完成三次握手的请求的队列的最大长度.childOption(ChannelOption.SO_KEEPALIVE, true) // 表示是否开启TCP底层心跳机制,true表示开启。.childOption(ChannelOption.TCP_NODELAY, true) // 表示是否开启Nagle算法,true表示关闭,false表示开启.handler(new ChannelInitializer<NioServerSocketChannel>() { // handler()方法用于指定在服务端启动过程中的一些逻辑@Overrideprotected void initChannel(NioServerSocketChannel ch) {System.out.println("服务端启动过程中...");}}).childHandler(new ChannelInitializer<NioSocketChannel>() { // childHandler()方法,给这个引导类创建一个ChannelInitializer,主要是定义后续每个连接的数据读写protected void initChannel(NioSocketChannel ch) { // 泛型参数NioSocketChannel,这个类就是Netty对NIO类型连接的抽象ch.pipeline().addLast(new IdleStateHandler(0, 0, 15));//检测读写空闲事件,需要就开启,不需要就关闭ch.pipeline().addLast(new EchoServerHandler());}});System.out.println("启动加载netty2");// 给这个ChannelFuture添加一个监听器GenericFutureListenerserverBootstrap.bind(9997).addListener(future -> {if (future.isSuccess()) {System.out.println(new Date() + ": 端口[" + 9997 + "]绑定成功!");} else {System.err.println("端口[" + 9997 + "]绑定失败!");}});}
}

2.编写EchoServerHandler

用于netty接收到数据后处理数据

public class EchoServerHandler extends ChannelInboundHandlerAdapter {/*** 读取客户端发送过来的数据* @param ctx 上下文对象* @param msg 客户端发送的数据* @throws Exception*/@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg){ByteBuf byteBuf= (ByteBuf) msg;String req=byteBuf.toString(CharsetUtil.UTF_8);System.out.println("接收到客户端请求:"+req);System.out.println("客户端地址: " + ctx.channel().remoteAddress());/**String res= "服务器响应["+ LocalDateTime.now().format(DateTimeFormatter.ISO_DATE)+" "+LocalDateTime.now().format(DateTimeFormatter.ISO_TIME)+"]:"+req;System.out.println("服务端响应:"+res);**/}/*** 数据读取完毕* @param ctx* @throws Exception*/@Overridepublic void channelReadComplete(ChannelHandlerContext ctx){ctx.writeAndFlush(Unpooled.copiedBuffer("服务器响应[收到消息,谢谢]",CharsetUtil.UTF_8));}/*** 处理异常, 一般是需要关闭通道* @param ctx* @param cause* @throws Exception*/@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause){cause.printStackTrace();ctx.close();}@Overridepublic void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {if (evt instanceof IdleStateEvent) {IdleStateEvent event = (IdleStateEvent) evt;if (event.state() == IdleState.WRITER_IDLE) {ctx.channel().writeAndFlush("Heartbeat" + System.getProperty("line.separator"));}else if(event.state() == IdleState.ALL_IDLE){//如果长时间空闲,则关闭链接System.out.println("链接长时间没有数据,关闭连接");ctx.channel().close();}}}
}

3.使用netty

public class Main {public static void main(String[] args) {NettyServer server = new NettyServer();try{server.start();}catch (Exception e) {throw new RuntimeException(e);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/870791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DP(2) | Java | LeetCode 62, 63, 343, 96 做题总结(96 未完)

62.不同路径 我的代码&#xff08;报错&#xff09; 写的过程中感到很迷惑的点&#xff1a;①二维数组和这道题目的对应弄不清除&#xff0c;m n的初始化 是 dp[m][n] 还是 dp[n][m] ② class Solution {public int uniquePaths(int m, int n) {int[][]dp new int[m1][n1];d…

Spring开发实践(六)

EnableConfigurationProperties注解的用法 EnableConfigurationProperties 是 Spring Boot 中的一个注解&#xff0c;用于启用对 ConfigurationProperties 注解的支持。它通常用于将配置属性绑定到一个 Java Bean 上。以下是它的用法和示例&#xff1a; 1. 创建配置属性类 首…

单目3D和bev综述

文章目录 SOTA2D 检测单目3d检测单目bev&#xff0c;一般是多目&#xff0c;小鹅通3d bev cam范式Transformer attention is all you need 2017ViT vision transformer ICLR 2021googleDETR 2020DETR3D 2021PETR 2022bevformerLSSbevdetcaddn指标 mAP NDS标注&#xff1a;基于点…

Redis的五种数据类型 #系统架构设计师#

数据类型说明常用方法stringString类型是包含很多种类型的特殊类型&#xff0c;并且是二进制安全的。比如序列化的对象进行存储&#xff0c;比如一张图片进行二进制存储&#xff0c;比如一个简单的字符串、数值等等、 set、get、del方法&#xff1a; 设置值&#xff1a;s…

Nvidia显卡名词解释

GPU&#xff08;硬件&#xff09;指的就是显卡。 cuda, cudnn等一系列名词都是服务gpu而开发的 NVIDIA Drive&#xff08;软件&#xff09;指的是驱动软件 CUDA&#xff08;软件&#xff09;负责计算和编译的软件平台 NVCC指的是CUDA的编译器 CUDNN&#xff08;软件包管理工具&…

利用js实现图片压缩功能

图片压缩在众多应用场景中扮演着至关重要的角色&#xff0c;尤其是在客户端上传图片时。原始图片往往体积庞大&#xff0c;直接上传不仅消耗大量带宽资源&#xff0c;还可能导致上传速度缓慢&#xff0c;严重影响用户体验。因此&#xff0c;在图片上传至服务器前对其进行压缩处…

嵌入式开发过程中,常见报错以及解决方法

编写不易&#xff0c;仅供学习&#xff0c;参考谢谢&#xff0c;还望理解。 #常见报错 文件最后一行没有新行 翻译&#xff1a;文件的最后一行结束时没有新行 解决方法&#xff1a;定位到&#xff0c;提示报错的 .h 文件 报错行 &#xff0c;加上一个新行 函数定义时与官方提…

网信大数据信用报告查询怎么查?网信大数据有什么作用?

随着互联网的快速发展&#xff0c;大数据技术已经广泛应用于各行各业。其中&#xff0c;网信大数据信用报告查询成为了许多人关注的焦点。那么&#xff0c;如何查询网信大数据信用报告呢?网信大数据又有哪些作用呢?本文将为您一一解答。 一、如何查询网信大数据信用报告? 要…

NodeJS校园快递智能互助平台-计算机毕业设计源码58554

摘 要 随着校园人口的增加和生活节奏的加快&#xff0c;校园快递成为一个重要的服务需求。然而&#xff0c;传统的校园快递方式存在一些问题&#xff0c;例如无法满足快速和高效的需求&#xff0c;易发生丢失或损坏的情况&#xff0c;同时也给快递人员和用户带来不便。因此&am…

C++ 实现图书馆资料管理系统

1、问题描述 &#xff1a; 图书馆中的资料很多&#xff0c;如果能分类对其资料流通进行管理&#xff0c;将会带来很多方 便&#xff0c;因此需要有一个媒体库管理系统。 图书馆共有三大类物品资料&#xff1a;图书、视频光盘、图画。 这三类物品共同具有的属性有&#xff1a;编…

LangChain Cookbook Part 1

参考自https://github.com/gkamradt/langchain-tutorials/blob/main/LangChain%20Cookbook%20Part%201%20-%20Fundamentals.ipynb LangChain食谱-1 这个文档基于LangChain Conceptual Documentation 目标是介绍LangChain组件和用例 什么是LangChain&#xff1f; LangChain是…

REST简介

REST&#xff08;Representational State Transfer&#xff0c;表现层状态转移&#xff09;是一种软件架构风格&#xff0c;用于设计网络应用程序。它是由Roy Fielding在他的2000年的博士论文中定义的。REST模型基于使用HTTP协议进行通信的客户端-服务器系统&#xff0c;并且具…

「51媒体」制定《媒体邀约名单》,几点建议

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体宣传加速季&#xff0c;100万补贴享不停&#xff0c;一手媒体资源&#xff0c;全国100城线下落地执行。详情请联系胡老师。 当制定媒体邀约名单时&#xff0c;以下是一些建议&#x…

深度学习中的注意力机制:MHA、MQA和GQA

深度学习中的注意力机制&#xff1a;MHA、MQA和GQA MHA、MQA、GQA区别和联系 Grouped Query Attention (GQA) explained with code

海事无人机解决方案

海事巡察 海事巡察现状 巡查效率低下&#xff0c;存在视野盲区&#xff0c;耗时长&#xff0c;人力成本高。 海事的职能 统一管理水上交通安全和防治船舶污染。 管理通航秩序、通航环境。负责水域的划定和监督管理&#xff0c;维护水 上交通秩序&#xff1b;核定船舶靠泊安…

一文带你了解人工智能:现状、应用、变革及未来展望

近年来&#xff0c;人工智能&#xff08;AI&#xff09;的发展势头迅猛&#xff0c;它已经渗透到了我们生活的方方面面。从智能手机的语音助手到自动驾驶汽车&#xff0c;从智能家居到医疗诊断&#xff0c;AI正在改变着我们的生活方式。本文将结合时事&#xff0c;为大家介绍当…

日志自动分析-操作系统-GscanLogonTracerf8x

&#x1f3bc;个人主页&#xff1a;金灰 &#x1f60e;作者简介:一名简单的大一学生;易编橙终身成长社群的嘉宾.✨ 专注网络空间安全服务,期待与您的交流分享~ 感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持&#xff01;❤️ &#x1f34a;易编橙终身成长社群&#…

zdppy+vue3+antd 实现表格单元格编辑功能

初步实现 <template><a-button class"editable-add-btn" style"margin-bottom: 8px" click"handleAdd">Add</a-button><a-table bordered :data-source"dataSource" :columns"columns"><templa…

汽车软件开发:ASPICE与ISO26262标准下的质量管理与控制实践

在汽车软件开发中&#xff0c;质量管理与控制是确保软件产品满足预期功能、性能、可靠性和安全性的关键过程。ASPICE&#xff08;Automotive SPICE&#xff09;和ISO 26262标准在这一领域中各自扮演重要角色&#xff0c;共同为汽车软件开发提供了全面的质量管理与控制框架。 AS…

持续集成/持续部署(CI/CD)工具:Jenkins、GitLab CI等工具的使用

持续集成/持续部署(CI/CD)工具&#xff1a;Jenkins、GitLab CI等工具的使用 在软件开发过程中&#xff0c;持续集成/持续部署&#xff08;CI/CD&#xff09;是一种重要的实践&#xff0c;可以帮助我们提高软件质量、加快开发速度和降低风险。CI/CD工具可以自动化软件构建、测试…