【问题标题】:Trouble connecting a socket from android client app to server将套接字从 android 客户端应用程序连接到服务器时出现问题
【发布时间】:2011-11-19 13:38:30
【问题描述】:

我无法将我的 Android 手机的套接字连接到我的计算机上运行 netcat 侦听端口 (5555)。

我在我的 android 应用程序中运行的内容:

    try {
        Socket s = new Socket("My IP number here (not local IP)", 5555);
        DataOutputStream outToServer = new DataOutputStream(s.getOutputStream());
        outToServer.writeBytes("Hello!");
        s.close();
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

这是我用于 netcat 的行:nc -l 5555

我不确定我错过了什么.. 我已经转发了路由器上的端口并重新启动了路由器。在我的 android 应用程序中添加了对 Internet 的权限。 手机是3G连接的,我的电脑是宽带连接的。 我的防火墙中允许使用 netcat。

尝试连接时,我的应用程序中出现SocketTimeoutException 错误。

我猜路由器负责处理 LAN 中的哪台计算机将接收请求。

有人知道我错过了什么吗?

编辑:我想我可能已经找到了问题所在。我的路由器Virtual ServerPort forwarding 有两个选项。我不知道在 UDP/TCP 中将哪个设置为端口 5555。 据我了解,我应该使用Virtual Server 而不是端口转发?如果是这样,有人可以澄清两者之间的区别吗?

【问题讨论】:

  • 我同意@Brett Hale。在 s.close() 之前尝试 outToServer.flush()。您在哪一行得到异常?
  • 你是否在你的Server类中设置了一个ServerSocket对象来监听5555端口的请求?
  • @AlbertS:不用担心。 :) 是的,在手册页中它说“-p source_port:指定 nc 应该使用的源端口,受权限限制和可用性限制。结合使用此选项是错误的使用 -l 选项。",如果我在计算机上使用 telnet 进行连接,它可以工作; “telnet 127.0.0.1 5555” - 但由于我尝试在局域网之外进行远程连接,我猜有些东西没有通过必要的层传播..
  • @Zolomon 我明白了。这是一个关于虚拟服务器和端口转发的区别的页面:dlink.cc/knowledgebase/…

标签: java android sockets client


【解决方案1】:

我的电脑自上次配置后更改了本地 IP,所以我的 Virtual Server/Port Forwarding 规则不适用,所以我更新了它(从 192.168.0.199 -> 192.168.0.196)现在效果很好。

所以所有步骤都应用了:

  • 在您的路由器上为Virtual Server/Port Forwarding 设置规则。
  • 在您的路由器上为Inbound Filtering 设置规则,以防您希望只允许列入白名单的 IP 连接并传播到下一个安全层。
  • 如果您的路由器有任何其他防火墙设置,请创建规则以允许建立连接。
  • 在您的服务器/计算机上,允许防火墙中的端口或您正在运行的应用程序接收入站连接。
  • 利润!!!

【讨论】:

  • 很高兴您解决了这个问题。这只是一个更改的 IP 地址。也许下次最好分配与特定 MAC 地址相关的相同 IP 地址。可以在路由器的 LAN 部分、DHCP 设置中进行。我想你无法相信这个问题这么容易解决:-)
  • @AlbertS:感谢您的真诚帮助。 :)
猜你喜欢
  • 2011-03-16
  • 1970-01-01
  • 2016-12-21
  • 2021-03-31
  • 2014-02-27
  • 2021-07-29
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
相关资源
最近更新 更多