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,今天的内容就介绍到这里了,谢谢大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值