2014-05-08 2 views
-1

채팅을 프로그래밍하고 있지만, 모든 것이 잘 작동하지만 내 서버에 연결된 모든 클라이언트/스레드로 데이터를 보내고 싶습니다. 나는 대기열에 대해 들었고 튜토리얼을 읽었지 만, 내 프로그램에 그것을 구현하는 방법을 결코 이해하지 못했습니다. 그래서 누구든지 내 프로그램을 바꿀 수 있다면 원하는대로하고 게시 할 수 있습니다.채팅 서버 python - 모든 클라이언트에게 데이터를 보내는 방법은 무엇입니까?

import socket, sys 
from threading import Thread 

def clientHandler(conn, addr): 
    print addr, "is Connected" 
    while 1: 
     data = conn.recv(1024) 
     if data == 'Admin: /server shutdown': 
      sock.close() 
      print 'quitting...' 
      quit() 

     if not data: 
      break 
     conn.sendall(data) # only sends to original sender 
     print "Received Message", repr(data) 
HOST = '' 
PORT = int(raw_input('PORT: ')) 

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.bind((HOST, PORT)) 
sock.listen(999999) 

print "Server is running......" 

#Thread(target=clientHandler).start() 
#Thread(target=clientHandler).start() 
#Thread(target=clientHandler).start() 

for i in range(999999): 
    conn, addr = sock.accept() 
    Thread(target=clientHandler, args=(conn, addr)).start() 

감사

답변

0

내가 스레드와 같은 작업을 해결할 수 (나는 모든 클라이언트가 동시에 데이터를 얻을 싶어). 그것은이 소켓/스레딩 예를 기반으로 https://github.com/aprex/python_chat/blob/master/echoserver-threads.py

: http://ilab.cs.byu.edu/python/threadingmodule.html

곧, 서버 클래스가이 목록의 스레드 속성이 여기에

내 서버 스크립트의 예입니다. 새 클라이언트가 연결되면 클라이언트 클래스의 새 스레드가 만들어져 스레드에 저장됩니다.

클라이언트 클래스 모자 메소드 run(). 연결된 각 클라이언트의 신호를 수신합니다.

메시지가 수신되면 server.threads에 저장된 모든 연결된 클라이언트에 대해 메시지가 보내지는 server.chat_msg_sending() 메서드를 호출합니다.

+0

작동하지 않습니다 ... luckilu에 의해 내 문제가 해결되었습니다 mail.python에 스레드를 찾는 방법을 보여줬습니다 ... 이제 클라이언트에 대한 gui 인터페이스를 만들기 시작했습니다. 나중에 서버용이지만 현재 클라이언트 용입니다. @ 펑크 맨 –

관련 문제