【发布时间】:2015-04-19 05:40:55
【问题描述】:
我有一个简单的 java 编写的客户端和服务器聊天应用程序(带有套接字)。在同一网络/计算机上运行时,它工作正常。但是,当我尝试从不同的网络运行客户端时,它无法连接。我尝试使用服务器的公共 IP 地址将客户端连接到服务器,但没有运气。我如何能够从不同的网络连接到服务器应用程序?任何帮助将不胜感激。
【问题讨论】:
我有一个简单的 java 编写的客户端和服务器聊天应用程序(带有套接字)。在同一网络/计算机上运行时,它工作正常。但是,当我尝试从不同的网络运行客户端时,它无法连接。我尝试使用服务器的公共 IP 地址将客户端连接到服务器,但没有运气。我如何能够从不同的网络连接到服务器应用程序?任何帮助将不胜感激。
【问题讨论】:
听起来您的防火墙问题比应用程序问题更多。不要尝试连接 Java 客户端,而是先尝试从同一台计算机通过 Telnet 连接到服务器,然后再从另一台计算机连接。第一次努力将向您展示当它起作用时会发生什么。例如,如果您的服务器在端口 999 上运行,请使用 telnet server.example.com 999。
如果机器是 Linux 机器,请使用 iptables -L 查看您尝试访问的端口上是否存在阻塞。
如果您仍然无法访问服务器,请在服务器主机上运行 tcpdump -i tcp:999 以查看哪些流量正在进入您的服务器套接字,然后再次运行 telnet 命令。您应该看到从本地计算机连接时建立的 tcp 连接,从其他计算机连接时可能会或可能不会。如果在从其他机器连接时没有看到它,也可以在那里运行tcpdump 以确保客户端确实将流量发送到服务器。
在您确定服务器可以接收流量并且您的客户端正在发送流量之后,对于实际发生的事情就没有什么神秘的了,您应该会找到问题所在。
【讨论】:
telnet localhost 6789,你会得到一个连接,对吗?
它在我在路由器上进行端口转发后工作。大多数 ISP 提供的调制解调器/路由器不会让您操作端口,因此必须购买我自己的调制解调器/路由器,转发端口并像魅力一样工作。关于什么是端口转发的信息可以在这里找到:http://www.howtogeek.com/66214/how-to-forward-ports-on-your-router/
【讨论】: