联网。不同LAN中两台计算机之间的连接

时间:2018-03-19 14:54:09

标签: python sockets networking tcp udp

说我想在两台计算机之间实现TCP / UDP连接。 如果我知道计算机的IP并且它们位于同一个局域网中,我知道如何做到这一点。但是,如果他们在不同的局域网中呢?

P上。 S.如果有人向我展示如何在同一局域网中连接两台计算机的代码,如果他们不了解彼此的IP,那就太棒了。

P上。 P. S.我更喜欢使用stdlib和套接字库

2 个答案:

答案 0 :(得分:2)

简单地说,如果它们位于不同的LAN(即网络)中,则需要第3层设备(通常是路由器)来在设备之间路由流量。

假设设备A IP为192.168.3.3/24(子网掩码255.255.255.0 / 24),设备B为192.168.4.4/24。如果A想要发送给B,他不知道如何发送它,因为设备将检查它的子网掩码,并看到网络部分不相同。

因此,您需要我们称之为默认网关或静态路由。为了方便起见,我们将坚持使用默认网关(如果您需要,请检查静态路由使用情况)。这意味着对于设备:如果您不知道其他网络在哪里,请将此数据包发送到默认网关(路由器),他将处理此问题并找到通往终端设备的路径。

从技术上讲,在WAN或LAN上真的不重要,最后它需要路由不同的网络和数据包。

重要的一点是,您需要在某个时候知道IP。你,应用程序或其他什么。之前的一条评论提到了DNS的使用,这可能是一个解决方案,但您仍然需要知道一个IP地址。 在某种程度上,它就像是说我会寄给你一封信,但我不知道你的地址。这不会被送达。

答案 1 :(得分:0)

如果您的主机位于不同的子网上,则无法在不知道其IP地址的情况下连接它们。它们彼此隔离,您必须从路由器配置面板将端口转发到其IP,或将它们设置为DMZ主机。我想您可以设置本地DNS服务器并为您的主机分配人类可读的主机名并动态解析这些IP以跳过此障碍,但仍必须打开端口或路由器防火墙不会转发流量。并且您需要将本地DNS服务器添加到启动连接名称服务器列表的主机中。并且.. DNS服务器仍然需要知道主机期望连接的IP是什么,因此如果它们发生变化,则需要以某种方式更新。

对于TCP:在SAME子网上,您可以使用SSDP:https://pypi.python.org/pypi/ssdp/1.0.1 SSDP是使用UDP多播的UPNP协议,它实质上将UDP数据包发送到您的路由器将广播到所有连接的客户端的特殊IP:端口,这样所有主机都将接收数据报。然后,主机可以将其IP发送回服务器,您将能够创建TCP连接。

对于UDP:我不确定你想要什么,UDP已经具有用于向任意主机发送数据的工具(多播)。

至于代码:请自己做工作和研究,这不是免费的代码编写服务。为了帮助您入门,您可以查看python api代码示例:https://wiki.python.org/moin/UdpCommunication#Multicasting.3F