2011-10-04 6 views

답변

3

여기에만 표준 라이브러리를 사용하여 기본 예제 :

import SocketServer 
import threading 

class Handler(SocketServer.StreamRequestHandler): 

    def handle(self): 
     print self.client_address,'connected' 
     self.server.add_client(self.request) 
     while 1: 
      data = self.request.recv(1024) 
      if not data: break 
      self.server.send(self.request,data) 
     self.server.remove_client(self.request) 

class Server(SocketServer.ThreadingTCPServer): 

    def __init__(self,*args,**kwargs): 
     SocketServer.ThreadingTCPServer.__init__(self,*args,**kwargs) 
     self.clients = [] 
     self.lock = threading.Lock() 

    def add_client(self,c): 
     with self.lock: 
      self.clients.append(c) 

    def remove_client(self,c): 
     with self.lock: 
      self.clients.remove(c) 

    def send(self,sender,data): 
     with self.lock: 
      for c in self.clients: 
       if c is not sender: 
        c.sendall(data) 

s = Server(('',8000),Handler) 
s.serve_forever() 
+0

당신은 정말 self.lock와'사용해야합니다'대신 획득하고 자신을 해제 호출하는이 - 짧은 분명한 함정을 피할 수 있습니다. – Voo

+0

@Voo 어쩌면 저는 파이썬 2.4를 사용하고 있습니다 : ^). 고마워, 바뀌 었어. –

+1

조난, 소프트웨어 종속성의 또 다른 희생양 : ( – Voo