要编写聊天使用UDP和MQTT协议的Android
问题描述:
我在Android的编程新,不知道如何与UDP和MQTT协议工作在Android设备要编写聊天使用UDP和MQTT协议的Android
我想建立的聊天机器人到一个应用程序编程房间内的Android设备连接到同一个Wi-Fi路由器。
但我不知道什么IP地址和端口我应该绑定到DatagramSocket和DatagramPacket。
我尝试了很多从网上的例子,但我不明白它将如何在Android中工作。
答
我发现代码在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网络通过其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);
}
,这将执行此作为
new SendUDP("Hello All Device").execute();
它的工作原理就像一个魅力后发送UDP消息!
谢谢@hardillb –