Python 上的客户端套接字,如何联系多个服务器?

Client-side Socket on Python, how to contact multiple server?

我有一个客户端需要联系一些服务器。所以客户端上的套接字将连接到特定的服务器端口和主机,但我如何从一台服务器切换到另一台服务器?所以我的简单客户端看起来像:

import socket
import sys

class Client:

    def __init__(self):
        self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        if self.s is None:
            print('could not open socket')
            sys.exit(1)
        self.servers = { 1998: True, 1999: True }
        self.current_file = None
        self.host = '127.0.0.1'
        if len(sys.argv) > 1:
            self.host = sys.argv[1]

    def IterateServer(self):
        keys = self.servers.keys()
        for key in keys:
            try:
                self.s.connect((self.host, key))
            except socket.error as msg:
                self.servers[key] = False
                continue
            print('Connect' + str(key))

我的问题是关于IterateServer(self)

当我设置套接字连接时,它适用于第一台服务器(端口 1998),但不适用于第二台服务器。我认为当我将一个插座连接到另一个插座时,我无法重新连接它,对吗?

我的策略是使用字典将服务器映射到与该服务器一起打开的套接字。

我用 None 初始化,表明那里没有打开套接字。

self.servers = { 1998: None, 1999: None }

然后,在循环中:

def IterateServer(self):
    for key in self.servers:
        try:
            tmp_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            tmp_sock.connect((self.host, key))
        except socket.error as msg:
            # Didn't work! Entry in dict stays as None
            continue
        # Did work! Update the dict with our open socket.
        self.servers[key] = tmp_sock
        print('Connect' + str(key))

现在您可以向所有服务器写入

def write_to_all_servers(self, string_to_write):
    for key, sock in self.servers.items():
        if sock is not None:
            sock.write(string_to_write)