基于Android的UDP自动发现(接收与发送)

本文探讨了TCP与UDP的区别,并重点讲解了在Android中如何实现UDP的自动发现功能。发送方需要获取IP和自定义端口,而接收方设定相同端口即可开始阻塞式接收。注意接收操作不应在主线程中执行以防止ANR,且接收与发送应分别在不同设备上进行。提供相关代码示例。
摘要由CSDN通过智能技术生成

TCP和UDP的区别:

TCP(Transimission Control Protocol)即 传输控制协议:是面向连接的协议, 强调稳定可靠的连接,建立连接“三次握手”,断开连接需要“四次分手”,现常用于网络间视频与语音通话,及相应的网络间可靠的信息流通。

UDP(User Datagram Protocol)即 用户数据报协议:是面向报文的协议,两端无需建立连接即可传输数据,速度和效率都是TCP所不能比拟的,常用于局域网内数据互通,缓存读取,游戏及程序内高精度文件传输,NAT穿透等。


UDP在Android中的应用:

两端若需要建立UDP连接,

对于发送方:需要获取当前网络的host IP及自定的端口(建议大于1024)。

对于接收方:需要设定UDP连接的端口(与发送方端口保持一致),即可自动接收消息,其中该接收过程是阻塞式的,也就是说它一直在接收,当接收到了才会进行下一步(若接收到消息后还想继续接收,这时候需要把socket关闭,再能重复进行接收动作)

注意事项:由于接收动作是阻塞式的,因此不能放在主线程里(ANR),需要新建一个线程完成该操作。同时接收和发送两个动作不能放在同一个设备上(因为端口一致会导致冲突),建议两台设备或虚拟机进行调试。


代码如下:

(接收线程)


Android 中使用 UDP 协议进行数据的接收发送可以通过 DatagramSocket 类来实现。 UDP 数据发送: ```java try { // 创建 DatagramSocket 对象 DatagramSocket datagramSocket = new DatagramSocket(); // 待发送的数据 String data = "Hello, UDP!"; byte[] sendData = data.getBytes(); // 创建一个 InetAddress 对象,表示发送目的地的 IP 地址 InetAddress ipAddress = InetAddress.getByName("192.168.1.100"); // 创建一个 DatagramPacket 对象,表示待发送的数据包 DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, ipAddress, 12345); // 发送数据 datagramSocket.send(sendPacket); // 关闭 DatagramSocket datagramSocket.close(); } catch (Exception e) { e.printStackTrace(); } ``` UDP 数据接收: ```java try { // 创建 DatagramSocket 对象,并指定接收的端口号 DatagramSocket datagramSocket = new DatagramSocket(12345); // 创建一个空的 DatagramPacket 对象,用于接收数据 byte[] receiveData = new byte[1024]; DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); // 接收数据 datagramSocket.receive(receivePacket); // 处理接收到的数据 String data = new String(receivePacket.getData(), 0, receivePacket.getLength()); Log.d("UDP", "Received: " + data); // 关闭 DatagramSocket datagramSocket.close(); } catch (Exception e) { e.printStackTrace(); } ``` 需要注意的是,UDP 是无连接的协议,因此发送接收的数据包都需要指定目的地的 IP 地址和端口号。此外,UDP 协议也没有可靠性保证,因此需要进行数据的校验和处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值