我想在临时网络拓扑中创建多播套接字连接。
我在python中有一个客户端/服务器实现,在正常的网络配置上可以正常工作,这意味着可以通过Internet连接进行标准的网络配置。
这是客户端连接器“订户”的代码:
if __name__ == "__main__":
multicast_group = '224.0.0.1'
server_address = ('', 10000)
# Create the socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# Bind to the server address
sock.bind(server_address)
# Tell the operating system to add the socket to the multicast group
# on all interfaces.
group = socket.inet_aton(multicast_group)
mreq = struct.pack('4sL', group, socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
在正常的互联网连接网络中,这可以正常工作,但在临时网络拓扑中, 这会引发错误:
文件“ main.py”第33行
setsockopt(socket.IPPROTO_IP,socket.IP_ADD_MEMBERSHIP,mreq)
文件“ usr / lib / python2.7 / socket.py”,第228行,以meth格式
返回getattr(self .__ sock,name)(* args)
socket.error:[错误19]没有这样的设备
有什么想法吗?
谢谢
答案 0 :(得分:0)
一种可行的解决方案是手动设置网络接口以供套接字使用:
sock.setsockopt(socket.SOL_SOCKET, 25, 'bat0')
并将成员资格添加到组和主机名:
group = socket.inet_aton(multicast_group)
intf = socket.gethostbyname(socket.gethostname())
sock.setsockopt(socket.SOL_IP, socket.IP_ADD_MEMBERSHIP, group + socket.inet_aton(intf))