【问题标题】:ServerSocket accept() not accepting connections on AndroidServerSocket accept() 不接受 Android 上的连接
【发布时间】:2010-10-27 11:00:17
【问题描述】:

我正在尝试在我的 Android 手机上的 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”)

在我的 PC 上运行的一段简单代码尝试连接到手机:

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

...(如果创建了套接字,再加上一些位。但我不明白这一点,所以省略了!)

基本上,手机正在接受,而计算机没有连接。 xx.xx.xx.xx 是我以编程方式获得的电话的公共 IP(它与 whatismyip.com 上的检查相匹配)。

我已经在手机上设置了 INTERNET 权限。我也可以反向执行此操作(PC 上的 ServerSocket,手机上的客户端)。

任何想法我哪里出错了?

【问题讨论】:

    标签: java android client-server


    【解决方案1】:

    您是在模拟器还是在真实设备上运行它?据我了解,大多数运营商网络都是经过 NAT 的,并且不允许连接到设备。如果您在真实设备上运行,这可能是您的问题。

    但是,如果您上面的代码只是一个示例 - 而且您实际上不使用端口 4444,您还应该注意大多数 unix 系统(包括 Android)不允许在低于 1024 的端口上进行传入连接,除非你有 root 权限。

    【讨论】:

    • 我在真实设备上运行,连接到我的移动网络。你是说不可能允许这样的传入连接?
    • @lukeo05 不可能,取决于您的网络运营商 :) 询问您的运营商,他们应该知道!
    • 我认为可以通过 Wifi 实现?如果网络运营商说不,那似乎是我唯一的选择!
    • 或者将您的网络使用设计为另一个方向,因此来自电话的连接是出站的,可能是到中间服务器而不是最终的客户端 PC。同样对于usb连接的情况,您可以在手机上启用usb调试并使用adb端口转发从pc连接到手机。
    猜你喜欢
    • 1970-01-01
    • 2013-02-23
    • 2015-01-18
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多