带s的多播

2024-05-14 13:49:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我的服务器可以很好地使用我的选择功能:

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

以下是可写循环的代码:

^{pr2}$

s是套接字对象。这里的代码只发送给正在发送内容的客户机。 我只想将下一条消息多播到其他可写套接字,因此我尝试了:

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)

但这不起作用,它总是只发送给发送者。在


Tags: 代码in服务器forstderrsysmsgoutputs
1条回答
网友
1楼 · 发布于 2024-05-14 13:49:30

好的多播现在可以了。 我以为writable包含一个可写套接字的列表,但它只有一个被选中。我真的不明白第一个循环是“for s in writable”,如果只有一个套接字在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)

相关问题 更多 >

    热门问题