阅读列表-选择()-什么';他要去那里吗?(Python 2.6)
我正在尝试使用select在服务器与多个客户端之间创建连接。 我只在一个客户机上尝试过,但在他连接(工作正常)后,客户机尝试发送他的用户名,服务器尝试接收它,但服务器中的错误表明连接被客户机强制关闭。有人知道为什么吗 编辑:我对代码做了一些更改,但仍然有类似的问题。。这是: 服务器:阅读列表-选择()-什么';他要去那里吗?(Python 2.6),python,sockets,select,python-2.6,recv,Python,Sockets,Select,Python 2.6,Recv,我正在尝试使用select在服务器与多个客户端之间创建连接。 我只在一个客户机上尝试过,但在他连接(工作正常)后,客户机尝试发送他的用户名,服务器尝试接收它,但服务器中的错误表明连接被客户机强制关闭。有人知道为什么吗 编辑:我对代码做了一些更改,但仍然有类似的问题。。这是: 服务器: global players players = {} global players_sockets players_sockets = [] while True: rlist, wlist, xlist
global players
players = {}
global players_sockets
players_sockets = []
while True:
rlist, wlist, xlist = select.select([server_socket] + players_sockets, players_sockets, [], 0.3)
print rlist
for current_socket in rlist:
if current_socket is server_socket:
((new_socket, address)) = server_socket.accept()
players_sockets.append(new_socket)
else:
msg = current_socket.recv(1024)
if msg == '':
players_sockets.remove(current_socket)
del players[get_key_from_dict(players, value)]
else:
players[msg] = current_socket
(当msg=''时,客户退出;否则他就是用户名)
客户:
while True:
rlist, wlist, xlist = select.select([my_socket], [my_socket], [], 0.3)
print wlist
if rlist:
msg = my_socket.recv(1024)
print msg
if wlist:
for message in messages_to_send:
my_socket.send(message)
print message
messages_to_send.remove(message)
for event in pygame.event.get(): # event handling loop
if event.type == QUIT:
messages_to_send.append('')
pygame.quit()
sys.exit()
所有内容都在一个while(true)循环中,我打赌它每次都会到达您的else语句。您可能不希望无条件地在要选择的第二个参数()中包含所有的player\u套接字。应该在中的唯一套接字是希望尽快执行非阻塞发送()的任何套接字。如果在该列表中包含一个不想发送到的套接字,则不必要地导致select()在该套接字有缓冲区空间接受传出数据时立即返回,也就是说,几乎一直都是如此。这将导致select()每次都会立即返回,这将导致您的程序占用CPU。谢谢您的回答!嗯,我不知道如何写它不同,所以它不会一直在那里。实际上,我已经更改了代码,但仍然遇到类似的问题。新代码正在编辑中。。