2015-05-24 135 views
0

我创建一个简单的客户端 - 服务器聊天系统。我使用TCP和Im意识到TCP是端到端。但是Im试图将我从一个客户端接收到的数据转发给数组中的下一个客户端。但在下面的代码,我试着将它发送给所有的客户端(甚至失败:d) 这里是我的代码:发送数据到多个客户端

from socket import * 
from os import * 
from threading import * 
def multipleClients(): 

    all_clients = [] 
    conn, addr = s.accept() 

    all_clients.append(conn) 
    print "is connected :D :)", addr 
    while True: 
     data= conn.recv(1024) 
     if not data: 
      break 
     print "message is :", repr(data) 
     for c in all_clients: 
      c.send(data) 





host='localhost' 
port=12000 
s=socket(AF_INET, SOCK_STREAM) 
s.bind((host, port)) 
s.listen(5) 

print "Server is Running :D :p " 


for i in range (5): 
    Thread(target=multipleClients).start() 
+0

您的变量'all_clients'是本地的,因此每个trhead有一个(不同的)副本。所以在每个副本中,该列表中都有一个'conn'套接字。您需要将该列表设置为全局,但是您必须处理来自不同trhead的同一列表的并发访问。最好使用'Queue'来代替。 – JLDiaz

回答

0

TCP是流协议。你可能需要某种消息协议。 recv最多可以接收1024个字节,它可以是一条消息,一条消息或多条消息的一部分。

每个线程只有一个客户端,因为您只有一个accept。您可能想要使用select来管理多个连接。

相关问题