ServerSocket在这些场景中的表现究竟如何?

时间:2014-12-24 21:45:59

标签: java sockets router serversocket nat

假设我们有一个ServerSocket,我们运行accept()。客户端连接并使用与ServerSocket相同的本地端口创建新套接字。假设客户端将数据发送到此套接字。它到达端口,并到达java应用程序。这里的数据如何到达正确的套接字?

假设两台计算机通过NAT隐藏在同一公共IP之后。这最终会产生问题吗?看起来好像同一台计算机正在尝试创建连接(相同的公共IP和相同的端口),我觉得好像我在这里遗漏了一些东西。

2 个答案:

答案 0 :(得分:6)

套接字将本地地址和端口与远程地址和端口连接起来。这是关键:只要端口不同,您就可以接受来自同一IP的多个连接。 (例如,您可以在两个不同的浏览器选项卡中打开相同的网页,因为它们与两个不同的客户端端口连接。)

NAT负责确保来自两台独立计算机的两个连接接收不同的地址/端口组合。如果它们映射到相同的公共IP,则NAT将需要为这些连接分配不同的本地端口。作为服务器,您不必担心这一点:您只是看到两个不同的地址/端口组合连接到您的服务器的地址/端口,因此它们是不同的套接字。

在Java中,ServerSocket充当入口点。它绑定到您服务器的地址和端口,因此它是"套接字的一半的模板"。当客户端连接到他们的地址和端口时,一个" full"创建Socket时填充了一半,现在服务器和客户端可以开始交谈了。如果仍然不够清楚,请查看TCP / UDP连接的工作原理。

答案 1 :(得分:-1)

您不能拥有两台具有相同对的服务器(IP,端口)。如果在NAT后面,NAT应该为每个本地服务器分配一个不同的公共端口,它不能将它分配给两者。

相关问题