2016-11-30 7 views
0

pythonサーバに複数の人が接続しているときに、メッセージを入力して、それを見るためにenterを押す必要がなくても即座に見ることができるようにする方法を知りません。ここでスレッドを使用するにはどうすればよいですか?スレッディングとネットワーキング

サーバー:

import socket, thread 

def reactor(sock,client,data): 
     try: 
      sock.sendto(data.encode('utf-8'),client) 
      sock.close() 
     except Exception,e : 
      print(e) 
      sock.close() 

def Main(): 
    host = '25.4.221.63' 
    port = 5000 

    clients = [] 


    s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 
    s.bind((host,port)) 

    print("Server Started") 
    while True: 
     data,addr=s.recvfrom(1024) 
     if addr not in clients: 
      clients.append(addr) 
     data = data.decode('utf-8') 
     print("Message From: " + str(addr)) 
     print("From connected user: " + data) 
     print("Sending: " + data) 
     for client in clients: 
      try: 
       thread.start_new_thread(reactor,(s,client,data)) 
      except Exception,e : 
       print(e) 
       s.close() 



if __name__ == '__main__': 
    Main() 

クライアント:

import socket 

def Main(): 
    alias = input("ScreenName:") 
    inp = input("IP:") 

    host =inp 
    port = 5001 

    server = ('25.4.221.63',5000) 

    s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 
    s.bind((host,port)) 

    message = input("-> ") 

    while message != 'q': 
     s.sendto(message.encode('utf-8'), server) 
     data,addr = s.recvfrom(1024) 
     data = data.decode('utf-8') 
     print(data) 
     message = input(alias + ' -> ') 
    s.close() 


if __name__ == '__main__': 
    Main() 
+0

あなたの実際のIPアドレスを投稿することはおそらくお勧めできません。 –

答えて

0

スレッドを避けてください。 selectを使用してください。

ソケットまたは標準入力からの入力を同時に待機するには、selectまたはepollを使用する必要があります。 selectがソケットの読み取り準備ができている場合は、メッセージをお読みください。 stdinが読み込みの準備ができている場合は、ユーザー入力を読み込みます。これには自分でinputを実装する必要があります。

+1

1つの可能性があります(元のポスターの使用状況によって異なります):Windowsではselect()/ poll()のstdinは動作しません。 –