1

我的 PC 上有一个服务器程序,它正在运行并等待 Android 客户端。

我在我的 Android 代码中设置了这些:

mHost      = "127.168.1.1"; //or getLocalIpAddress()?
mPort      = 5000;
mSocket    = new Socket(mHost, mPort);

并在清单中拥有这些权限:

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

当我尝试连接到我的 PC 时,我得到了这个 logcat 输出:

10-08 19:18:40.970: E/ex closeInputOutput(8735): java.lang.NullPointerException
10-08 19:18:40.970: E/doInBackground Exception(8735):  java.net.ConnectException: failed to connect to /127.168.1.1 (port 5000): connect failed: ECONNREFUSED (Connection refused)

我有一个路由器,如何将我的 PC 连接到 127.168.1.1:5000?

编辑:

public static final String getLocalIpAddress() {
    try {
        for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
            NetworkInterface intf = en.nextElement();
            for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                InetAddress inetAddress = enumIpAddr.nextElement();
                String ip4 = inetAddress.getHostAddress().toString();
                if (!inetAddress.isLoopbackAddress() && InetAddressUtils.isIPv4Address(ip4)) {
                    Log.d(TAG, "getLocalIpAddress(): " + ip4);
                    return ip4;
                }
            }
        }
    }
    catch (Exception e) {
        Log.e(TAG, "ServerUtils: getLocalIpAddress(): " + e.getMessage());
    }
    return null;
}

这是我的新代码,这个返回 192.168.1.104,它不起作用。使用我的 ipconfig 我得到 192.168.1.102 (这是正确的。)那么在最后一个代码中出了什么问题?如何获得正确的本地 IP?

4

3 回答 3

3

默认情况下,127.168.1.1 在环回范围内,因此连接尝试可能不会离开您的 Android 设备。尝试将您的服务器放在 192.168.xx ip

http://www.tcpipguide.com/free/t_IPReservedPrivateandLoopbackAddresses-3.htm

于 2012-10-08T17:39:37.890 回答
2

在您的 LAN 中可能会有所不同,但通常地址 192.168.1.1 是路由器地址(不是主机地址)。

通过运行以下命令确认您的主机地址:

ipconfig

在命令提示符下。IPv4 地址是主机地址,网关地址是路由器地址。请务必在 PC 和设备上使用正确的地址。

注意:如果您需要更精确的帮助,您需要在 PC 和设备上发布代码的相关部分。

--已编辑--

IP地址就像一个家庭地址,每个设备都有自己的。因此,当您在 windows 机器上运行 ipconfig 时,您将获得 windows 机器的 IP 地址。当您调用getLocalIpAddress()设备时,您将获得设备 IP 地址。

如果要从设备连接到 PC,您需要:

  • 在 PC 上运行一个监听 5000 端口的程序。如果没有程序监听这个端口,任何连接到这个端口的尝试都会被拒绝。
  • 在设备上,您运行一个程序,该程序192.168.1.102通过端口连接到(pc IP 地址)5000
于 2012-10-08T17:38:18.570 回答
1

嗯,这就是防火墙的问题....转到路由器的防火墙或系统的防火墙...并将 5000 端口添加到例外列表中...入站和出站也是...。第二个问题似乎与您的 IP 地址有关。 .. 127 不是可用类... 它是环回测试(127.0.0.1 至 127.255.255.254 ...)将您的地址从 127 更改为 192.168.0.1 或 1.1 ...

于 2012-10-08T17:47:49.993 回答