1

我有一个返回特定站点主机的函数。并使用这两个功能

def connect(self, rooms):
    print('')
    i = [x for x in rooms]
    for x in i:
        self.room_connect(x)
    running = True            
    while running:
        self.event_data()`

def room_connect(self, rooms):
    host = getServer(rooms)
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((host, 443)) 
    sock.send(self.room_auth(rooms).encode())
    self.sockets = sock
    print(self.sockets)
    print('connected to '+ rooms)
    self.postbyte = True 

我能够为每个主机连接到不同的套接字。问题是,我需要它来保持与它连接的每个套接字的连接。最后,只维护在 for 循环中创建的最后一个套接字。来自该套接字的套接字接收数据被传递给处理程序以解析信息。基本上我要问的是如何保持与for循环中创建的每个套接字的连接,同时将其recv信息传递给处理程序。处理程序是 event_data(),在 event_data 函数中,要解析的数据由 data = self.sockets.recv(1024) 定义。问题是for循环中唯一的最后一个套接字需要处理。

4

2 回答 2

1

把它放在字典里。然后,您可以在将来通过任何您想要的方式轻松查找它。

于 2013-08-24T02:34:28.880 回答
0

我同意 xaxxon 的做法。将连接(socket fds)放入队列中(基于“host”的值作为键)。但是,如果您希望 event_data 从各种套接字接收数据,那么您可能需要额外的机制,因为 recv() 调用是阻塞的,并且如果您有多个主机,这可能是一个问题。您可能需要使用 select() 或多线程或两者兼而有之。

于 2013-08-24T03:04:05.463 回答