我的服务器可以正常使用我的选择功能:
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)
但是这不起作用,它总是只发送给发件人。
答案 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)