在Android中使用UDP和MQTT协议编写聊天编程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Android中使用UDP和MQTT协议编写聊天编程相关的知识,希望对你有一定的参考价值。
我是android编程的新手,不知道如何在Android设备中使用UDP和MQTT协议
我想在连接到同一Wi-Fi路由器的房间内建立一个聊天android到Android设备的应用程序。
但我不知道我应该绑定到DatagramSocket和DatagramPacket的IP地址和端口。
我在网上尝试了很多例子,但我不明白它在android中是如何工作的。
答案
MQTT需要TCP,它是一个有状态协议,你不能用UDP实现它
有一个名为MQTT-SN的类似协议,可以使用像UDP这样的无状态协议来实现。
但是这两者仍然需要在某个地方运行的代理来协调向给定主题的订阅者传递消息
另一答案
我找到了在UDP协议上发送消息的代码,其工作原理如下。
public class SendUDP extends AsyncTask<Void, Void, String> {
String message;
public SendUDP(String message) {
this.message = message;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(Void[] params) {
try {
DatagramSocket socket = new DatagramSocket(13001);
byte[] senddata = new byte[message.length()];
senddata = message.getBytes();
InetSocketAddress server_addr;
DatagramPacket packet;
server_addr = new InetSocketAddress(getBroadcastAddress(getApplicationContext()).getHostAddress(), 13001);
packet = new DatagramPacket(senddata, senddata.length, server_addr);
socket.setReuseAddress(true);
socket.setBroadcast(true);
socket.send(packet);
Log.e("Packet", "Sent");
socket.disconnect();
socket.close();
} catch (SocketException s) {
Log.e("Exception", "->" + s.getLocalizedMessage());
} catch (IOException e) {
Log.e("Exception", "->" + e.getLocalizedMessage());
}
return null;
}
@Override
protected void onPostExecute(String text) {
super.onPostExecute(text);
}
}
以下功能用于获取LAN网络中连接的设备的广播IP地址,LAN中的所有其他设备将通过该IP地址接收此消息。
public static InetAddress getBroadcastAddress(Context context) throws IOException {
WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
DhcpInfo dhcp = wifi.getDhcpInfo();
// handle null somehow
int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
byte[] quads = new byte[4];
for (int k = 0; k < 4; k++)
quads[k] = (byte) (broadcast >> (k * 8));
return InetAddress.getByAddress(quads);
}
这将在执行此操作后发送UDP消息
new SendUDP("Hello All Device").execute();
它就像一个魅力!
以上是关于在Android中使用UDP和MQTT协议编写聊天编程的主要内容,如果未能解决你的问题,请参考以下文章
IP MODEM远程测控油田工业级DTU数据传输 TCP/UDP/MODEM/MQTT模式协议
USBRS485串口UDP转MQTT TCP http json网络通信协议对接定制开发