我有用于客户端和服务器的Java程序,它们在同一个wifi网络中可以正常工作。但是我需要客户端能够从开放的Internet连接到服务器。在这样的问题中
https://coderanch.com/t/667020/java/Socket-connections-networks
解决方案是从路由器手动将端口重新路由到服务器,使其开放给来自外部的连接。是否可以仅使用服务器上的软件来执行此操作?我不明白为什么需要手动专用端口,因为我安装的计算机上的其他应用程序(例如游戏)当然可以与它们的服务器来回通信,而无需手动进入和翻转开关。
如何仅通过服务器上运行的软件来实现?
如果没有其他方法,其他应用程序如何在不手动更改路由器的情况下进行开放通信,并且通过我的路由器打开端口会导致安全问题?
说其他应用程序可以做到这一点非常普遍。许多应用程序(例如数据库)要求您打开防火墙上的端口(不完全是路由器),而其他应用程序则不需要(大多数Web应用程序使用基于文本的HTTP来传递其数据)。
如果将应用程序更改为使用WebSocket,则可以实现所需的功能。它基于HTTP,但是一旦建立连接,便会升级为二进制双向连接。这样,您就可以在客户端和服务器之间以二进制形式发送数据,而无需打开任何端口。
关于开放港口,这会有安全风险吗?是和否。从某种意义上说,您正在打开Internet的端口,但从没有意义上说,它是仅您的应用程序正在使用并且能够读取(并解释)您通过其交换的内容的非标准端口。它。
您将需要更改应用程序的体系结构。目前,您的服务器位于防火墙后面,该防火墙阻止了来自Internet的连接-您需要这样做!如果您允许来自Internet的所有流量无差别地连接到您的服务器,它将很容易受到攻击。
其他应用程序无需端口转发即可安装和通信,因为开发人员在Internet上提供了一个服务器来充当客户端之间的代理。客户端将out连接到Internet,该Internet通常在家庭网络上没有被阻止。内部连接出线被认为比进入[[in。
的连接危害小。