可以使用套接字连接python中不同网络上的多台计算机吗?

问题描述:

我一直在寻找所有的互联网上的答案,但一直没能找到一个截至目前。我对网络非常陌生,所以请接受我几乎不知道任何事情。我能够使用套接字向LAN网络上的计算机发送数据,但是我想知道是否可以按照我的说法连接到我的朋友家中的计算机,并使用套接字向计算机和计算机发送数据(无telnet或netcat服务器)。或者这是不可能的,我应该看看一个不同的python库,或者我应该设置某种服务器,这两台机器将连接到?可以使用套接字连接python中不同网络上的多台计算机吗?

任何帮助将不胜感激,并请考虑到,我是新来这个帐户...

是的,它是可能的。

您所需要的只是要连接的计算机的主机名或IP地址和端口号。只要能够建立到远程机器的路线,就可以建立连接。

看看socket模块。这里有一个简单的例子:

import socket 
s = socket.socket() 
s.connect(('123.123.123.123', 10000)) 

这将试图建立与IP地址123.123.123.123端口10000 TCP连接到远程机器的远程机器需要有10000端口开放,即服务侦听在该端口上的连接以及在任何防火墙设备中打开的端口10000。

而不是IP地址,你也可以使用主机名:

s.connect(('remote.host.com', 10000)) 

主要的(抽象)的想法很简单。你在网络中有两个节点(计算机)(这次是互联网),所以你应该能够将它们连接在一起。

你可以在它们之间建立一个tcp连接。

套接字对你的情况来说很好,你需要的只是每个节点的公有IP和每个节点中的空闲端口。您可以从this range中选择您的端口。

Python提供了一个socket module,检查它,它非常简单和容易。你也可以看看some examples

然而实际地说,你需要打开防火墙中的这些端口,同时还做一些配置根据您的操作系统上,让这种沟通。

套接字应该工作,但也有一些注意事项:

  • 如果服务器(假设你使用TCP套接字)是一个防火墙或NAT(通常,如果你有一个路由器),你会需要它的背后配置为将公共接口上的端口(从Internet可见)重定向到本地端口。
  • 您需要知道您的朋友的公共IP或主机名以连接到它们。

如果你的网络是这样的:

+---------------+ +-----------+ +--------+ +---------------+ +------------------+ 
| Your computer |-->|Your router|-->|Internet|-->|Friend's router|-->|Friends's computer| 
+---------------+ +-----------+ +--------+ +---------------+ +------------------+ 
    192.168.0.5  host.isp.com     friend.isp.com  192.168.2.55 

和你的朋友正在运行其本地网络上的服务器,在端口9000(例如),那么你连接到friend.isp。 COM:9000。如果其路由器配置为将friend.isp.com接口(internet)上的端口9000的流量重定向到192.168.2.55(本地机器),则应该正确建立连接。

这是可能的,但它会需要在你的朋友的路由器上的一些配置。原因是,现在每个人都有一个由服务提供商提供的公共IP地址。这个IP地址本身并不是固定的,但它很容易查找什么是当前IP @https://www.whatismyip.com/

现在发送不会是一个问题,但接收是。比利时Telenet等一些服务提供商不允许使用任何端口,您必须查明允许哪些端口。众所周知的端口很可能不被允许。例如,如果没有首先联系您的ISP,就无法托管网络服务器。例如港口10000将工作。联系您的ISP以了解这些限制。

接下来的问题是,你们两个都有一个路由器和一个私有IP @在支持NAT/PAT的路由器后面的私有网络。例如,如果我在我的电脑上执行ipconfig,我会得到以下IP @ 192.168.1.99。这个IP @在我的路由器后面是独一无二的,但它在整个互联网上并不是唯一的,因此这些IP @不能在通过互联网进行通信时直接使用。因此,路由器将使用NAT/PAT和一些基于传出数据包填充的查找表。你发送了一些东西,nat/pat表被创建,你的私有IP @被公有的IP和替换的端口分配。当有回复时,该端口用于将其更改回原始请求的IP @。出于这个原因,发送不是问题,但接收是。

要解决此问题,您的朋友必须设置端口转发或将电脑放在demiliterized区域,这取决于有问题的路由器。端口转发就像手动填写NAT/PAT表一样。如果有东西到达此端口,请使用该端口将其发送到该专用IP @。

发送和接收机器的下一个问题是防火墙。防火墙必须关闭或配置为允许您计划使用的端口上的传出和传入流量。

如果你了解所有这些,那么你可以使它工作。但是,如果Chineze对你来说都是如此,那么你将会遇到很多困难。所以得出的结论是,这是可能的,但有一些警告需要解决。 有很多人试图完成你在这里描述的内容,并且在使其工作中遇到很多麻烦。如果你真的是一个新手,我会尝试找到有经验的人,否则你会失去你的头发尝试。(通过从挫折中拉出自己)

你使用python或任何其他编程语言的事实不是与本次讨论相关。这纯粹是一个网络问题。

有关NAT/PAT的更多信息:http://www.webopedia.com/DidYouKnow/Computer_Science/NAT_and_PAT.asp