我有一个需要联系某些服务器的客户端。因此客户端上的套接字将连接到特定的服务器端口和主机,但是如何从一台服务器切换到另一台服务器呢?所以我的简易客户端看起来像:
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),但不适用于第二台服务器。我认为当我将套接字连接到另一个时,我无法重新连接它,我是对的吗?
答案 0 :(得分:1)
我的策略是拥有一个字典,将服务器映射到使用该服务器打开的套接字。
我用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)