Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我是否需要在同一网络上的两台机器之间进行前向端口通信?_Java_Sockets_Port_Portforwarding - Fatal编程技术网

Java 我是否需要在同一网络上的两台机器之间进行前向端口通信?

Java 我是否需要在同一网络上的两台机器之间进行前向端口通信?,java,sockets,port,portforwarding,Java,Sockets,Port,Portforwarding,我计划用Java编写一个相对简单的客户机-服务器套接字程序,其中服务器将在一台机器上运行,客户机将在另一台机器上运行(两者都连接在同一网络上) . 从以上问题的答案来看,我相信我需要端口转发(我知道这不是一个问题),但这与我的直觉相反,因为我的印象是,只有当我需要从远程机器(而不是网络上)连接到网络上的服务/机器/任何东西时,才需要端口转发 所以我的问题是,我是否需要在本地网络上的两台机器之间进行前向端口通信?如果是,原因是什么?如果两台计算机位于同一网络中,则无需配置端口转发。即使这些机器位于

我计划用Java编写一个相对简单的客户机-服务器套接字程序,其中服务器将在一台机器上运行,客户机将在另一台机器上运行(两者都连接在同一网络上)

.
从以上问题的答案来看,我相信我需要端口转发(我知道这不是一个问题),但这与我的直觉相反,因为我的印象是,只有当我需要从远程机器(而不是网络上)连接到网络上的服务/机器/任何东西时,才需要端口转发


所以我的问题是,我是否需要在本地网络上的两台机器之间进行前向端口通信?如果是,原因是什么?

如果两台计算机位于同一网络中,则无需配置端口转发。即使这些机器位于不同的网络中,您也不需要配置端口转发,假设这些机器具有可路由的IP地址(并且没有防火墙阻止该访问)

端口转发仅在与(例如)具有单个IP地址的家庭网络通信时相关,其中内部网络上有多台计算机,并且对internet可见的本地路由器需要执行NAT(网络地址转换)以在本地网络和大坏internet之间映射。端口转发确保将internet可见端口转发到内部网络上计算机的IP地址


您需要考虑的是,本地计算机防火墙(例如Windows Defender)可能会阻止访问,而不会显式地将应用程序和/或端口列为白名单。

如果计算机位于同一网络中,则无需配置端口转发。即使这些机器位于不同的网络中,您也不需要配置端口转发,假设这些机器具有可路由的IP地址(并且没有防火墙阻止该访问)

端口转发仅在与(例如)具有单个IP地址的家庭网络通信时相关,其中内部网络上有多台计算机,并且对internet可见的本地路由器需要执行NAT(网络地址转换)以在本地网络和大坏internet之间映射。端口转发确保将internet可见端口转发到内部网络上计算机的IP地址


您需要考虑的是,本地计算机防火墙(如Windows Defender)可能会阻止访问,而不会显式地将应用程序和/或端口列为白名单。

不,非常确定您关于端口转发的看法是正确的,仅当外部网络连接需要时才进行。如果它们在同一个网络上,您只需提供另一个设备的本地/专用IP地址:)我不确定是什么导致您得出这样的结论,即该问题表明端口转发是必要的。这似乎是作为答案评论的一部分引入的一种混淆,这表明可能撰写答案的人认为客户端和服务器在不同的网络中(而不是本地防火墙(如Windows Defender)阻止端口)。@dantechguy我也这么认为,谢谢你澄清:)@markrotterveel我的困惑来自于写问题的人,他声称更改代码中的“localhost”并不能解决他们的问题。不,我很确定你说的端口转发只是外部网络连接所必需的。如果它们在同一个网络上,您只需提供另一个设备的本地/专用IP地址:)我不确定是什么导致您得出这样的结论,即该问题表明端口转发是必要的。这似乎是作为答案评论的一部分引入的一种混淆,这表明可能撰写答案的人认为客户端和服务器在不同的网络中(而不是本地防火墙(如Windows Defender)阻止端口)。@dantechguy我也这么认为,谢谢你澄清:)@markrotterveel我的困惑来自于写问题的人,他声称更改代码中的“localhost”并不能解决他们的问题。我当时对端口如何工作的直觉是正确的。非常感谢您的解释:)另一种情况是,如果您运行(内部代码)一个或多个共享主机/真实计算机网络接口的虚拟机;根据您使用的虚拟化,这可能被标记为NAT,也可能不被标记为NAT,但您需要配置哪些传入端口连接到哪些VM。类似地,docker(以及基于它的东西)需要转发传入的连接,尽管通常您将其配置为每个容器的一部分,而不是单独配置。我当时对端口如何工作的直觉是正确的。非常感谢您的解释:)另一种情况是,如果您运行(内部代码)一个或多个共享主机/真实计算机网络接口的虚拟机;根据您使用的虚拟化,这可能被标记为NAT,也可能不被标记为NAT,但您需要配置哪些传入端口连接到哪些VM。类似地,docker(以及基于它的东西)需要转发传入连接,尽管通常您将其配置为每个容器的一部分,而不是单独配置。