这个想法是一次将多播从一个资源到多个接收者的相同内容。我想出了以下代码:
#!/usr/bin/env python
# coding: utf8
import socket, os
c = socket.socket()
c.connect(('127.1', 4343))
s = socket.socket()
s.bind(('127.1', 8989))
s.listen(3)
while 1:
conn, addr = s.accept()
print 'Connected by %s:%s' % addr
os.dup2(conn.fileno(), c.fileno(), )
s.close()
我使用netcat
对其进行了测试但没有任何成功,client
意外退出或server
退出任何连接后退出。这有可能吗?我做错了什么?
答案 0 :(得分:1)
在os.dup2()
调用后,两个文件描述符(FD)都引用相同的套接字,从而共享其缓冲区。使用原始FD提取数据(通过recv()
或read()
)时,无法再使用重复的FD提取此片段,反之亦然。输入数据的每个八位字节将被准确读取一次并由单个接收器读取,因此不会为每个FD复制(我认为这是您错误的地方)。
有关可靠的多播解决方案,请参阅this answer和链接主题。