2016-07-28 15 views
-1

: Ich bin in Android Programmierung und weiß nicht, wie bei UDP und MQTT Protokoll in Android-Gerätzu schreiben Chat-Programmierung mit UDP und MQTT Protokoll in Android

ich für den Chat android eine Anwendung erstellen will arbeiten zu Android-Gerät im Zimmer mit demselben Wi-Fi-Router verbunden.

Aber ich weiß nicht, welche IP-Adresse und Port ich an DatagramSocket und DatagramPacket binden sollte.

Ich habe viele Beispiele aus dem Internet versucht, aber ich habe nicht verstanden, wie es in Android funktioniert.

Antwort

2

MQTT TCP erfordert, ist es ein zustandsbehaftete Protokoll, können Sie es nicht mit UDP implementieren

Es gibt ein ähnliches Protokoll namens MQTT-SN, die mit einem zustandsloses Protokoll wie UDP implementiert werden kann.

Aber diese beiden sind immer noch zu einem Broker verlangen läuft irgendwo die Übermittlung von Nachrichten an Abonnenten zu bestimmten Themen

+0

Vielen Dank @hardillb –

1

I-Code-Nachricht zu senden, auf dem UDP-Protokoll, das wie unten funktioniert gefunden zu koordinieren.

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); 
    } 
} 

und unterhalb Funktion für Broadcast-IP-Adresse des Geräts in dem LAN-Netzwerk verbunden ist, durch die das Abrufen alle anderen Geräte in dem LAN diese Nachricht empfangen wird.

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); 
} 

und dies wird als

new SendUDP("Hello All Device").execute(); 

Es wirkt wie ein Zauber nach der Ausführung dieses UDP-Nachricht senden!