2015-05-24 136 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來管理多個連接。

相關問題