[英]Sending a string between two devices through a socket using TCP when server is on a private network
當每個應用程序在不同的設備上並且接收設備在專用Wifi網絡上時,我試圖將一個Android應用程序中的字符串(以及以后的圖像)發送到另一個Android應用程序。 (服務器正在偵聽專用IP:192.xx.xx.xx)。 當服務器連接到公共IP而非我想要的私有IP時,此代碼有效。
代碼“ 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。
這是偵聽端口連接的其他Android應用程序代碼(在服務器上),然后它應該從“ SendString”接收字符串。
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.
當我的服務器連接到專用網絡時,有人知道如何使此連接正常工作嗎?
在此代碼行中:
Socket socket = new Socket("192.168.0.26", 1755);
你應該來代替私有IP 192.168.0.26
的公網IP,你可以找到像一些網絡服務的一個公共IP進入這個
另外,您還需要驗證防火牆或路由器配置中的1755端口是否已打開,以打開傳入TCP連接。
希望它幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.