我有一臺帶有兩個獨立以太網連接的服務器。當我在python中綁定套接字時,它默認爲兩個網絡之一。如何從Python中的第二個網絡中獲取多播流?我曾嘗試使用第二個網絡上的服務器的IP地址來調用綁定,但這種方式沒有奏效。在Python中選擇多播網絡接口
6
A
回答
0
我想通了。事實證明,我缺少的部分是將接口添加到用於向多播組添加成員身份的mreq結構中。
1
12
我建議你不要使用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,但我反對這項建議。使用'',如果你有另一個使用相同端口的套接字,那麼這兩個套接字將獲得其他數據。
相關問題
- 1. 從Camel Mina中選擇網絡接口
- 2. 在Python中的網絡接口模擬?
- 3. 如何選擇網絡接口,用於與Python
- 4. 在SSH.NET中選擇SftpClient類使用的網絡接口
- 5. 如何自動選擇Vagrant中的橋接網絡接口?
- 6. H2多個網絡接口
- 7. 如何爲NSURLSession連接選擇特定的網絡接口?
- 8. 網絡選擇
- 9. 選擇多個網絡中的特定網絡
- 10. 在python中的原始套接字的網絡接口?
- 11. 接收來自特定的網絡接口的多播在Linux上
- 12. Socket.bind的首選網絡接口
- 13. 選擇Python/SQLObject網絡框架
- 14. 如何選擇使用哪個網絡接口?
- 15. 可以選擇使用哪個網絡接口?
- 16. 爲Zend_Service_Amazon_S3選擇不同的網絡接口
- 17. AutoDisovery選擇了錯誤的網絡接口
- 18. 在多個網絡上進行多播
- 19. AWS NAT - 多個網絡接口
- 20. Scala RemoteActor多個網絡接口
- 21. 我怎樣才能選擇多個網絡接口使用Apache httpclient 4.1.2
- 22. AuthScale網絡選擇
- 23. c#套接字發送/ /綁定udp組播不到選定的網絡接口
- 24. 在Arch Linux中禁用網絡接口
- 25. 神經網絡多重選擇考試
- 26. 多個網絡套接字python
- 27. 在.NET中指定UDP組播應該連接到什麼網絡接口
- 28. 如何通過命令行選擇多個網絡連接?
- 29. 如何在java中同時使用多個網絡接口?
- 30. 在一個應用程序中使用多個網絡接口
是啊你救了我的夜晚的夢想 – waza123 2017-03-29 22:28:34