Flutter 发送UDP广播@TOC
在Android中UDP广播是用DatagramSocket DatagramSocket.bind(port) DatagramSocket.bind(new InetSocketAddress(8888)); 绑定端口 其实也是在监听这个端口的数据 有数据到来,用DatagramPacket类来接收 byte[] arr = new byte[1024]; DatagramPacket packet = new DatagramPacket(arr, arr.length); 接收的是一个数组,和数组的长度 DatagramSocket.receive(packet ); 从包中将数据取出 byte[] arr1 = packet.getData(); String data = new String(arr1,0,packet.getLength()); data 就是我们接收到的数据。 发送也是一样的,接收的是字节数组,发送的也是字节数据 DatagramSocket.send(packet); 一般是用来做一些简单是数据传输,比如发现当前局域网的设备,获取ip地址进行长连接。
那么在Flutter中是怎么用的呢? RawDatagramSocket是不是很像Android中的类DatagramSocket, 用法也是很像的
RawDatagramSocket.bind(InternetAddress.anyIPv4, 8888).then((RawDatagramSocket udpSocket) {
udpSocket.broadcastEnabled = true;
udpSocket.listen((e) {
Datagram dg = udpSocket.receive();
if (dg != null) {
print("received ${String.fromCharCodes(dg.data)}");
}
});
List<int> data =utf8.encode('TEST');
udpSocket.send(data, DESTINATION_ADDRESS, 8888);
print("send ${udpSocket.address.address} ${udpSocket.port}");
});
因为这个是异步的,所以有then,相信大家也都能看的懂了。 记住在页面关闭的时候要及时close回收资源。
|