linux netty udp服务端,Netty实现UDP服务端
### 前言
在之前的文章我已經(jīng)講過了利用`Netty`實(shí)現(xiàn)`UDP`客戶端,大家有興趣的話,可以參看下面文章:
[Netty實(shí)現(xiàn)UDP客戶端](https://www.jianshu.com/p/5dbc6b3c9d94)
今天就讓我們來學(xué)習(xí)下利用`Netty`實(shí)現(xiàn)`UDP`服務(wù)端吧,這里我經(jīng)過整合封裝,主要涉及到兩個類:`UnServerHandler`和`UnServer`,下面就來講講它們的使用吧。
今天涉及內(nèi)容:
1. `netty` jar 包導(dǎo)入
2. `UnServerHandler`和`UnServer`簡介
3. `UnServer`服務(wù)端在主函數(shù)中的使用
4. 需要注意的問題
5. 效果圖和項目結(jié)構(gòu)圖
先來波效果圖



#### 一. netty jar 包導(dǎo)入
`UnServer`是利用`Netty`實(shí)現(xiàn)的`UDP服務(wù)端`,所以需要用到`netty` jar 包。我用的版本是`netty-all-5.0.0.Alpha2.jar`。首先我們要在你項目的 `項目/app/`下建`lib`文件夾,建成后路徑為:`項目/app/lib/`,然后將`netty-all-5.0.0.Alpha2.jar` 復(fù)制 到 `項目/app/lib/` 文件夾下。選中`netty-all-5.0.0.Alpha2.jar` 右鍵,選擇 `add As Library...`,然后打開你`app_module`對應(yīng)的`build.gradle`,看到以下代碼:
```
implementation files('libs/netty-all-5.0.0.Alpha2.jar')
```
則表示你`jar包`導(dǎo)入成功。
`netty` jar 包你可以在`Netty`官網(wǎng)下,當(dāng)然這里我也提供下`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`服務(wù)端類。下面主要介紹下`UnServer`類中的一些常用方法:
```
/***
* 初始化對象,設(shè)置端口,字符集
*
* @param port 端口范圍:0-65535
* @param charsetName 字符編碼集:如 TcpConfig.UTF_8 或 TcpConfig.GBK
*/
public UnServer(int port,String charsetName)
/***
* 建立udp服務(wù)端
*
* @param listener 接收和返回數(shù)據(jù)給udp客戶端的監(jiān)聽
*/
public void start(UnServerHandler.OnChannelListener listener)
```
#### 三. UnServer 服務(wù)端在主函數(shù)中的使用
下面貼出`UnServer`服務(wù)端在主函數(shù)中使用的代碼:
```
/**
* 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) {
//接收客戶端數(shù)據(jù)
System.out.println("=========接收客戶端的數(shù)據(jù)=====result=" + result);
//給客戶端的回復(fù),若返回null,表示不給客戶端回復(fù)
return "我真的是服務(wù)端啊";
}
});
}
}
```
這里需要注意的是,若要對客戶端發(fā)送過來的數(shù)據(jù)做不同的處理,可以在接收的客戶端的數(shù)據(jù)上標(biāo)記不同`tag`,然后,根據(jù)不同`tag`,給客戶端回復(fù)不同的數(shù)據(jù),類似下面這樣:
```
unServer.start(new UnServerHandler.OnChannelListener() {
@Override
public String receiveData(ChannelHandlerContext ctx, String result) {
//接收客戶端數(shù)據(jù)
int type=Integer.valueOf(result.substring(0,1));
String message=result.substring(1,result.length());
System.out.println("===========我是接收結(jié)果=====result="+message);
//返回值為返回給客戶端的結(jié)果
String response = null;
switch (type) {
case 1:
response = "服務(wù)端已經(jīng)收到第一條數(shù)據(jù)";
break;
case 2:
response = "服務(wù)端已經(jīng)收到第二條數(shù)據(jù)";
break;
default:
break;
}
System.out.println("===========我是回復(fù)信息=====response="+response);
return response;
}
});
```
#### 四. 需要注意的問題
主要問題在于,若服務(wù)端接收數(shù)據(jù)亂碼,那么請保證客戶端與服務(wù)端使用相同的字符集。
#### 五. 效果圖和項目結(jié)構(gòu)圖




ok,今天的內(nèi)容就介紹到這里了,謝謝大家。
總結(jié)
以上是生活随笔為你收集整理的linux netty udp服务端,Netty实现UDP服务端的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iPhone 小技巧:对相簿中的照片进行
- 下一篇: 使用第三方充电器给iPhone 14充电