Ich versuche, eine Zeichenfolge (und später auch ein Bild) von einer Android App an eine andere Android App zu senden, wenn jede App auf einem ist anderes Gerät und das Empfangsgerät ist auf einem privaten Wifi-Netzwerk. (Der Server wartet auf eine private IP: 192.xx.xx.xx). Dieser Code funktioniert, wenn der Server mit einer öffentlichen IP verbunden ist, aber nicht privat, wie ich möchte.Senden einer Zeichenfolge zwischen zwei Geräten über einen Socket mithilfe von TCP, wenn Server in einem privaten Netzwerk ist
Der Code "SendString" ist eine Android-App auf einem Telefon. Und der Code "AppListener" ist auf dem anderen Telefon (das ist der Server). Ich kann die Zeichenfolge von SendString an AppListener senden, wenn AppListener mit einer öffentlichen Wifi-IP-Adresse verbunden ist.
„Sendstring“, die eine Zeichenfolge „AppListener“ sendet:
(die Zeichenfolge, die ich „application“ sende geleitet wird immer auf „Sendstring“ aus einer anderen Aktivität im Projekt)
public class SendString extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
Log.d("tag_name", "Entered AsyncTask");
String applicationName = params[0];
// SEND APPLICATION NAME AND ICON TO OTHER APP
try {
Log.d("tag_name", "TRY TO SEND STRING");
Socket socket = new Socket("192.168.0.26", 1755);
DataOutputStream DOS = new DataOutputStream(socket.getOutputStream());
DOS.writeUTF(applicationName);
Log.d("tag_name", "Application Name Sent!");
socket.close();
}
catch (Exception e){
Log.d("tag_name", "Did not send string");
}
return null;
}
}
der „Sendstring“ Code wird an der print-Anweisung stecken zu bleiben „Try String senden“, und es ist auf die IP des anderen Telefons einer Verbindung direkt nach dieser Print-Anweisung nicht in der Lage.
Hier ist der andere Android-App-Code (auf dem Server), der auf eine Portverbindung wartet, und dann sollte er die Zeichenfolge von "SendString" erhalten.
public class AppListener extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... uri) {
String msg_received = null;
System.out.println("LISTENING FOR LAST INSTALLED APP");
try {
System.out.println("TRY");
ServerSocket socket = new ServerSocket(1755);
System.out.println("Connect to Socket and listening");
Socket clientSocket = socket.accept(); //This is blocking. It will wait.
System.out.println("This should print after connection");
DataInputStream DIS = new DataInputStream(clientSocket.getInputStream());
msg_received = DIS.readUTF();
System.out.println("Message from server" + msg_received);
clientSocket.close();
socket.close();
} catch (Exception e) {
System.out.println("Did not connect to SendString");
}
System.out.println("Return Statement is Reached");
return msg_received;
}
}
Das Problem ist, dass es scheint, an der Linie
Socket clientSocket = socket.accept(); //This is blocking. It will wait.
Hat jemand geklebt wird immer wissen, wie diese Verbindung Arbeit machen, wenn mein Server mit einem privaten Netzwerk verbunden ist?
Wenn sich die Geräte nicht im selben Netzwerk befinden, ist es nicht möglich, über eine lokale IP zu kommunizieren (d. H. 192.168 ....) – pay
Haben Sie versucht, die INetAddress festzulegen, anstatt auf den Standard zurückzufallen? Siehe: http://developer.android.com/reference/java/net/ServerSocket.html#ServerSocket%28int,%20int,%20java.net.InetAddress%29. – jgitter