以下此代码在同一网络上的两台计算机之间正常工作,但它在两个不同网络上的两台计算机之间无法工作,并且我尝试使用公共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代码中使用它?
答案 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/
甚至可能有一个模块可以解决所有问题。(没有检查它是如何工作的)