nho*_*oyr 3 java sockets router serversocket nat
假设我们有一个ServerSocket,我们运行accept().客户端连接并使用与ServerSocket相同的本地端口创建新套接字.假设客户端将数据发送到此套接字.它到达端口,并到达java应用程序.来自这里的数据如何到达正确的套接字?
假设两台计算机通过NAT隐藏在同一公共IP之后.这最终会产生问题吗?看起来好像同一台计算机正在尝试创建一个连接(相同的公共IP和相同的端口),我觉得好像我在这里遗漏了一些东西.
套接字将本地地址和端口与远程地址和端口连接.这是关键:只要端口不同,您就可以接受来自同一IP的多个连接.(例如,您可以在两个不同的浏览器选项卡中打开相同的网页,因为它们与两个不同的客户端端口连接.)
NAT负责确保来自两台独立计算机的两个连接接收不同的地址/端口组合.如果它们映射到相同的公共IP,则NAT将需要为这些连接分配不同的本地端口.作为服务器,您不必担心这一点:您只是看到两个不同的地址/端口组合连接到服务器的地址/端口,因此它们是不同的套接字.
在Java中,a ServerSocket充当入口点.它绑定到服务器的地址和端口,因此它是"插槽的一半"的模板.当客户端连接其地址和端口时,Socket会创建一个"full" ,其中一半填写,现在服务器和客户端可以开始通话.如果仍然不够清楚,请查看TCP/UDP连接的工作原理.
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |