linux netty udp服务端,Netty实现UDP服务端

### 前言

在之前的文章我已经讲过了利用`Netty`实现`UDP`客户端,大家有兴趣的话,可以参看下面文章:

[Netty实现UDP客户端](https://www.jianshu.com/p/5dbc6b3c9d94)

今天就让我们来学习下利用`Netty`实现`UDP`服务端吧,这里我经过整合封装,主要涉及到两个类:`UnServerHandler`和`UnServer`,下面就来讲讲它们的使用吧。

今天涉及内容:

1. `netty` jar 包导入

2. `UnServerHandler`和`UnServer`简介

3. `UnServer`服务端在主函数中的使用

4. 需要注意的问题

5. 效果图和项目结构图

先来波效果图

![效果图.gif](/contentImages/image/20200612/MBRkLRd34CgjqsYIDV5.gif)

![客户端日志.png](/contentImages/image/20200612/OMnaDqqHbDZ5IjM3HPP.png)

![服务端日志.png](/contentImages/image/20200612/KGZ5HgUSrB9tyEHidkG.png)

#### 一. netty jar 包导入

`UnServer`是利用`Netty`实现的`UDP服务端`,所以需要用到`netty` jar 包。我用的版本是`netty-all-5.0.0.Alpha2.jar`。首先我们要在你项目的 `项目/app/`下建`lib`文件夹,建成后路径为:`项目/app/lib/`,然后将`netty-all-5.0.0.Alpha2.jar` 复制 到 `项目/app/lib/` 文件夹下。选中`netty-all-5.0.0.Alpha2.jar` 右键,选择 `add As Library...`,然后打开你`app_module`对应的`build.gradle`,看到以下代码:

```

implementation files('libs/netty-all-5.0.0.Alpha2.jar')

```

则表示你`jar包`导入成功。

`netty` jar 包你可以在`Netty`官网下,当然这里我也提供下`netty-all-5.0.0.Alpha2.jar`下载地址:

[netty-all-5.0.0.Alpha2.jar下载](https://download.csdn.net/download/Burn_yourself/12507242)

#### 二. UnServerHandler 和 UnServer 简介

`UnServerHandler`是`UnServer`类的一个辅助类,主要是在`UnServer`中使用,大家只做了解,而真正要使用的类是`UnServer`服务端类。下面主要介绍下`UnServer`类中的一些常用方法:

```

/***

* 初始化对象,设置端口,字符集

*

* @param port 端口范围:0-65535

* @param charsetName 字符编码集:如 TcpConfig.UTF_8 或 TcpConfig.GBK

*/

public UnServer(int port,String charsetName)

/***

* 建立udp服务端

*

* @param listener 接收和返回数据给udp客户端的监听

*/

public void start(UnServerHandler.OnChannelListener listener)

```

#### 三. UnServer 服务端在主函数中的使用

下面贴出`UnServer`服务端在主函数中使用的代码:

```

/**

* Title:

* description:

* autor:pei

* created on 2020/3/6

*/

public class TestJava {

public static void main(String[] args) {

LogUtil.setDebug(true);

UnServer unServer=new UnServer(1112,"UTF-8");

unServer.start(new UnServerHandler.OnChannelListener() {

@Override

public String receiveData(ChannelHandlerContext ctx, String result) {

//接收客户端数据

System.out.println("=========接收客户端的数据=====result=" + result);

//给客户端的回复,若返回null,表示不给客户端回复

return "我真的是服务端啊";

}

});

}

}

```

这里需要注意的是,若要对客户端发送过来的数据做不同的处理,可以在接收的客户端的数据上标记不同`tag`,然后,根据不同`tag`,给客户端回复不同的数据,类似下面这样:

```

unServer.start(new UnServerHandler.OnChannelListener() {

@Override

public String receiveData(ChannelHandlerContext ctx, String result) {

//接收客户端数据

int type=Integer.valueOf(result.substring(0,1));

String message=result.substring(1,result.length());

System.out.println("===========我是接收结果=====result="+message);

//返回值为返回给客户端的结果

String response = null;

switch (type) {

case 1:

response = "服务端已经收到第一条数据";

break;

case 2:

response = "服务端已经收到第二条数据";

break;

default:

break;

}

System.out.println("===========我是回复信息=====response="+response);

return response;

}

});

```

#### 四. 需要注意的问题

主要问题在于,若服务端接收数据乱码,那么请保证客户端与服务端使用相同的字符集。

#### 五. 效果图和项目结构图

![效果图.gif](/contentImages/image/20200612/MBRkLRd34CgjqsYIDV5.gif)

![客户端日志.png](/contentImages/image/20200612/OMnaDqqHbDZ5IjM3HPP.png)

![服务端日志.png](/contentImages/image/20200612/KGZ5HgUSrB9tyEHidkG.png)

![项目结构图.png](/contentImages/image/20200612/R7Hgb9dlpJRj3IKK1kI.png)

ok,今天的内容就介绍到这里了,谢谢大家。

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

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

相关文章

会java需要多久能学会python_java好学吗?零基础学java要多久?

java好学吗?零基础学java要多久? 时间:2019-05-21 来源:华清远见 2019年3月,tiOBE 公布了编程语言排行榜,正如官方所说,本月的排名几乎没有任何有趣的变化,排名前十的依然是&…

linux memcached 运行,linux下查看Memcached运行状态

查看Memcached运行状态的命令是:echo stats | nc 127.0.0.1 11211 查看memcached状态的基本命令,通过这个命令可以看到如下信息: STAT pid 22459 进程ID STAT uptime 1027046 服务器运行秒数 STAT time 1273043062 服务器当前unix时间戳 STAT…

jboss架构_检查Red Hat JBoss BRMS部署架构的规则和事件(第二部分)

jboss架构(文章来宾与北美红帽公司高级中间件顾问约翰赫洛克 ( John Hurlocker)合着) 在这周的技巧中,我们将放慢速度,并仔细研究可能的Red Hat JBoss BRMS部署体系结构。 在谈论部署体系结构时&#xff…

linux 关于休眠得脚本,linux – 如果条件为true,请将cron作业休眠5分钟

你有两个选择来获得这个.通常,cron与前一个作业实例是否仍在运行无关.选项1:在脚本的开头写一个锁文件,并在完成后将其删除.然后在脚本开头检查文件是否存在,如果是,则脚本结束而不做任何事情.例如,这可能是这样的:# if the file exists (-e) end the sc…

TestNG中的参数化– DataProvider和TestNG XML(带有示例)

测试自动化,或所谓的自动化测试,并不像听起来那样容易。 必须考虑所有可能的用户交互的所有排列和组合,并且在此基础上,您将必须创建测试脚本以通过多种浏览器和OS组合来验证Web应用程序。 这就是参数化在Selenium自动化测试中起关…

java与python多态的区别_如果未调用父构造函数(与Java不同),多态性在Python中如何工作? - java...

因此,父类构造函数是在Java中调用的,而在Python中则不是。如果这意味着未创建父对象,那么如何在Python中成功调用def function-这是怎么回事? Python代码 class Parent: def __new__(self): print(f"I am the real parent co…

linux中统计java数量,linux 统计当前目录下文件数

查看当前目录下文件的个数ls -l | grep "^-" | wc -l查看当前目录下文件的个数,包括子目录里的。ls -lR| grep "^-" | wc -l查看某目录下文件夹(目录)的个数,包括子目录里的。ls -lR| grep "^d" | wc -l某目录下以.js结尾…

zbrush 添加纹理贴图_想学习3D游戏模型,3Dmax、MAYA和ZBrush都需要掌握吗?

想从事游戏行业的建模的话,模型和贴图的知识都得学,MAYA和3DMAX只能说是基本要学的,Zbrush能够提升个人价值,之后能给你建好的模型做出好看的贴图,才能算是一个游戏建模方面能干活的合格从业人员。新手入门的话&#x…

linux 连接wifi不稳定,rtl8188ce 无线网不稳定终极解决方案 - 哆啦比猫的技术瞎扯 - Arch Linux · ドラえもん · 实时绘制...

先容我废话据说 realtek 的无线网卡就这个系列问题多多。以前连接不太稳定,但不会频繁掉线就凑活用了。自从不知哪次升级以来,掉线越来越频繁,最后已经发展到 10秒必掉 了,以至于要上网就得拼命到终端里重连网络。网上也有各种解决…

file.getpath_Java中File的getPath(),getCanonicalPath()和getAbsolutePath()之间的区别...

file.getpathFile API在Java中非常重要,因为它使文件系统可以访问Java程序。 尽管Java的文件API丰富,但是使用它们时仍需要了解很多细节。 关于文件路径的常见查询程序员之一是getPath() , getCanonicalPath()和getAbsolutePath()方法之间的区…

为什么python代码运行不了_为什么Python代码能运行但是PyCharm给我画红线?

PyCharm在遇到模块找不到时,会使用红色波浪线提醒开发者。这本来是一个非常好的功能,但却由于另外一个问题,会给一些Python初学者造成困扰。 这一篇文章,我们讲讲工作区导致的这个问题。 首先我们创建一个login.py文件&#xff0c…

linux 在线帮助,linux获取在线帮助

Linux系统的帮助文档非常丰富。帮助手册提供命令的使用说明。比如你若是想了解ls命令的用法,只需运行:$ man ls帮助手册旨在提供基础知识和参考信息,有时会有一些实例和交叉索引,但是基本没有那种教程式的文档。帮助手册会按系统排…

python的计算_python 计算方位角实例(根据两点的坐标计算)

知道两点坐标,怎么计算两点方向的方位角? 答:首先计算坐标增量dx,dy(两个对应坐标分量相减,终点的减始点的)。 若dx,dy中有一个为零时,根据另一个的正负决定方位角(0,90,…

linux中samba详解,详解linux系列之samba的安装及配置

上篇博文中我介绍了FTP,今天我们来介绍一下samba实现文件共享。这个比FTP更好点,因为对用户的权限可以通过samba权限和系统权限交叉使用,取最严格的。可以让windows更容易的从linux系统上存取文件,还有samba也可以让linux上面的打…

saml2_向SAML响应中添加自定义声明–(如何为WSO2 Identity Server编写自定义声明处理程序)...

saml2总览 最新版本的WSO2 Identity Server(版本5.0.0)配备了“应用程序身份验证框架”,该框架提供了很大的灵活性,可以对使用异构协议的各种服务提供商的用户进行身份验证。 它具有几个扩展点,可用于满足企业系统中常…

python做股票分析_利用Python进行股票投资组合分析(调试)

pythonsp500-robo-advisor-edition Python for Financial Analyses 需要的镜像文件和数据--Robo Advisor edition. 小结 "Python for Finance: Robo Advisor Edition" 这一版本的镜像包括Jupyter notebook和Python脚本,以及用pandas通过Jupyter notebook构…

c语言程序求一一组数平均值,编写求一组整数的和与平均值的程序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼-----------------------------------------------------[习题6-1]编写求一组整数的和与平均值的程序。-----------------------------------------------------[分析]循序渐进,从易到难,分解为下列问题群。…

使用Apache Kafka,Kubernetes和Envoy,Istio,Linkerd的服务网格和云原生微服务

微服务架构不是免费的午餐 ! 微服务需要解耦,灵活,操作透明,数据感知和弹性。 过去几年的大多数材料仅讨论具有紧密耦合且不可扩展的技术(如REST / HTTP)的点对点体系结构。 这篇博客文章介绍了Apache Kafk…

python缩写词_如果连这10个Python缩写都不知道,那你一定是Python新手!

在本文中,我将告诉大家一些容易忽视的Python编程原理、规则和一些有趣的事实。 简介 对于许多开始学习编程的人来说,Python已经成为他们的首选。Python有非常直观的语法和支持动态类型的灵活性。此外,它是一种解释语言,这使得使用…

单片机控制三相异步电动机正反转c语言程序,请用PLC控制一台普通三相异步电动机的正反转控制,设计其控制程序梯形图及主电路...

PLC的编程方法及步骤。总的步骤主要有三步:一、根据电路图选择电器元件及PLC的型号,其中包括确定PLC的输入输出点位、确定PLC的输出类型,也需考虑某些功能是否能扩展、价格等;二、设计好PLC控制的外围元器件的原理图。这里面包括有…