2016-04-22 75 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。