【问题标题】:Client cannot connect to the server socket - Android客户端无法连接到服务器套接字 - Android
【发布时间】:2014-05-21 11:56:37
【问题描述】:

我正在开发一个 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"/>

【问题讨论】:

  • 你能通过 telnet 连接到 10.0.2.2:7777 吗?如果您知道 serverAddress IP,则不需要使用 get ByName()。您可以使用新的 Socket("10.0.2.2",7777) 进行连接。
  • 我不能。我收到这条消息:“连接到 10.0.2.2...无法打开与主机的连接,在端口 7777:连接失败”

标签: java android sockets timeout serversocket


【解决方案1】:

终于解决了。我停止用模拟器吸吮。我有 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 才能连接到服务器。对我来说已经足够了,因为我想在本地网络上使用它。

【讨论】:

    猜你喜欢
    • 2013-12-05
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 2016-06-08
    • 2023-01-30
    • 1970-01-01
    相关资源
    最近更新 更多