美文网首页Android
Android上实现UDP客户端

Android上实现UDP客户端

作者: 奔跑的佩恩 | 来源:发表于2020-06-06 11:50 被阅读0次

前言

在之前的文章中我们已经讲过了TCP通讯的实现,大家如果有兴趣的话,可以参考以下文章:
Android上实现TCP客户端
Android上实现TCP服务端
那么今天就让我们来了解下androidUDP客户端的实现吧。
UDP服务端的实现,大家可以参看以下文章:
Android上实现UDP服务端
这里我封装了一个udp客户端的封装类——UdpClient,下面对其使用进行讲解。
今天涉及以下内容:

  1. TcpUdp对比
  2. UdpClient主要方法介绍
  3. UdpClientActivity中的使用
  4. 效果图和项目结构图
  5. UdpClient源码

先来波效果图


客户端.gif
服务端.png

一. Tcp与 Udp 对比

TcpUdp作为两种不同的通讯方式。它们之间具备以下不同:

  1. Tcp通讯需要建立双向连接,而udp是不需要建立连接的
  2. Tcp传输数据以IO流的形式,udp是以数据报的模式。Tcp的优势在于传输的数据有序且稳定,不会丢失数据。udp传输的数据无序,并且不能保证数据的到达时间及完整性,可能出现丢包的情况。
  3. 在资源消耗上,tcp连接需要经过3次握手,断开也需要消耗资源,而udp则在资源消耗上相比较小

有一个很形象的例子来形容他们之间的区别。tcp就是打电话,必须打电话的人和接电话的人都在电话机旁,才能建立通话,而udp则是写信模式,只需要一方信写完寄出去就行了,不需要收信人立刻做出应答,但寄信不保证能准时完整的把消息送达,有可能出现延误或者寄信途中信件丢失,破损的情况,导致信息收不到或收不全。

二. UdpClient主要方法介绍

上面讲过了tcpudp的区别,那么下面就来讲讲udp客户端封装类UdpClient所具备的主要方法吧:

    /**
     * 初始化对象
     * 
     * @param ip 服务端ip
     * @param port 约定端口
     */
    public UdpClient(String ip,int port)

    /**
     * 发送消息
     *
     * @param message 字符串消息
     * @param charsetName 字符集,如  TcpConfig.UTF_8 或 TcpConfig.GBK,为null时采用编译器默认字符集
     */
    public void sendMessage(String message,String charsetName)

    /***
     * 接收消息
     *
     * @param charsetName 字符集,如  TcpConfig.UTF_8 或 TcpConfig.GBK,为null时采用编译器默认字符集
     * @return 收到的消息
     */
    public String receiveMessage(String charsetName)

    /**关闭客户端数据报文**/
    public void close()

三. UdpClient 在 Activity 中的使用

下面贴出UdpClientActivity中使用代码:

/**
 * Title:测试界面
 * description:
 * autor:pei
 * created on 2020/6/2
 */
public class TempActivity extends AppCompatActivity implements View.OnClickListener{

    private TextView mTv;
    private Button mBtn1;

    private UdpClient mUdpClient;

    @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(){
        //192.168.50.152
        mUdpClient=new UdpClient("192.168.9.107",12345);
    }

    /**设置监听**/
    private void setListener(){
        mBtn1.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
       switch (v.getId()) {
           case R.id.btn1://测试
               LogUtil.i("=======测试=======");

               test();
               break;
           default:
               break;
       }
    }

    /**测试**/
    private void test(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                String message="我是UDP客户端啊,你是UDP服务端吗?";
                mUdpClient.sendMessage(message, "UTF-8");
                String result = mUdpClient.receiveMessage("UTF-8");

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        LogUtil.i("=======我来了=====");
                        mTv.setText(result);
                    }
                });

                LogUtil.i("=====客户端收到结果===result=" + result);
            }
        }).start();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //关闭udp链接
        if(mUdpClient!=null){
            mUdpClient.close();
        }
    }
}

四. 效果图和项目结构图

由于篇幅原因,在下节我将讲述UDP服务端的封装使用实现,这里我贴出客户端及服务端运行效果图.

客户端.gif
服务端.png
项目结构图.png

五. UdpClient 源码
下面贴出UdpClient源码:

相关文章

网友评论

    本文标题:Android上实现UDP客户端

    本文链接:https://www.haomeiwen.com/subject/jzzqtktx.html