选择多播

时间:2012-10-18 12:43:25

标签: python sockets select multicast python-sockets

我的服务器可以正常使用我的选择功能:

readable, writable, exceptional = select.select(inputs, outputs, timeout)

以下是可写循环的代码:

for s in writable:
    try:
        next_msg = message_queues[s].get_nowait()
    except Queue.Empty:
        # No messages waiting so stop checking for writability.
        print >>sys.stderr, 'output queue for', s.getpeername(), 'is empty'
        outputs.remove(s)
    else:
        print >>sys.stderr, 'sending "%s" to %s' % (next_msg, s.getpeername())
        s.send(next_msg)

是套接字对象。这里代码仅发送给正在发送内容的客户端。 我只是想将next_msg多播到彼此的可写套接字,所以我尝试了:

for s in writable:
    try:
        next_msg = message_queues[s].get_nowait()
    except Queue.Empty:
        # No messages waiting so stop checking for writability.
        print >>sys.stderr, 'output queue for', s.getpeername(), 'is empty'
        outputs.remove(s)
    else:
        for multicast in writable:
            print >>sys.stderr, 'sending "%s" to %s' % (next_msg, multicast.getpeername())
            multicast.send(next_msg)

但是这不起作用,它总是只发送给发件人。

1 个答案:

答案 0 :(得分:0)

好的多播现在还可以。 我认为可写包含一个可写套接字列表,但它只有一个被选中。如果只有一个可写的套接字但是......我真的不明白第一个循环是“for s in writable” 所以!它适用于输入列表:

for multicast in inputs:
        if multicast is not server:
                print >>sys.stderr, 'sending "%s" to %s' % (next_msg, multicast.getpeername())
                multicast.send(next_msg)