如何在两个不同的网络中连接两台不同的计算机

时间:2017-08-23 02:45:48

标签: python sockets

以下此代码在同一网络上的两台计算机之间正常工作,但它在两个不同网络上的两台计算机之间无法工作,并且我尝试使用公共IP地址

clint

import socket               
s = socket.socket()         
port = 10000
ip=input("what is ip : ")
s.connect((ip, port))
print (s.recv(1024))
s.close 

服务器

import socket
s = socket.socket()
ip=socket.gethostbyname(socket.gethostname())
print (ip)
port = 10000           
s.bind((ip, port))       
s.listen(1)                 
while True:
        c, addr = s.accept()
        print ('Got connection from', addr)
        c.send(bytes([int(1)]))
        c.close()       

这个问题已被多次询问,但我能找到的所有答案都是我必须做的事情。端口转发"没有任何代码示例如何在一些答案中做到这一点,他们说我应该下载应用程序,将端口转发给我,但我不知道如何在我的python代码中使用它?

2 个答案:

答案 0 :(得分:0)

端口转发是您在路由器级别执行的操作。例如,如果您尝试连接的两台计算机位于两个不同家庭的两台不同WiFi路由器后面,那么您需要在两个位置设置两台WiFi路由器以转发端口10000(您正在使用的路由器)转发到运行代码的计算机的内部IP。

您的WiFi路由器具有公共IP(您现在可能正在使用的),并且运行您的python代码的计算机具有由WiFi路由器分配的网络内部的本地IP。端口转发将流量传输到路由器的公共IP,并将其在本地网络内部转发到运行程序的本地IP的计算机。

换句话说,这不是您将在代码中执行的操作 - 您将在路由器的软件中执行此操作。

答案 1 :(得分:0)

如果您有野心,可以按照本教程进行操作,无需配置设备进行端口转发。假设您有支持uPNP的路由器。

https://www.electricmonk.nl/log/2016/07/05/exploring-upnp-with-python/

甚至可能有一个模块可以解决所有问题。(没有检查它是如何工作的)

https://pypi.python.org/pypi/UPnP/1.3