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