1

目前我正在开发使用 Socket 与服务器通信的 android 移动客户端-服务器应用程序。当我在家中使用 WIFI 对其进行测试时,该应用程序按预期工作。但是一旦我开始在其他有活动 WIFI 的地方测试它,Socket 就无法与服务器建立连接。尽管我在清单中声明了 Internet 权限并且 WIFI 工作正常,但我得到“连接被拒绝”异常。这很奇怪,但是每当我用 Java 客户端测试 Socket 时,连接都会在任何有活动 WIFI 的地方成功建立。但是当我尝试在 Android 上做同样的事情时,我得到了“连接被拒绝”的异常。

错误发生在这里:

socket = new Socket(SERVERIP, SERVERPORT);

我在清单中有以下权限:

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

日志猫:

09-24 12:06:43.000: E/ClientSocket(21999): C: Connecting...
09-24 12:06:43.020: E/TCP(21999): C: Error
09-24 12:06:43.020: E/TCP(21999): java.net.ConnectException: /78.47.105.119:2012 - Connection refused
09-24 12:06:43.020: E/TCP(21999):   at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:207)
09-24 12:06:43.020: E/TCP(21999):   at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
09-24 12:06:43.020: E/TCP(21999):   at java.net.Socket.startupSocket(Socket.java:724)
09-24 12:06:43.020: E/TCP(21999):   at java.net.Socket.tryAllAddresses(Socket.java:150)
09-24 12:06:43.020: E/TCP(21999):   at java.net.Socket.<init>(Socket.java:209)
09-24 12:06:43.020: E/TCP(21999):   at java.net.Socket.<init>(Socket.java:176)

也许我应该设置清单中声明的​​某种特殊或额外权限?防火墙会导致这个问题吗?有什么办法可以解决这个问题?

4

2 回答 2

2

你在用模拟器吗?有时,您需要重定向端口 http://developer.android.com/guide/developing/tools/emulator.html#redirections

尝试使用您的设备测试您的代码(您可以将其用作 Eclipse 的“模拟器”)

不要忘记,根据 Emulator Networking,如果您在本地开发服务器,则应使用 IP 10.0.2.2 而不是 localhost/127.0.0.1。

于 2013-09-24T11:03:50.860 回答
0

我遇到了类似的问题。它显示了相同的 LogCat。我发现这是因为我在两个系统上使用了不同的 IP 地址。我在 localhost(或 127.0.0.1)上启动了服务器,并尝试使用客户端上的计算机 IP 地址(192.168.1.6)连接到它。当我将两个 IP 地址都设置为 192.168.1.6 时,它起作用了。

于 2013-11-15T08:14:37.133 回答