Android 使用UDP进行通讯(发送数据和接收数据)

简介: Android 使用UDP进行通讯(发送数据和接收数据)

Android 使用UDP进行通讯(发送数据和接收数据)

主要用到DatagramSocket和DatagramPacket 类;DatagramSocket使用的UDP连接,客户端不需要先连接数据,可以直接发送给指定服务端。;DatagramPacket 用来发送和接收数据;

/**
*
*
*/
public class Client2 {
    private static DatagramSocket client;
    /**
     * 连接的方法
     *
     * @param head     发送指令
     * @param iCallUdp 返回的接口数据
     */
    public static void main(String head, ICallUdp iCallUdp) {
        if (TextUtils.isEmpty(head)) {
            head = "$M";
        }
        iCallUdp.start();
        try {
            // 1,创建服务端+端口
            if (client != null) {
                client.close();
                client = null;
            }
            client = new DatagramSocket(null);
            client.setReuseAddress(true);
            //myPort 设置自己的端口号  用于相互通信
            client.bind(new InetSocketAddress(myPort));
            // 2,准备数据
            byte[] data = head.getBytes();
            // 3,打包(发送的地点及端口)
            //IP 连接的目标IP地址
            //port 连接目标的 端口号
            DatagramPacket packet = new DatagramPacket(data, data.length, new InetSocketAddress(IP, port));
            // 4,发送资源
            client.send(packet);
            //发送成功
//            iCallUdp.confirm();
            // 准备接收容器
            byte[] container = new byte[19];
            // 封装成包
            DatagramPacket packet2 = new DatagramPacket(container, container.length);
            // 接收数据,使用 DatagramSocket的实例的 receive( DatagramPacket ) 方法进行接收
            client.receive(packet2);
            // 分析数据、打印数据
            byte[] data2 = packet2.getData();
            System.out.println("-----------" + bytesToHex(data2));
            //回调传接收的数据
            iCallUdp.success(bytesToHex(data2));
            // 5,关闭资源
            client.close();
        } catch (Exception e) {
            System.out.println(e.getMessage() + "==" + e.toString());
            iCallUdp.failure(e.getMessage());
        }
    }
    /**
     * 将接收到byte数组转成String字符串
     *
     * @param bytes 接收的byte数组
     * @return string字符串
     */
    private static String bytesToHex(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte aByte : bytes) {
            String hex = Integer.toHexString(aByte & 0xFF);
            if (hex.length() < 2) {
                sb.append(0);
            }
            sb.append(hex);
        }
        return sb.toString();
    }
}
目录
相关文章
|
17天前
|
Java API 调度
Android系统 自定义开机广播,禁止后台服务,运行手动安装应用接收开机广播
Android系统 自定义开机广播,禁止后台服务,运行手动安装应用接收开机广播
40 0
|
17天前
|
消息中间件 网络协议 Java
Android 开发中实现数据传递:广播和Handler
Android 开发中实现数据传递:广播和Handler
16 1
|
17天前
|
安全 Android开发
Android 预置可卸载分区接收不到任何广播问题分析和解决
Android 预置可卸载分区接收不到任何广播问题分析和解决
28 0
|
1月前
|
存储 Python
Python网络编程基础(Socket编程) UDP 发送和接收数据
【4月更文挑战第10天】对于UDP客户端而言,发送数据是一个相对简单的过程。首先,你需要构建一个要发送的数据报,这通常是一个字节串(bytes)。然后,你可以调用socket对象的`sendto`方法,将数据报发送到指定的服务器地址和端口。
|
2天前
|
Java Linux API
统计android设备的网络数据使用量
统计android设备的网络数据使用量
12 0
|
17小时前
|
XML JSON API
转Android上基于JSON的数据交互应用
转Android上基于JSON的数据交互应用
|
19小时前
|
JSON Android开发 数据格式
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
|
24天前
|
Android开发 开发者
Android网络和数据交互: 请解释Android中的AsyncTask的作用。
Android&#39;s AsyncTask simplifies asynchronous tasks for brief background work, bridging UI and worker threads. It involves execute() for starting tasks, doInBackground() for background execution, publishProgress() for progress updates, and onPostExecute() for returning results to the main thread.
11 0
|
24天前
|
网络协议 安全 API
Android网络和数据交互: 什么是HTTP和HTTPS?在Android中如何进行网络请求?
HTTP和HTTPS是网络数据传输协议,HTTP基于TCP/IP,简单快速,HTTPS则是加密的HTTP,确保数据安全。在Android中,过去常用HttpURLConnection和HttpClient,但HttpClient自Android 6.0起被移除。现在推荐使用支持TLS、流式上传下载、超时配置等特性的HttpsURLConnection进行网络请求。
14 0
|
1月前
|
JSON 安全 Java
Android网络部分-----网络数据请求、解析
Android网络部分-----网络数据请求、解析
Android网络部分-----网络数据请求、解析