ServerSocket的accept()在Android上无法接受连接

4

我正在尝试在我的安卓手机上设置ServerSocket,并且从我的电脑发送char、int或其他任何东西。

手机上的代码创建了一个ServerSocket,然后阻塞等待连接:

ServerSocket serverSocket = ServerSocketFactory.getDefault()
                            .createServerSocket(4444);
Log.d("HostThread", "ServerSocket created:"+serverSocket
                             .getInetAddress().getHostAddress());
Socket socket = serverSocket.accept();

日志显示:“10-27 11:41:43.437: DEBUG/HostThread(23957): ServerSocket created:0.0.0.0”。

我的电脑上运行的一段简单代码尝试连接手机:

Socket s = new Socket("xx.xx.xx.xx", 4444);

基本上,手机正在接受连接请求,但电脑无法连接。 xx.xx.xx.xx 是我通过编程获取的手机公共IP地址(并且与 whatismyip.com 上检查的匹配)。

我已在手机上设置了 INTERNET 权限。 我也能够反向完成此操作(在PC上使用 ServerSocket,在手机上使用客户端)。

您有任何想法我做错了什么吗?

1个回答

3

您是在模拟器上运行还是在真实设备上运行?据我所知,大多数运营商网络都进行了NAT处理,并且不允许连接到设备。如果您正在真实设备上运行,则可能会遇到此问题。

但是,如果您上面的代码只是一个示例 - 实际上并未使用端口4444,则还应该知道,除非您具有root权限,否则大多数Unix系统(包括Android)不会允许在低于1024的端口上进行传入连接。


我正在使用真实设备,并连接到我的移动网络。您是说不可能允许这样的传入连接吗? - lukeo05
@lukeo05 这取决于您的网络运营商 :) 请咨询您的运营商,他们应该知道! - Björn
我认为通过Wifi是可能的吧?如果网络运营商说不行,那似乎是我的唯一选择! - lukeo05
或者设计您的网络使用方式,使手机的连接是出站的,可能是到中间服务器而不是最终客户端电脑。此外,在USB连接的情况下,您可以在手机上启用USB调试,并使用adb端口转发从电脑连接到手机。 - Chris Stratton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接