簡體   English   中英

無法通過套接字Android連接到服務器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM