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,一经查实,立即删除!

相关文章

服务器硬件oid,HPE ProLiant DL580 Gen10 服务器

用可扩展 4U 外形提供可扩展性能HPE ProLiant DL580 Gen10 服务器支持多达四个英特尔至强铂金和金牌处理器&#xff0c;与上一代英特尔 至强 可扩展处理器相比&#xff0c;每个内核的性能提升高达 11%[5]&#xff0c;可借助 4U 可扩展机箱&#xff0c;实现 4P 计算能力。多达 4…

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

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

最长递增子序列 子串_最长递增奇偶子序列

最长递增子序列 子串Problem statement: 问题陈述&#xff1a; Given a sequence of numbers you have to find out the length of the longest increasing odd even subsequence and print the length of the subsequence. The sequence will be maintaining like, (odd ) -&…

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

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

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

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

print函数python_带有结束参数的Python print()函数

print函数pythonprint()函数 (print() function) print() function is used to print message on the screen. print()函数用于在屏幕上打印消息。 Example: 例&#xff1a; # python print() function example# printing textprint("Hello world!")print("He…

python各位数字之和为5的数_『Python基础-5』数字,运算,转换

『Python基础-5』数字,运算,转换目录基本的数字类型二进制,八进制,十六进制数字类型间的转换数字运算1. 数字类型Python 数字数据类型用于存储数学上的值&#xff0c;比如整数、浮点数、复数等。数字类型在python中是不可变类型&#xff0c;意思是一个变量被赋予了一个不一样的…

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

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

css 轨道,html-当其他轨道增加时,CSS网格的轨道不会缩...

由于行和列定义中都包含1fr,因此水平和垂直空间受到限制-因此网格项目将平均共享它们.尝试将其更改为自动用于行和列,您可以看到一切正常,但还不完美-请注意,悬停的网格项周围存在空格&#xff1a;.grid--container {height: 100vh;width: 100vw;max-height: 100%;max-width: 1…

带有示例的Python File readline()方法

文件readline()方法 (File readline() Method) readline() method is an inbuilt method in Python, it is used to get one line from the file, the method is called with this object (current file stream/IO object) and returns one line from the file, we can also sp…

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

一、算法分类十种常见排序算法可以分为两大类&#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…

nginx服务器配置安全维护,Nginx服务器相关的一些安全配置建议

这篇文章主要介绍了Nginx服务器相关的一些安全配置建议,共计总结了十个小点,需要的朋友可以参考下Nginx是当今最流行的Web服务器之一。它为世界上7%的web流量提供服务而且正在以惊人的速度增长。它是个让人惊奇的服务器&#xff0c;我愿意部署它。下面是一个常见安全陷阱和解决…

带有示例的Python date strftime()方法

Python date.strftime()方法 (Python date.strftime() Method) date.strftime() method is used to manipulate objects of date class of module datetime. date.strftime()方法用于操作模块datetime的日期类的对象。 It takes an instance of the class and returns a stri…

python 发送邮件connect none_使用python向IP地址发送邮件

所以我尝试通过python脚本发送邮件。使用通常的接收者地址格式可以正常工作”userdomain.tld". 当我现在尝试使用带有接收者“user[IP Address]的脚本时&#xff0c;我所有的调试输出看起来都很好&#xff0c;sendmail方法也可以工作&#xff0c;但是邮件始终没有收到。我…

老男孩IT教育38期面授班 学员邢伟的决心书

大家好我叫邢伟,今年22岁&#xff0c;上一份工作是做媒体推广的&#xff0c;拿完奖金饭补全勤奖月薪大概4K左右&#xff0c;在北京生活感觉力不从心现在参加老男孩IT教育linux运维38期&#xff0c;在接下来的学习中&#xff0c;我的目标是毕业后达到月薪12K在接下来的学习中早上…

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

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

strictmath_Java StrictMath cbrt()方法与示例

strictmathStrictMath类cbrt()方法 (StrictMath Class cbrt() method) cbrt() method is available in java.lang package. cbrt()方法在java.lang包中可用。 cbrt() method is used to find the cube root of the given parameter in the method. Here, cbrt stands for cube …

模块---常用模块

import osprint(os.getcwd()) #得到当前目录#os.chmod("/usr/local",7) #给文件或者文件夹加权限&#xff0c;7为最高权限print(os.chdir("../")) #更改当前目录print(os.curdir) #当前目录print(os.pardir) #父目录print(os.mkdir("test1")) #创…

excel添加列下拉框票价_excel表格下拉表格添加数据-excel2017表格中怎么制作下拉菜单列表框...

在Excel表中&#xff0c;如何将增加下拉菜单的选项&#xff1f;excel中的下拉菜单选项&#xff0c;就是筛选的功能&#xff0c;具体操作如下&#xff1a;1.首先选中a、b两列数据&#xff0c;在“开始”选项卡上选择“筛选”&#xff1b;2.这样就在excel表中添加了下拉菜单选项。…