[英]Can't connect to server through socket android
我正在創建一個客戶端服務器應用程序,該應用程序僅通過套接字從java服務器發送和接收JSON。 因此,它通過Wi-Fi連接工作。 但是,當我使用移動數據連接時,我的應用無法連接到服務器。 錯誤:
java.net.SocketTimeoutException: failed to connect to /37.59.196.27 (port 8080) after 90000ms
這是我的代碼:
MultiClient.java
...
InetAddress addr = InetAddress.getByName("37.59.196.27");
ClientThread ct = new ClientThread(addr, map);
Thread.currentThread().sleep(100);
...
ClientThread.java
/*imports here*/
class ClientThread extends Thread {
private Socket socket;
private BufferedReader in;
private PrintWriter out;
private static int counter = 0;
private int id = counter++;
private static int threadcount = 0;
private static String IMEI = "";
private static String NAME = "";
static final int PORT = 8080;
public static int threadCount() {
return threadcount;
}
HashMap<String, String> inputMap;
private HashMap<String,String> returnMap;
public HashMap<String, String> getData(){
return returnMap;
}
public ClientThread(InetAddress addr, HashMap<String, String> inputMap) {
returnMap=new HashMap<String, String>();
this.inputMap=inputMap;
System.out.println("Making client " + id);
threadcount++;
try {
socket = new Socket(addr, PORT);
socket.setSoTimeout(0);
}
catch (IOException e) {
e.printStackTrace();
System.err.println(e.getMessage());
Log.i("socket", e.getMessage());
System.err.println("Socket failed");
}
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream())), true);
start();
}
catch (IOException e) {
try {
socket.close();
}
catch (IOException e2) {
System.err.println("Socket not closed");
}
}
}
public void run() {
try {
IMEI = inputMap.get("imei");
NAME = inputMap.get("name");
Log.i("ClientThread", "here");
JSONObject obj = new JSONObject();
obj.put("imei", IMEI);
obj.put("name", NAME);
obj.put("os", inputMap.get("os"));
obj.put("osVersion", inputMap.get("osVersion"));
out.println(obj);
String str = in.readLine();
//System.out.println(obj);
//SERVER ANSWER:
JSONParser parser = new JSONParser();
Object jobj = parser.parse(str);
JSONObject jsonObj = (JSONObject)jobj;
String text = jsonObj.get("text").toString();
Log.i("RESPONSE STRING","Image source: "+jsonObj.get("imagesrc")+"\nPrediction text: "+text);
// returnMap.put("imagesrc", jsonObj.get("imagesrc").toString());
// Log.i("text",text);
returnMap.put("text", text);
//System.out.println("Server: "+str);
out.println("END");
}
catch (IOException e) {
System.err.println("IO Exception");
}
catch(Exception e){
e.printStackTrace();
}
finally {
try {
socket.close();
}
catch (IOException e) {
System.err.println("Socket not closed");
}
threadcount--;
}
}
}
服務器看不到使用移動數據創建的連接,因此這不是服務器問題。
謝謝,抱歉我的英語!
該問題隱藏在我的固件中,因此重新安裝解決了該問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.