【问题标题】:Client-Server Chat application JAVA客户端-服务器聊天应用程序 JAVA
【发布时间】:2015-04-19 05:40:55
【问题描述】:

我有一个简单的 java 编写的客户端和服务器聊天应用程序(带有套接字)。在同一网络/计算机上运行时,它工作正常。但是,当我尝试从不同的网络运行客户端时,它无法连接。我尝试使用服务器的公共 IP 地址将客户端连接到服务器,但没有运气。我如何能够从不同的网络连接到服务器应用程序?任何帮助将不胜感激。

【问题讨论】:

    标签: java sockets chat


    【解决方案1】:

    听起来您的防火墙问题比应用程序问题更多。不要尝试连接 Java 客户端,而是先尝试从同一台计算机通过 Telnet 连接到服务器,然后再从另一台计算机连接。第一次努力将向您展示当它起作用时会发生什么。例如,如果您的服务器在端口 999 上运行,请使用 telnet server.example.com 999

    如果机器是 Linux 机器,请使用 iptables -L 查看您尝试访问的端口上是否存在阻塞。

    如果您仍然无法访问服务器,请在服务器主机上运行 tcpdump -i tcp:999 以查看哪些流量正在进入您的服务器套接字,然后再次运行 telnet 命令。您应该看到从本地计算机连接时建立的 tcp 连接,从其他计算机连接时可能会或可能不会。如果在从其他机器连接时没有看到它,也可以在那里运行tcpdump 以确保客户端确实将流量发送到服务器。

    在您确定服务器可以接收流量并且您的客户端正在发送流量之后,对于实际发生的事情就没有什么神秘的了,您应该会找到问题所在。

    【讨论】:

    • 这是我的场景,我使用的是 Ubuntu 操作系统,我的服务器应用程序在一个网络的 6789 端口上运行。另一个客户端应用程序在 mac 上运行在同一端口但在不同的网络上。在编译客户端应用程序时,我需要提供客户端需要连接到的服务器应用程序的 IP 地址。我似乎无法弄清楚将哪个 IP 提供给客户端,以便它将连接到服务器应用程序。在这一点上,我什至不确定是否有可能实现我想要实现的目标。有任何想法吗? @Brian Topping
    • Mac 可以通过 SSH 连接到 Ubuntu 机器吗?如果是这样,则网络已连接。我猜如果你从服务器上的命令行执行telnet localhost 6789,你会得到一个连接,对吗?
    【解决方案2】:

    它在我在路由器上进行端口转发后工作。大多数 ISP 提供的调制解调器/路由器不会让您操作端口,因此必须购买我自己的调制解调器/路由器,转发端口并像魅力一样工作。关于什么是端口转发的信息可以在这里找到:http://www.howtogeek.com/66214/how-to-forward-ports-on-your-router/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-17
      • 1970-01-01
      • 2016-04-09
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多