当前位置:  开发笔记 > 编程语言 > 正文

在Python中选择多播网络接口

如何解决《在Python中选择多播网络接口》经验,为你挑选了1个好方法。

我有一个带有两个独立以太网连接的服务器.当我在python中绑定一个套接字时,它默认为两个网络之一.如何从Python中的第二个网络中提取多播流?我曾尝试在第二个网络上使用服务器的IP地址调用bind,但这没有用.



1> 小智..:

我建议你不要使用INADDR_ANY.在生产多播环境中,您希望对组播套接字非常具体,并且不希望像发送igmp连接所有接口那样.当事情不像"route add -host 239.1.1.1 dev eth3"那样工作时,这会导致黑客作业的变通方法,以便根据相关系统正确地进行多播连接.请改用:

def joinMcast(mcast_addr,port,if_ip):
    """
    Returns a live multicast socket
    mcast_addr is a dotted string format of the multicast group
    port is an integer of the UDP port you want to receive
    if_ip is a dotted string format of the interface you will use
    """

    #create a UDP socket
    mcastsock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

    #allow other sockets to bind this port too
    mcastsock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)

    #explicitly join the multicast group on the interface specified
    mcastsock.setsockopt(socket.SOL_IP,socket.IP_ADD_MEMBERSHIP,
                socket.inet_aton(mcast_addr)+socket.inet_aton(if_ip))

    #finally bind the socket to start getting data into your socket
    mcastsock.bind((mcast_addr,port))

    return mcastsock

在mcastsock.bind中你也可以使用''而不是地址字符串,但我建议不要这样做.使用'',如果你有另一个套接字使用相同的端口,两个套接字将获得每个数据.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有