2015-02-20 3 views
0

Я пытаюсь отправить сообщение конкретному клиенту. Я уже сделал сервер, который отправляет сообщение всем клиентам, но я не знаю, как отправить сообщение конкретному клиенту. , Вот мой код сервера:Python многопоточность | отправить сообщение конкретному клиенту

server.py

from socket import * 
from codecs import decode 
#from chatrecord import ChatRecord 
from threading import Thread 
from time import ctime 

class ClientHandler(Thread): 

    def __init__(self,client,address): 
     global sockets 
     global addresses 
     Thread.__init__(self) 
     self._client = client 
     self._address = address 
     sockets.append(self._client) 
     addresses.append(self._address) 

    def run(self): 
     self._client.send('Welcome to the chatroom!\n') 

     while 1: 
      message =self._client.recv(BUFSIZE) 
      print '\n\n',sockets 
      if not message: 
       print "Client disconnected." 
       addIndex=sockets.index(self._client) 
       del sockets[addIndex] 
       del addresses[addIndex] 
       self._client.close() 
       break 
      else: 
       if 'ONLINE#' in message: 
        for x in sockets: 
         if (x!=self._client): 
          try: 
           x.send(message[7:]) 
          except: 
           print 'disconnected' 
           continue 
        print message[7:] 
       else:  
        for x in sockets: 
         try: 
          x.send(message) 
          /*sockets is the list of all client*/ 
         except: 
          print ' ' 
          continue 
        print message 


HOST = 'localhost' 
PORT = 1235 
ADDRESS = (HOST,PORT) 
BUFSIZE = 1024 
server = socket(AF_INET,SOCK_STREAM) 
server.bind(ADDRESS) 
server.listen(5) 
sockets=[] 
addresses=[] 

while True: 
    print "Waiting for connection..." 
    client, address = server.accept() 
    print('...client connected from: ',address) 
    handler = ClientHandler(client,address) 
    handler.start() 

ответ

0

, так как это Chatroom, я хотел бы создать словарь с псевдонимом для клиента при подключении.

Клиент получает запрос с -> выберите имя!

клиент выбирает: ClientName = jimbob

mydict = {} 
mydict[clientname] = self._address 

то, вы можете просто получить пользователя по кличке

for client,addr in mydict.iteritems(): 
    if client == "jimbob": 
     destinationaddr = addr 
     break 

это было время, так как я сделал питона, так что вы можете возьмите это как больше псевдокода.

Вы также можете посмотреть документацию для SocketServer

редактирования: вы также хотите, чтобы убедиться, что псевдоним взят, когда клиент подключается. Это будет очень похоже на цикл выше, за исключением, может быть, установить логическое значение, если пользователь существует.

+0

Спасибо за ваш ответ .. У меня есть идея отправить сообщение на конкретный клиент, спасибо за вашу помощь – pythonHelp

Смежные вопросы