Android

Netty实现UDP客户端

2021-11-12  本文已影响0人  奔跑的佩恩

前言

之前已经讲过了Netty实现的TCP客户端,大家有兴趣的话,可以参考以下文章:
Netty实现TCP客户端
然后,今天就给大家讲讲Netty实现UDP客户端吧,这里我封装了两个工具类:UnClientHandlerUnClient,下面就来讲讲它们的具体使用吧。

今天涉及以下内容:

  1. netty jar 包导入
  2. UnClientHandlerUnClient简介
  3. UnClient客户端在Activity中的使用
  4. 需要注意的问题
    4.1 Android上使用注意的点
    4.2 问题排查参考
  5. 效果图和项目结构图
  6. UnClientHandlerUnClient源码

先来波效果图


效果图.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 简介

UnClientHandlerUnClient类的一个辅助类,主要是在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 问题排查参考
1.udp客户端与服务端链接端口(port)不一致
2.udp服务端未开启
3.udp客户端未联网或未开联网权限
4.udp客户端与服务端不在一个网段

五. 效果图和项目结构图

效果图.gif
客户端日志.png
服务端日志.png
项目结构图.png

六. UnClientHandler 和 UnClient 源码

先贴netty实现UDP客户端的封装类UnClient 源码:

上一篇下一篇

猜你喜欢

热点阅读