2014-07-17 2 views
0

안녕하세요, 저는 python으로 TCP 소켓으로 채팅을 만들었지 만, 서버는 오직 하나의 클라이언트만을 받아 들였습니다.하지만 검색하려고했지만, 여러 클라이언트를 받아들이는 서버를 만드는 방법을 이해하는 데 어려움이 있습니다 ... 아무도 도와 줄 수 있습니까? 감사합니다복수의 클라이언트를 받아들이는 서버

답변

0

this에서 살펴볼 수 있습니다. 기본적으로 샘플 처리는 예제 일 뿐이므로 다음과 같이 처리해야합니다.

import threading                                      
import socket 

def print_message(socket):                                    
    data = socket.recv(512)                                    
    print(data)                                       

def handle_client(clientsocket):                                  
    print("We have a new client")                                   
    thread = threading.Thread(target=print_message, args=(clientsocket,))                         
    thread.run() 


# create an INET, STREAMing socket                                  
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)                          
# bind the socket to a public host, and a well-known port                            
serversocket.bind((socket.gethostname(), 8080))                              
# become a server socket                                    
serversocket.listen(5)                                     

while True:                                       
    # accept connections from outside                                 
    (clientsocket, address) = serversocket.accept()                              
    # now do something with the clientsocket                                
    # in this case, we'll pretend this is a threaded server                            
    ct = handle_client(clientsocket)                                  
+0

Ehi 감사합니다. 코드 작업은 훌륭하지만 스레드 처리가 가장 좋은 방법입니까? 왜냐하면 나는 파이썬에서 제대로 수행되지 않는 스레딩을 읽었기 때문입니다. – user3782573

+0

일부 Python 구현은 CPU 바인딩 작업에 적합한 스레딩 성능을 갖고 있지 않다고 읽었습니다. 귀하의 경우는 IO 바인딩 작업처럼 보이므로 스레드를 사용하는 데 문제가 없다고 생각합니다. 또한 스레드 나 프로세스가 없으면 여러 클라이언트 서버를 구현할 수 없습니다 (성능은 좋지 않을 것입니다). 문제는 새 클라이언트를 받아 들일 수 있기 전에'handles_client'가 완료된 후에 단일 스레드 응용 프로그램에서 발생하는'serversocket.accept()'를 호출해야한다는 것입니다. –

관련 문제