2016-04-22 68 views
0

我试图从一个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. 

有谁知道如何使这个连接工作时,我的服务器连接到专用网络?

+1

如果设备不一样的网络,不可能通过局域网IP通信上(即192.168 ....) – pay

+0

您是否尝试设置的InetAddress,而不是回落到默认的?请参阅:http://developer.android.com/reference/java/net/ServerSocket.html#ServerSocket%28int,%20int,%20java.net.InetAddress%29。 – jgitter

回答

0

在这行代码:

Socket socket = new Socket("192.168.0.26", 1755); 

你应该来代替私有IP 192.168.0.26一个公网IP,你可以找到进入的一些网络服务的一个公共IP像this

你也需要验证1755端口对于防火墙或路由器配置中的传入TCP连接是开放的。

希望它hepls。