![如何为 Java 套接字编程启用无线网络上的端口](https://linux22.com/image/1311012/%E5%A6%82%E4%BD%95%E4%B8%BA%20Java%20%E5%A5%97%E6%8E%A5%E5%AD%97%E7%BC%96%E7%A8%8B%E5%90%AF%E7%94%A8%E6%97%A0%E7%BA%BF%E7%BD%91%E7%BB%9C%E4%B8%8A%E7%9A%84%E7%AB%AF%E5%8F%A3.png)
背景:我编写了一个 Java 服务器-客户端程序。服务器在端口 2175 上接受传入连接,并在 2176 上写入响应,客户端会在该端口上侦听响应。我正在通过网络发送序列化对象。
问题:如果我在与服务器相同的机器上运行客户端,那么这一切都会顺利进行。我整理了一个客户端 jar 并将其部署在与服务器在同一无线网络上运行的另一台机器上。现在我收到“ConnectionException:连接被拒绝”。所以我认为我应该对服务器和客户端 IP 进行硬编码,但这仍然不起作用。
问题:我还需要做什么才能让两台计算机互相通信(就网络而言而不是 Java 而言)?
答案1
如果您的连接被拒绝,您可以与机器通信,只是它没有监听该 IP 地址。尝试在所有 IP 地址上打开服务(例如,不指定一个 IP 地址)
顺便说一句:您只需要一个端口用于发送和接收。
答案2
第一步,确保客户端确实在尝试连接到服务器的地址(检查代码、清理、重新编译)。下一步,检查您是否可以从客户端 ping 服务器。下一步,检查所有防火墙,尤其是服务器计算机上的防火墙,确保它允许端口 2175 上的传入连接。如果所有这些看起来都正常,请检查您的路由器是否阻止了连接(尽管这有点奇怪)。Wireshark 或其他数据包嗅探器可以帮助您进一步诊断问题。
答案3
似乎是在客户端系统中端口被关闭或阻止或被任何其他应用程序使用。它不依赖于有线或无线网络,而是完全依赖于开放端口,通常由防火墙策略处理。
答案4
我也遇到过这个问题。我确信发布此问题的人在部署服务器程序时使用的是 Windows。正如我之前所说,问题出在 Windows 防火墙上。是的,它会阻止除病毒之外的所有其他东西。:P。
因此,这是我针对该问题的解决方案。在 Ubuntu 中部署服务器程序,如果您的计算机上没有运行 Ubuntu,只需将其安装在虚拟机上,这就是我目前正在做的事情。如果您运行的是 Windows 8.1 Pro,它带有一个名为 Hyper-V 的内置虚拟机。
你所要做的就是
- 下载 Ubuntu 操作系统并通过 Hyper-V 运行(或者安装)它。
- 在 Ubuntu(在 Hyper-V 上运行)上安装 Java。
- 安装 Java 后,在终端中输入“ifconfig”获取运行 Ubuntu 的虚拟机的 IP 地址。其格式为 192.168.xx,所以,这就是您的服务器 IP。
- 现在,在 Windows 上运行客户端程序,当您尝试连接到服务器时,在客户端程序中提供服务器的 IP 地址(您刚刚按照上述步骤获得)。