Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
阅读列表-选择()-什么';他要去那里吗?(Python 2.6)_Python_Sockets_Select_Python 2.6_Recv - Fatal编程技术网

阅读列表-选择()-什么';他要去那里吗?(Python 2.6)

阅读列表-选择()-什么';他要去那里吗?(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

我正在尝试使用select在服务器与多个客户端之间创建连接。 我只在一个客户机上尝试过,但在他连接(工作正常)后,客户机尝试发送他的用户名,服务器尝试接收它,但服务器中的错误表明连接被客户机强制关闭。有人知道为什么吗

编辑:我对代码做了一些更改,但仍然有类似的问题。。这是:

服务器:

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。谢谢您的回答!嗯,我不知道如何写它不同,所以它不会一直在那里。实际上,我已经更改了代码,但仍然遇到类似的问题。新代码正在编辑中。。