2016-11-19 64 views
1

這是從服務器到客戶端進行連接的代碼的一部分。我想多客戶端。 appriciate幫助。如何多客戶端

import socket, pickle import threading 

BUF_SIZE = 8192 

class Network(threading.Thread): 

    def __init__(self,frame): 
     threading.Thread.__init__(self) 
     self.frame = frame 
     self.server_sock= socket.socket() 

    def run(self): 
     self.server_sock.bind(('',1729)) 
     self.server_sock.listen(1) 
     client_sock, client_address = self.server_sock.accept() 
     data = client_sock.recv(BUF_SIZE) 
     processes_list = pickle.loads(data) 
     for process_details in processes_list: 
      self.frame.add_line(process_details) 

     client_sock.close() 
     self.server_sock.close() 
     self.server_sock.close() 

回答

1

通常的做法是開始像每一個連接的客戶端一個新的線程或進程(我不知道Python的,所以我會在一些僞解釋):

create server socket; 
listen on specific address; 

while (true) 
{ 
    accept client; 
    start a new thread for client; 
} 

close server socket; 

在新線程您將處理每個新的客戶端連接,只需要客戶端套接字傳遞給新的客戶端。

new thread function (client socket) 
{ 
    read (client socket); 
    write (client socket); 
    close (client socket); 
} 

我還建議您將監聽積壓隊列增加到2-5個連接。

+0

根據博客文章,我不認爲增加積壓隊列的數量是個好主意,http://blog.stephencleary.com/2009/05/using-socket-as-server-listening- socket.html – shakram02