【发布时间】:2020-01-06 19:46:57
【问题描述】:
我的客户端和服务器都有 java 程序,它们在同一个 wifi 网络中运行良好。但我需要客户端能够从开放的互联网连接到服务器。在这样的问题中
https://coderanch.com/t/667020/java/Socket-connections-networks
解决方案是手动将端口从路由器重新路由到服务器,使其对来自外部的连接开放。有没有办法只用服务器上的软件来做到这一点?我不明白为什么需要手动指定端口,因为我安装的计算机上的其他应用程序(如游戏)当然会与他们的服务器来回通信,而无需我手动进入并翻转开关。
我如何仅使用在我的服务器上运行的软件来实现这一点?
如果没有其他方法,其他应用程序如何在不手动更改路由器的情况下进行公开通信,并且通过我的路由器打开端口会导致安全问题?
【问题讨论】:
-
你的服务器监听哪个端口?您的服务器是否有静态公共 IP 地址?
-
典型的模式是客户端通过接触服务器开始连接;服务器侦听并等待新的客户端连接。一旦建立了套接字连接,任何一端(服务器或客户端)都可以写入或读取套接字。如果您希望 server(远程)能够启动与 client 的套接字连接 – 并且您的客户端前面有防火墙 – 那么您必须永久在防火墙上打开一个端口,从而使远程服务器可以通过某种方式进入网络以启动与客户端的套接字连接。
-
打个比方,您可以随时(从内部)解锁并打开您家的上锁门。打开后,您可以与门口的任何人互动。但是其他任何人都不可能从外面走过去打开你锁着的前门。
-
哦好的,非常感谢!我对 java 网络还很陌生,所以我认为我们需要为每个方向信息的传播提供一个套接字。我没有意识到一个插座可以双向使用。我会研究的!
-
对不起,我忘了仔细检查这一点;所以如果我手动打开路由器上的服务器端口,只要我将程序安全地保存在端口上,密码保护/正确加密,它会引起任何安全问题吗?即使程序没有运行并且根本不会对程序的连接请求有任何响应?如果我需要在其他地方单独提出这个问题,请告诉我。
标签: java sockets security port router