我在Android的編程新,不知道如何與UDP和MQTT協議工作在Android設備要編寫聊天使用UDP和MQTT協議的Android
我想建立的聊天機器人到一個應用程序編程房間內的Android設備連接到同一個Wi-Fi路由器。
但我不知道什麼IP地址和端口我應該綁定到DatagramSocket和DatagramPacket。
我嘗試了很多從網上的例子,但我不明白它將如何在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 –