最是人间留不住,朱颜辞镜花辞树。这篇文章主要讲述在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 = https://www.songbingjia.com/android/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 somehowint 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协议编写聊天编程】它就像一个魅力!
推荐阅读
- 如何找到互联网连接类型是否通过java代码Wifi或LAN连接不与android
- 从.Net到vb6的Web服务的DLL - 如何设置app.config
- Android模拟器错误(std :: bad_alloc)
- 无法在Android Studio AVD Manager中启用“快照”并保存
- 如何在WebSphere中监视和识别性能问题()
- 6个对WebSphere/中间件管理员有用的工具
- WebSphere Application Server 8.5.5有哪些新功能()
- 如何在Linux中下载并安装WebSphere 9 ND()
- 如何在8.5.5中将IBM HTTP Server与WebSphere集成()