我正在尝试创建一个Socket“Hello World”程序。
理想情况下,我想创建两个可以交换简单文本的程序,点对点。
我可以创建一个web服务,对等方可以将其IP地址发布到。
然后,一个同伴可以选择另一个同伴配对。
如果其中一个同伴是我的台式电脑,另一个是我的笔记本电脑,我怎么能区分这两个?
答案 0 :(得分:1)
首先。如果所有这些都在您的本地网络上,没有任何NAT网关或类似网站 - 这没什么大不了的。您的服务器将看到您的客户端具有不同的IP地址,并且客户端可以直接相互连接。
另一方面,如果您的服务器在互联网上可访问的IP地址上运行,并且您的客户端可以从他们可以到达该服务器的任何地方进行连接,那么您将不得不考虑此帖的其余部分。
客户端A连接到您的服务器。现在有一个联系: (ClientAIP:ClientAPort,SERVERIP:ServerPort)
客户端B连接到您的服务器。现在有一个联系: (ClientBIP:ClientBPort,SERVERIP:ServerPort)
如果您的客户都在同一个NAT'ed gatway后面,服务器将看到ClientAIP == ClientBIP。 但ClientAPort将与ClientBPort不同。这足以保持与服务器的两个连接。
现在,如果你想要配对其中两个,那就麻烦了。让客户端向您发送其内部IP地址(也许它的内部端口也可以用于额外的验证。)
您现在知道客户端(外部)IP及其内部IP。 这些将是场景:
ClientAInternalIP == ClientAIP,ClientBinternalIP == ClientBIP。伟大的都不在NAT网关后面 - 选择其中一个作为服务器,另一个直接连接到它。
ClientAInternalIP!= ClientAIP,ClientBinternalIP == ClientBIP。 ClientA支持NAT,而ClientB则不支持。让ClientB成为服务器,ClientA连接到ClientB
ClientAInternalIP == ClientAIP,ClientBinternalIP!= ClientBIP。只是相反的情况2)。
ClientAInternalIP!= ClientAIP,ClientBinternalIP!= ClientBIP,但ClientAIP == ClientBIP。特殊情况 - 它们都在NAT网关后面,但它们位于同一个内部网络上。这与案例1)相同。除了客户可以在内部网络而不是互联网上进行通信。
ClientAInternalIP!= ClientAIP,ClientBinternalIP!= ClientBIP。两者都落后于NAT gatways。 - 你无法连接到彼此 - 至少不要求别人在客户端的其中一个网关上设置端口转发。您必须通过服务器路由通信。 (虽然有路由器/网关提供API,但您可以使用它以编程方式从客户端站点打开端口转发。它不是广泛可用的,并且可能会被锁定。)
即使有上述情况,也可能设置了防火墙,因此即使客户的真实IP地址可以在互联网上路由,客户也无法直接进行对等 - 无论如何,您可能需要回退到通过服务器进行路由。
答案 1 :(得分:0)
在每一个上运行ipconfig,找出他们的ip是什么。您也可以根据它们的连接方式按名称ping它们。
要识别网络外部您的网络,您需要向您的互联网提供商付款,以便他们为您分配一系列公共IP,然后将每个公开IP公开为具有这些地址。你家里的东西可能是192.168.1.x的私人地址范围。
答案 2 :(得分:0)
您通常不会发起请求,客户端会这样做。您收到请求并回复。据推测,您的请求包含类似“会话标识符”的内容,并且您将所有谈话者与同一个谈话者进行匹配。
答案 3 :(得分:0)
我会在路由器中设置端口转发,因此您在外部IP中连接的任何端口都将转发到内部网络中的正确计算机。