client netty 主动发数据_netty案例,netty4.1基础入门篇十一《netty udp通信方式案例Demo》...

小傅哥 | https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获。专注于原创专题案例编写,目前已完成的专题有;Netty4.x实战专题案例、用Java实现JVM、基于JavaAgent的全链路监控、手写RPC框架、架构设计专题案例、源码分析等。你用剑 、我用刀 ,好的代码都很烧,望你不吝出招!

一、前言介绍

在Netty通信中UDP的实现方式也非常简单,只要注意部分代码区别于TCP即可。本章节需要注意的知识点 ;NioDatagramChannel、ChannelOption.SO_BROADCAST

Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据报的方法。RFC 768 1 描述了 UDP。

Internet 的传输层有两个主要协议,互为补充。无连接的是 UDP,它除了给应用程序发送数据包功能并允许它们在所需的层次上架构自己的协议之外,几乎没有做什么特别的的事情。面向连接的是 TCP,该协议几乎做了所有的事情。

二、环境准备

1、jdk1.8【jdk1.7以下只能部分支持netty】

2、Netty4.1.36.Final【netty3.x 4.x 5每次的变化较大,接口类名也随着变化】

3、NetAssist 网络调试助手,可以从网上下载也可以联系我,微信公众号:bugstack虫洞栈 | 关注回复你的邮箱

三、代码示例

itstack-demo-netty-1-11
└── src├── main│   └── java│       └── org.itstack.demo.netty│           ├── client│           │   ├── MyChannelInitializer.java│           │   ├── MyClientHandler.java│           │   └── NettyClient.java│           └── server│               ├── MyChannelInitializer.java│               ├── MyServerHandler.java│               └── NettyServer.java└── test└── java└── org.itstack.demo.netty.test└── ApiTest.java
client/MyChannelInitializer.java
/*** 虫洞栈:https://bugstack.cn* 公众号:bugstack虫洞栈  {获取学习源码}* 虫洞群:①群5398358 ②群5360692* Create by fuzhengwei on @2019*/
public class MyChannelInitializer extends ChannelInitializer<NioDatagramChannel> {@Overrideprotected void initChannel(NioDatagramChannel ch) throws Exception {ChannelPipeline pipeline = ch.pipeline();// 解码转String,注意调整自己的编码格式GBK、UTF-8//pipeline.addLast("stringDecoder", new StringDecoder(Charset.forName("GBK")));pipeline.addLast(new MyClientHandler());}}
client/MyClientHandler.java
/*** 虫洞栈:https://bugstack.cn* 公众号:bugstack虫洞栈  {获取学习源码}* 虫洞群:①群5398358 ②群5360692* Create by fuzhengwei on @2019*/
public class MyClientHandler extends SimpleChannelInboundHandler<DatagramPacket> {//接受服务端发送的内容@Overrideprotected void channelRead0(ChannelHandlerContext ctx, DatagramPacket packet) throws Exception {String msg = packet.content().toString(Charset.forName("GBK"));System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " UDP客户端接收到消息:" + msg);}}
client/NettyClient.java
/*** 虫洞栈:https://bugstack.cn* 公众号:bugstack虫洞栈  {获取学习源码}* 虫洞群:①群5398358 ②群5360692* Create by fuzhengwei on @2019*/
public class NettyClient {public static void main(String[] args) {EventLoopGroup group = new NioEventLoopGroup();try {Bootstrap b = new Bootstrap();b.group(group).channel(NioDatagramChannel.class).handler(new MyChannelInitializer());Channel ch = b.bind(7398).sync().channel();//向目标端口发送信息ch.writeAndFlush(new DatagramPacket(Unpooled.copiedBuffer("你好端口7397的bugstack虫洞栈,我是客户端小爱,你在吗!", Charset.forName("GBK")),new InetSocketAddress("127.0.0.1", 7397))).sync();ch.closeFuture().await();} catch (Exception e) {e.printStackTrace();} finally {group.shutdownGracefully();}}}
server/MyChannelInitializer.java
/*** 虫洞栈:https://bugstack.cn* 公众号:bugstack虫洞栈  {获取学习源码}* 虫洞群:①群5398358 ②群5360692* Create by fuzhengwei on @2019*/
public class MyChannelInitializer extends ChannelInitializer<NioDatagramChannel> {private EventLoopGroup group = new NioEventLoopGroup();@Overrideprotected void initChannel(NioDatagramChannel ch) throws Exception {ChannelPipeline pipeline = ch.pipeline();// 解码转String,注意调整自己的编码格式GBK、UTF-8//pipeline.addLast("stringDecoder", new StringDecoder(Charset.forName("GBK")));pipeline.addLast(group, new MyServerHandler());}}
server/MyServerHandler.java
/*** 虫洞栈:https://bugstack.cn* 公众号:bugstack虫洞栈  {获取学习源码}* 虫洞群:①群5398358 ②群5360692* Create by fuzhengwei on @2019*/
public class MyServerHandler extends SimpleChannelInboundHandler<DatagramPacket> {@Overrideprotected void channelRead0(ChannelHandlerContext ctx, DatagramPacket packet) throws Exception {String msg = packet.content().toString(Charset.forName("GBK"));System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " UDP服务端接收到消息:" + msg);//向客户端发送消息String json = "微信公众号:bugstack虫洞栈,通知:我已经收到你的消息rn";// 由于数据报的数据是以字符数组传的形式存储的,所以传转数据byte[] bytes = json.getBytes(Charset.forName("GBK"));DatagramPacket data = new DatagramPacket(Unpooled.copiedBuffer(bytes), packet.sender());ctx.writeAndFlush(data);//向客户端发送消息}}
server/NettyServer.java
/*** 虫洞栈:https://bugstack.cn* 公众号:bugstack虫洞栈  {获取学习源码}* 虫洞群:①群5398358 ②群5360692* Create by fuzhengwei on @2019*/
public class NettyServer {public static void main(String[] args) throws InterruptedException {EventLoopGroup group = new NioEventLoopGroup();try {Bootstrap b = new Bootstrap();b.group(group).channel(NioDatagramChannel.class).option(ChannelOption.SO_BROADCAST, true)    //广播.option(ChannelOption.SO_RCVBUF, 2048 * 1024)// 设置UDP读缓冲区为2M.option(ChannelOption.SO_SNDBUF, 1024 * 1024)// 设置UDP写缓冲区为1M.handler(new MyChannelInitializer());ChannelFuture f = b.bind(7397).sync();System.out.println("itstack-demo-netty udp server start done. {关注公众号:bugstack虫洞栈,获取源码}");f.channel().closeFuture().sync();} finally {//优雅的关闭释放内存group.shutdownGracefully();}}}

四、测试结果

启动NettyServer
itstack-demo-netty udp server start done. {关注公众号:bugstack虫洞栈,获取源码}
2019-09-01 16:58:34 UDP服务端接收到消息:你好端口7397的bugstack虫洞栈,我是客户端小爱,你在吗!
2019-09-01 16:59:15 UDP服务端接收到消息:你好,有人在关注bugstack公众号,关注可以获得源码!
2019-09-01 16:59:15 UDP服务端接收到消息:你好,有人在关注bugstack公众号,关注可以获得源码!
2019-09-01 16:59:16 UDP服务端接收到消息:你好,有人在关注bugstack公众号,关注可以获得源码!
2019-09-01 16:59:17 UDP服务端接收到消息:你好,有人在关注bugstack公众号,关注可以获得源码!
2019-09-01 16:59:17 UDP服务端接收到消息:你好,有人在关注bugstack公众号,关注可以获得源码!
2019-09-01 16:59:18 UDP服务端接收到消息:你好,有人在关注bugstack公众号,关注可以获得源码!
2019-09-01 16:59:18 UDP服务端接收到消息:你好,有人在关注bugstack公众号,关注可以获得源码!
2019-09-01 16:59:19 UDP服务端接收到消息:你好,有人在关注bugstack公众号,关注可以获得源码!
2019-09-01 16:59:19 UDP服务端接收到消息:你好,有人在关注bugstack公众号,关注可以获得源码!Process finished with exit code -1
启动NettyClient
2019-09-01 16:58:34 UDP客户端接收到消息:微信公众号:bugstack虫洞栈,通知:我已经收到你的消息Process finished with exit code -1
在启动一个网络调试助手,NetAssist | 这样方便我们验证

c125e36549be03d233151ae48b31450f.png

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

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

相关文章

php-对银行卡号做掩码处理

1.实现代码如下/*** 对银行卡号进行掩码处理* param string $bankCardNo 银行卡号* return string 掩码后的银行卡号*/function formatBankCardNo($bankCardNo){//截取银行卡号前4位$prefix substr($bankCardNo,0,4);//截取银行卡号后4位$suffix substr($bankCa…

echarts 柱状图不显示y坐标轴_Python+matplotlib自定义坐标轴位置、颜色、箭头

图书推荐&#xff1a;《Python程序设计基础与应用》(ISBN&#xff1a;9787111606178)&#xff0c;董付国&#xff0c;机械工业出版社图书详情&#xff1a;用书教师可以联系董老师获取教学大纲、课件、源码、教案、考试系统等配套教学资源。使用Pythonnumpymatplotlib这样的组合…

css3浏览,css3支持哪些浏览器?

CSS3 带来众多全新的设计体验&#xff0c;但有一个问题值得考虑&#xff1a;浏览器对 CSS3 特性的兼容情况如何&#xff1f;因为页面最终离不开用浏览器来渲染&#xff0c;并不是所有浏览器都完全支持 CSS3 的特性。有时花时间写的效果只能在特定的浏览器下有效&#xff0c;这意…

移动游戏加载性能和内存管理全解析 学习

https://v.qq.com/iframe/player.html?vido0512etq2vm&tiny0&auto0 转载于:https://www.cnblogs.com/revoid/p/7039232.html

++代码实现 模糊综合算法_干货 | 十大经典排序算法最强总结(内含代码实现)...

一、算法分类十种常见排序算法可以分为两大类&#xff1a;比较类排序&#xff1a;通过比较来决定元素间的相对次序&#xff0c;由于其时间复杂度不能突破O(nlogn)&#xff0c;因此也称为非线性时间比较类排序。非比较类排序&#xff1a;不通过比较来决定元素间的相对次序&#…

如何恢复osd的auth表中的权限

2019独角兽企业重金招聘Python工程师标准>>> 原因&#xff1a;当你一不小心删掉了osd的auth信息时&#xff0c;重启osd服务&#xff0c;此时ceph -s查看发现osd down 如&#xff1a; [rootceph ~]# ceph osd tree ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIM…

PS打开PSD文档服务器未响应,ps打不开psd文件的解决方法

很多人用ps做作品的时候&#xff0c;经常遇到psd文件打不开的问题&#xff0c;最常见的有三种原因&#xff0c;有两种可以设置解决&#xff0c;另一种是文件损坏&#xff0c;不可恢复。下面是学习小编给大家整理的有关介绍ps打不开psd文件的解决方法&#xff0c;希望对大家有帮…

ajax实现两个aspx跳转,请问ajax执行成功后可以跳转到另一个页面吗?

一只名叫tom的猫通过ajax读取到写好的jsp&#xff0c;另一个jsp可以放framse或者层都可以&#xff0c;显示就行了123456789$.ajax({ type: "POST", //用post方式传输 dataType: "html", //数据格式&#xff1a;json…

Android横竖屏切换View设置不同尺寸或等比例缩放的自定义View的onMeasure解决方案(2)...

Android横竖屏切换View设置不同尺寸或等比例缩放的自定义View的onMeasure解决方案&#xff08;2&#xff09;附录文章1以xml布局文件方式实现了一个view在横竖屏切换时候的大小尺寸缩放&#xff0c;实现这种需求&#xff0c;也可以使用自定义View的onMeasure方法实现。比如&…

本地 服务器 文件传输,本地服务器文件传输

本地服务器文件传输 内容精选换一换CDM支持周期性自动将新增文件上传到OBS&#xff0c;不需要写代码&#xff0c;也不需要用户频繁手动上传即可使用OBS的海量存储能力进行文件备份。这里以CDM周期性备份FTP的文件到OBS为例进行介绍。例如&#xff1a;FTP服务器的to_obs_test目录…

中怎么撤回消息_微信消息撤回也能看到,这个开源神器牛x!语音、图片、文字都支持!...

1.前言 微信在2014年的时候&#xff0c;发布的v5.3.1 版本中推出了消息撤回功能&#xff0c;用户可以选择撤回 2 分钟内发送的最后一条信息。现在很多即时通讯的软件都有撤回这个功能。腾讯为了照顾手残党&#xff0c;在微信和QQ中都加入了【消息撤回】的功能。但是这个功能对于…

ntce服务器不稳定,当心!你的教师资格证成绩失效了!| 服务

原标题&#xff1a;当心&#xff01;你的教师资格证成绩失效了&#xff01;| 服务湖南的小王同学资格证笔试考了两次才全部通过&#xff0c;想着好好歇歇&#xff0c;结果就误了面试报名&#xff0c;等到第三年面试报名时才发现有一科笔试成绩已经过期了......天呐&#xff0c;…

深度学习与计算机视觉系列(6)_神经网络结构与神经元激励函数

作者&#xff1a;寒小阳 && 龙心尘 时间&#xff1a;2016年1月。 出处&#xff1a; http://blog.csdn.net/han_xiaoyang/article/details/50447834 http://blog.csdn.net/longxinchen_ml/article/details/50448267 声明&#xff1a;版权全部。转载请联系作者并注明出…

mysql左连接和右连接_MYSQL 左连接与右连接

一、 LEFT JOINLEFT JOIN 关键字从左表(table1)返回所有的行&#xff0c;即使右表(table2)中没有匹配。如果右表中没有匹配&#xff0c;则结果为 NULL。语法&#xff1a;SELECT column_name(s)FROM table1LEFT JOIN table2ON table1.column_nametable2.column_name;举例&#x…

SIPp web frontend(2)

SIP VoIP 測试交流群: 323827101 欢迎大家转载。为保留作者成果&#xff0c;转载请注明出处。http://blog.csdn.net/netluoriver。有些文件在资源中也能够下载。假设你没有积分。能够联系我索要&#xff01;3.6Adding calls to a test(为測试脚本添加呼叫) To add a call, use …

python学习中文第五版_前5个学习Python的网站

python学习中文第五版Python is a multi-utility high-level language (programming as well as a scripting language) first introduced in the year 1991 designed by ‘Guido Van Rossum’, and was named after ‘Monty Python’ which was a very famous British Comedy …

CentOS7入门_安装并配置mysql5.7.18

2019独角兽企业重金招聘Python工程师标准>>> 1.下载mysql5.7 mysql的官方下载地址 打开之后我们选择对应的系统版本进行下载&#xff0c;之后选择nothanks,不登陆直接下载&#xff08;如果只是搭建最基本的的mysql的server只需要下载上图4个基本rpm文件即可&#xf…

linux mysql 磁盘空间_磁盘空间满了之后MySQL会怎样

导读当磁盘空间爆满后&#xff0c;MySQL会发生什么事呢&#xff1f;又应该怎么应对&#xff1f;会发生什么事当磁盘空间写满了之后&#xff0c;MySQL是无法再写入任何数据的&#xff0c;包括对表数据的写入&#xff0c;以及binlog、binlog-index等文件。当然了&#xff0c;因为…

高晓松谈管理:自嘲总被员工管

6月11日&#xff0c;高晓松作为阿里巴巴钉钉在深圳卫视举办的“中国酷公司”超级发布会特邀嘉宾&#xff0c;在现场讲述了他对酷公司关键词“自驱力”的理解。 先来说说这场超级发布会的重头戏是阿里钉钉&#xff08;企业应用软件&#xff09;的3.5版本升级发布&#xff0c;钉钉…

【js】JavaScript parser实现浅析

最近笔者的团队迁移了webpack2&#xff0c;在迁移过程中&#xff0c;笔者发现webpack2中有相当多的兼容代码&#xff0c;虽然外界有很多声音一直在质疑作者为什么要破坏性更新&#xff0c;其实大家也都知道webpack1那种过于“灵活”的配置方式是有待商榷的&#xff0c;所以作者…