我试图从一个Android应用程序发送一个字符串(后来也图像),到其他Android应用程序时,每个应用程序是在上发送两个设备之间的串通过套接字不同的设备和接收设备在私人无线网络上。(服务器正在侦听专用IP:192.xx.xx.xx)。此代码在服务器连接到公共IP时起作用,但不是像我想要的那样是私有的。当TCP服务器专用网络
代码“SendString”是一个手机上的一个Android应用程序。代码“AppListener”在另一个电话上(这是服务器)。当AppListener连接到一个公共Wifi IP地址时,我可以将字符串从SendString发送到AppListener。
“SendString”,这发出了一个字符串“的AppListener”:
(即我送“的applicationName”的字符串获得通过,以“SendString”从项目的不同的活动)
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;
}
}
“SendString”代码卡在打印语句“尝试发送字符串”,并且无法在打印语句后立即连接到另一个手机的IP。
这里是监听的端口连接,然后它应接收来自“SendString”字符串的其他Android应用代码(在服务器上)。
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;
}
}
的问题是,它似乎被卡住在该行
Socket clientSocket = socket.accept(); //This is blocking. It will wait.
有谁知道如何使这个连接工作时,我的服务器连接到专用网络?
如果设备不一样的网络,不可能通过局域网IP通信上(即192.168 ....) – pay
您是否尝试设置的InetAddress,而不是回落到默认的?请参阅:http://developer.android.com/reference/java/net/ServerSocket.html#ServerSocket%28int,%20int,%20java.net.InetAddress%29。 – jgitter