Python Socket连接到全球公共IP地址

12 浏览
0 Comments

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] 要求的地址在其上下文中无效

我尝试了很多关于如何在不同位置的不同网络中进行通信(以字符串形式传输少量数据)的搜索,但是我并没有得到解决方案。我能不能以某种方式做到这一点?

0