android基于UDP协议发送数据的demo
16lz
2021-01-23
最近在做一个基于TCP协议的项目,设备在对接第三方客户接口时,客户一个功能是基于UDP协议,这样设备还需要基于UDP协议完成数据发送。
故在此写了一个demo,demo分为两部分:
-
Android基于UDP发送数据;
-
编写一个PC端服务,服务接收android设备发送来的UDP数据;
Android端代码:
private InetAddress mAddress;
private DatagramSocket mSocket = null;
/**
* 发送给整个局域网,局域网网段192.168.0.X
*/
private String mBroadCastIp = "192.168.0.255";
/**
* 发送方和接收方需要端口一致
*/
private int mSendPort = 8888;
private byte[] mSendBuf;
public void sendUDPMessage(final String msg) {
// 初始化socket
try {
mSocket = new DatagramSocket();
} catch (SocketException e) {
e.printStackTrace();
}
try {
mAddress = InetAddress.getByName(mBroadCastIp);
} catch (UnknownHostException e) {
e.printStackTrace();
}
ThreadPoolManager.getInstance().startTaskThread(new Runnable() {
@Override
public void run() {
try {
mSendBuf = msg.getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
DatagramPacket recvPacket1 =
new DatagramPacket(mSendBuf, mSendBuf.length, mAddress, mSendPort);
try {
mSocket.send(recvPacket1);
mSocket.close();
Log.e(TAG, "sendUDPMessage msg:" + msg);
} catch (IOException e) {
e.printStackTrace();
}
}
}, "");
}
PC端代码:
public static void main(String[] args) throws SocketException, IOException {
//创建接收服务器,端口为8888
DatagramSocket socket = new DatagramSocket(8888);
//新建一个包,用来装接收的消息,括号内为此包的容量,即能装下的字节数
DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
//准备接收消息,并将消息存入包内,若接收不到消息服务器会一直开放,程序不会向下运行
while(true){
socket.receive(packet);
System.out.println(new String(packet.getData()).trim());
}
}
运行效果:
模拟器Android端每点击一次"发送udp数据"按钮,以udp广播形式发送一个毫秒时间戳字串数据包。PC端服务接收到会打印相应时间戳信息。
注意:
-
android设备端发送广播的ip设置要与实际网段一致,否则可能会导致PC端服务收不到数据;
-
android发送udp端口要与PC服务端口一致,否则PC端也不能收到数据。
小结:Android基于UDP发送数据使用java标准的api(java.net.*),android端以udp发送数据与PC上发送udp数据无实质区别。
ps:因项目中只要求设备端发送数据,服务端也不对设备发起的数据进行回应,故demo中未实行接收数据的验证。如要同时实现设备端接收udp数据,收发数据应该放在不同线程,以免造成阻塞。
demo代码地址:
https://github.com/TomcatXiong/AndroidUdpDemo
更多相关文章
- Android Intent 程序之间进行通信 传输数据
- 【阿里聚安全·安全周刊】一种秘密窃取数据的新型 Android 木马|
- 使用adb工具访问sqlite数据库
- android利用websocket协议与服务器通信
- Android 设置默认桌面,默认应用,辅助功能,电池优化,设备管理器,
- Ubuntu下使用adb和USB连接的方式进行android设备调试