gpt4 book ai didi

python - Python上的客户端Socket,如何联系多个服务器?

转载 作者:太空宇宙 更新时间:2023-11-03 17:20:21 25 4
gpt4 key购买 nike

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

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)

关于python - Python上的客户端Socket,如何联系多个服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33223599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com