Die beste Antwort, die Sie erhalten können, ist möglicherweise die man von Mano:
ich das gleiche Problem aufgetreten. Da beide Geräte die IP-Adresse des Besitzers der Gruppe kennen, ist es bereits möglich, eine Nachricht an die Gruppe Eigentümer zu senden. Die erste Nachricht, die Sie senden, kann die IP-Adresse des anderen Geräts enthalten; von da an ist eine bidirektionale Kommunikation möglich.
Hier ist, wie ich es implementiert habe. Wenn ich einen Client über WiFi Direct mit dem Gruppenbesitzer verbinde, erhalte ich die IP-Adresse des Gruppeninhabers und sende über einen Socket eine Nachricht an den Gruppenbesitzer.Etwas wie:
Socket socket = new Socket();
socket.setReuseAddress(true);
socket.connect((new InetSocketAddress(mIP, mPort)), SOCKET_TIMEOUT);
OutputStream os = socket.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(new String("BROFIST");
oos.close();
os.close();
socket.close();
Sie wissen bereits mIP (die IP-Adresse der Gruppe Eigentümer), und nur zu entscheiden, haben eine mPort und erhalten die Verbindung auf dem Gruppeneigentümer wie folgt aus:
Socket serverSocket = new ServerSocket(mPort);
serverSocket.setReuseAddress(true);
Socket client = serverSocket.accept();
ObjectInputStream objectInputStream = new ObjectInputStream(client.getInputStream());
Object object = objectInputStream.readObject();
if (object.getClass().equals(String.class) && ((String) object).equals("BROFIST")) {
Log.d(TAG, "Client IP address: "+client.getInetAddress());
}
Dies ist der eigentliche Code, den ich verwende. Ich werde diese Nachricht durch einige nützliche Informationen ersetzen, z. B. ein Nachrichtenobjekt mit dem MAC des Absenders, das verwendet werden kann, um MAC-IP-Beziehungen zu kennen, da WifiP2pDevice nur MAC und InetAddress weiß jemand, ob es ein Weg, um den MAC aus einem InetAddress Objekt zu bekommen?)
Warnung: Dieser Code gibt die erste IP-Adresse zurück, die nicht die Loopback ist, wenn Sie mit einem WLAN-Zugangspunkt sowie WLAN direkt verbunden sind, ist es möglich, dass es die Adresse des Access Points zurückgibt. Von dem, was ich gesehen habe, ist das Netzwerk von Wifi Direct verwendet 192.168.49.0 Bereich, so sollten Sie überprüfen, ob es in diesem Bereich oder besser noch die Host-Adresse des Besitzers zu vergleichen, um sicherzustellen, dass sie im selben Netzwerk sind. – triggs
Aus dem letzten Forum Post habe ich herausgefunden, dass es möglich ist, Client-IP vom Master (Gruppenbesitzer) zu bekommen, wenn ich eine TCP-Verbindung erstellen kann. Aber für UDP-Verbindung, wie wird es möglich, Client-IP-Adresse zu bekommen? Vielen Dank. – user1850484