2013-05-20 3 views
0

Я работаю над демоном Python, который подключается к нескольким «Клиентам» и прослушивает.Python: несколько подключений

Важно: Порт демона должен быть одинаковым для всех Клиентов.

class UDPReader(asyncore.dispatcher): 
     def __init__(self, local, remote, parser): 
       asyncore.dispatcher.__init__(self) 
       self.parser = parser 
       self.create_socket(socket.AF_INET, socket.SOCK_DGRAM) 
       self.bind(local) 
       self.connect(remote) 

Мой вопрос теперь, как я могу подключиться к нескольким «клиентам» в то же время и слушать там с таким же портом? И есть ли способ увидеть, с какого клиента поступают данные?

+1

UDP не поддерживает информацию о подключении, это больше похоже на открытую дверь, которая выкрикивает информацию всем, кто слушает и получает информацию от любого, кто знает, какая дверь открыта. – BlackVegetable

ответ

1

См socket.recvfrom() - возвращаемое значение является парой (string, address) где address является адресом отправителя и то, что вы можете перейти к последующему socket.sendto() вызову.

С UDP connect() на самом деле не настроено никаких соединений, вы все равно можете отправлять и получать из любого места; все, что он действительно делает, задает адрес назначения по умолчанию для сокета внутри и позволяет использовать send() или write() вместо того, чтобы передавать адрес явно каждый раз.