簡體   English   中英

客戶端無法連接到服務器套接字-Android

[英]Client cannot connect to the server socket - Android

我正在開發一個Android應用程序。 有一個設備作為服務器。 客戶端設備可以連接到服務器設備。 我想通過局域網來做到這一點。 我不確定這是最好的方法,但是我開始進行基於套接字的通信。

這是我的服務器線程:

@Override
public void run() {
    Socket socket = null;
    try {
        serverSocket = new ServerSocket(7777);
        while (!Thread.currentThread().isInterrupted()) {
            try {
                socket = serverSocket.accept();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我還有另一個話題可以交流...


現在,這是我的客戶端線程:

    public void run() {
        try {
            InetAddress serverAddress = InetAddress.getByName("10.0.2.2");
            socket = new Socket(serverAddress, 7777);
            writer = new PrintWriter(new BufferedWriter(
                    new OutputStreamWriter(socket.getOutputStream())), true);
            writer.println("Hello!");
            writer.flush();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

問題是客戶端嘗試連接到服務器時連接將超時。


編輯:權限:

<uses-permission 
    android:name="android.permission.INTERNET"/>    
<uses-permission 
    android:name="android.permission.ACCESS_NETWORK_STATE"/>

終於我解決了。 我停止使用Emulator進行吮吸。 我有2個Android設備。 我向服務器添加了以下代碼:

public static String getIPAddress() {
    try {
        List<NetworkInterface> interfaces = Collections.list(
                NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface networkInterface : interfaces) {
            List<InetAddress> addresses = Collections.list(
                    networkInterface.getInetAddresses());
            for (InetAddress inetAddress : addresses) {
                if (!inetAddress.isLoopbackAddress()) {
                    String sAddress = inetAddress.getHostAddress().toUpperCase();
                    if (InetAddressUtils.isIPv4Address(sAddress)) {
                        return sAddress;
                    } else {
                        int delim = sAddress.indexOf('%');
                        return delim < 0 ? sAddress : sAddress.substring(0,
                                delim);
                    }
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "";
}

現在,我可以獲取服務器地址,如下所示:192.168.1.X。 我將其放在服務器設備上的TextView中,客戶端必須輸入此ip才能連接到服務器。 對我來說就足夠了,因為我想在本地網絡上使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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