【问题标题】:ServerSocket is using ip /::ServerSocket 正在使用 ip /::
【发布时间】:2015-02-06 09:12:28
【问题描述】:

我正在为 android 制作一个聊天应用程序,目前正在使用 2 个模拟器和一部通过 USB 连接的手机进行测试。 在过去的 24 小时内,我几乎无法获得连接到 ServerSocket 的 Socket。每个主机都使用一个 ServerSocket,以便通过它们的客户端 Socket 监听其他主机的“对话”。

对于这两个模拟器,打印出以下 2 行代码: The server socket is using ip: /::

serverSocket = new ServerSocket(portNo);
Log.i("MY_TAG", "The server socket is using ip: " + serverSocket.getInetAddress() );

使用以下代码行,我得到一个 ConnectionException 说它无法连接到指定的 ip 和端口并且连接超时:

socket = new Socket(addr, portNo);

我获取 ip 的方式是大约每 20 秒查询一次服务器,在 php 脚本中,我使用$_SERVER['REMOTE_ADDR'],它确实返回了我的 ip 地址。

当使用手机向模拟器发送消息时,我得到一个稍微不同的错误。我得到了一个 ConnectionException 就像使用模拟器一样,除了它还说“连接被拒绝”。

从模拟器向手机发送消息时,由于超时,我收到了 ConnectionException。

手机的 ServerSocket 正在使用 ip 0.0.0.0,我知道这很好,因为这意味着它只是在侦听所有接口。

在所有情况下,服务器套接字的 accept() 方法永远不会返回。

使用 netstat -an(我使用 Windows 作为我的操作系统),我没有看到输出中列出的我的 ServerSockets 应该侦听的任何端口。

使用 telnet,我在模拟器上尝试时收到连接被拒绝消息(使用 php 的 $_SERVER['REMOTE_ADDR'] 获取 ip)。
在手机的 ip 和侦听端口上使用 telnet 时,我得到连接超时。

也就是说,请帮我弄清楚如何连接这些套接字。

【问题讨论】:

  • 您的网络服务正在运行吗?
  • 是的。我可以看到我的数据库中每个用户的 IP 地址和端口都得到了更新。大约每 20 秒,一个用户用他们的 ip 和端口更新这个数据库,同时检索他们所有朋友的 ip 和端口。
  • Each host is using a ServerSocket in order to listen to other hosts "talk" via their client Sockets.。对不起,我不明白你的设置。什么是'主机'。使用多个 serversocket 对我来说是个坏主意。你为什么需要那个?重新思考您的设计。
  • 在这种情况下,主机是安卓手机或平板电脑。假设我有 2 部手机。两部手机都创建了自己的 ServerSocket。无论哪个先向另一部手机发送消息,都会创建一个普通的 Socket(这是一个客户端套接字),它连接到对方的 ServerSocket。 ServerSocket 接受返回一个代表 tcp 连接和 bam 的套接字,现在它们可以相互通信(无论如何它们应该能够)。设计很简单。

标签: java php android sockets serversocket


【解决方案1】:

简单的答案是我试图做的事情是不可能的(至少在没有跳过一些障碍的情况下是不可能的)。问题是两台主机都在 NAT 路由器后面。 NAT 路由器的工作方式是,当传入消息到达它们时,它们会查看消息中的端口号,然后将其转换为与位于其后面的本地网络中的某个主机相对应的内部 IP 和端口号。这是使用称为 NAT 转换表的东西完成的。我的设计的问题是,对于从世界到 NAT 的传入消息,我正在向 NAT 提供内部端口号,而当我真的应该向它提供任何端口号时,NAT 分配给主机的内部端口的端口号在发送出去时. 这是一张描述我在说什么的图片(取自 UCSD 的一位了不起的网络教授 Alex C. Snoeren 的演讲幻灯片):

我的解决方案是重新设计我正在做的事情,让一个 ServerSocket 一直监听某个 webhost 上的新连接。

【讨论】:

    猜你喜欢
    • 2017-07-25
    • 1970-01-01
    • 2015-01-04
    • 2013-02-05
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2011-06-27
    • 2011-11-23
    相关资源
    最近更新 更多