我正在尝试创建一个套接字“Hello World”程序。
理想情况下,我想创建两个可以对等交换简单文本的程序。
我可以创建一个Web服务,对等方可以将其IP地址发布到该Web服务。
然后,一个对等方可以选择另一个与之配对。
如果一个同龄人是我的台式计算机,另一个是我的笔记本电脑,我该如何区分这两个?
最佳答案
首先。如果所有这些都在您的本地网络上,而没有任何NAT网关或类似地址-没什么大不了的。您的服务器将看到具有不同IP地址的客户端,并且客户端可以直接彼此连接。
另一方面,如果您的服务器在可访问Internet的IP地址上运行,并且您的客户端从他们可以访问该服务器的任何地方进行连接,则您必须考虑本文的其余部分。
客户端A连接到您的服务器。现在之间存在联系:
(ClientAIP:ClientAPort,ServerIP:ServerPort)
客户端B连接到您的服务器。现在之间存在联系:
(ClientBIP:ClientBPort,ServerIP:ServerPort)
如果您的两个客户端都在同一个NAT网关后面,则服务器将看到ClientAIP == ClientBIP。
但是ClientAPort将不同于ClientBPort。这足以保持与服务器的两个连接。
现在,如果要将两个配对,麻烦就来了。让客户端向您发送其内部IP地址(也许也向其发送内部端口,以便可以将其用于额外的验证。)
您现在知道了客户端(外部)IP及其内部IP。
这些是方案:
即使在上述情况下,也可能设置了防火墙,因此即使客户的真实IP地址可以在Internet上路由,也无法直接对等访问客户端-无论如何,您可能仍然需要通过服务器进行路由。
关于networking - 在同一Intranet上区分两台计算机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2254334/