Python Socket连接到全球公共IP地址
Python Socket连接到全球公共IP地址
我一直在通过Python连接位于不同位置的计算机的项目上工作。最初,在测试时,我使用了我的私人IP地址(当时我不知道它是私人的)来连接与我相同网络的计算机。但是,一旦我尝试在不同位置的不同网络中连接计算机,它根本无法工作。
我认为这是因为程序正在使用我计算机的本地IP地址,它只能连接到相同网络上的计算机。以下是我的简化程式:
这是我的服务器端脚本:
server = socket.gethostbyname(socket.gethostname()) # 10.128.X.XXX 是内部IP print(server) port = 5555 clients = 0 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((server, port)) s.listen(2) print("Waiting for connection...") while True: conn, addr = s.accept() print("Connected to: ", addr) conn.send(str.encode(f"{clients}")) clients += 1
这是我的客户端脚本:
class Network: def __init__(self): self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server = "10.128.0.2" self.port = 5555 self.addr = (self.server, self.port) self.id = int(self.connect()) def connect(self): self.client.connect(self.addr) return self.client.recv(2048).decode() network = Network() print(f"Connected as client {network.id}")
现在,当我尝试使用全局IP地址替换私人IP地址(如此处所指定:How do I get the external IP of a socket in Python?),我得到以下错误:
# 获取全局IP地址 from requests import get server = get("https://api.ipify.org").text
s.bind((server, port)) OSError: [WinError 10049] 要求的地址在其上下文中无效
我尝试了很多关于如何在不同位置的不同网络中进行通信(以字符串形式传输少量数据)的搜索,但是我并没有得到解决方案。我能不能以某种方式做到这一点?