前言
之前已经讲过了Netty
实现的TCP客户端
,大家有兴趣的话,可以参考以下文章:
Netty实现TCP客户端
然后,今天就给大家讲讲Netty
实现UDP客户端
吧,这里我封装了两个工具类:UnClientHandler
和UnClient
,下面就来讲讲它们的具体使用吧。
今天涉及以下内容:
-
netty
jar 包导入 -
UnClientHandler
和UnClient
简介 -
UnClient
客户端在Activity
中的使用 - 需要注意的问题
4.1 Android上使用注意的点
4.2 问题排查参考 - 效果图和项目结构图
-
UnClientHandler
和UnClient
源码
先来波效果图
效果图.gif
客户端日志.png
服务端日志.png
一. netty jar 包导入
UnClient
是利用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下载
二. UnClientHandler 和 UnClient 简介
UnClientHandler
是UnClient
类的一个辅助类,主要是在UnClient
中使用,大家只做了解,而真正要使用的类是UnClient
客户端类。下面主要介绍下UnClient
类中的一些常用方法:
/**
* 初始化对象
*
* @param port 端口:0-65535
*/
public UnClient(int port)
/***
* 设置连接超时时间,未设置的话,默认时间为15000毫秒,即15秒。
*
* @param timeOut 超时时间
* @return
*/
public UnClient setTimeOut(long timeOut)
/***
*
*
* @param message 要发送的消息字符串
* @param charsetName 字符集,如 TcpConfig.UTF_8 或 TcpConfig.GBK等
* @param listener 接收服务端返回数据的监听
*/
public void sendMessage(String message,String charsetName,UnClientHandler.OnChannelListener listener)
三. UnClient 客户端在 Activity 中的使用
接下来讲讲UnClient 客户端
在Activity
中使用的代码:
/**
* Title:测试界面
* description:
* autor:pei
* created on 2020/6/2
*/
public class TempActivity extends AppCompatActivity implements View.OnClickListener{
private TextView mTv;
private Button mBtn1;
private UnClient mUnClient;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_temp);
//初始化控件
initView();
//初始化数据
initData();
//设置监听
setListener();
}
/**初始化控件**/
private void initView(){
mTv=findViewById(R.id.tv);
mBtn1=findViewById(R.id.btn1);
}
/**初始化数据**/
private void initData(){
mUnClient=new UnClient(1112)
//设置连接超时时间,未设置的话,默认时间为15000毫秒,即15秒。
.setTimeOut(15000);
}
/**设置监听**/
private void setListener(){
mBtn1.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1://测试1
LogUtil.i("=======测试=======");
test1();
break;
default:
break;
}
}
/**测试**/
private void test1(){
ToastUtil.shortShow("我是第一条测试");
mUnClient.sendMessage("我是王者啊", "UTF-8", new UnClientHandler.OnChannelListener() {
@Override
public void success(ChannelHandlerContext ctx, String result) {
LogUtil.i("=======接收服务端返回数据成功===result="+result);
//显示数据
runOnUiThread(new Runnable() {
@Override
public void run() {
mTv.setText(result);
}
});
}
@Override
public void failed(ChannelHandlerContext ctx, Throwable cause) {
LogUtil.i("=======接收服务端返回数据失败failed=========");
}
});
}
}
四.需要注意的问题
4.1 Android上使用注意的点
使用需要注意网络权限问题。你需要在AndroidManifast.xml
中加入以下网络权限:
<uses-permission android:name="android.permission.INTERNET" />
若有必要,你还需要在你Android
项目中加入android 6.0+
手动权限。
4.2 问题排查参考
- 通讯逻辑要放到子线程中执行,不可放到UI线程中执行
- 若
UnClient
客户端发出消息后未收到消息,可从以下方面着手排查问题:
1.udp客户端与服务端链接端口(port)不一致
2.udp服务端未开启
3.udp客户端未联网或未开联网权限
4.udp客户端与服务端不在一个网段
- 若出现数据接收乱码,请保持
UnClient
客户端和服务端字符集编码一致
五. 效果图和项目结构图
效果图.gif客户端日志.png
服务端日志.png
项目结构图.png
六. UnClientHandler 和 UnClient 源码
先贴netty
实现UDP客户端
的封装类UnClient
源码:
网友评论