Articles of 多播

在Linux上使用python接收多播UDP数据报

我有一个硬件设备,在我的networking上发送多播数据。 我已经写了一个接收数据并打印它的Python脚本。 但是,我发现它只能在我的Windows XP电脑上运行,并且在我的Ubuntu Linux 10.04电脑上无法运行。 在Linux下,没有收到任何东西。 它只是围绕while循环,并没有收到任何数据。 我的代码张贴在下面。 你能看到任何理由,为什么这不会在Linux下工作? 谢谢,Rab。 # Multicast client # Adapted from: http://chaos.weblogs.us/archives/164 # on 05/03/2013 import socket ANY = "0.0.0.0" MCAST_ADDR = "224.0.33.154" MCAST_PORT = 31800 # Create a UDP socket sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) # Allow multiple sockets to use the same PORT number sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # Bind […]

在回送设备上进行多播

我希望发送UDP组播数据包到环回地址,并在其他应用程序中接收。 所有的testing在Fedora Core 17 Linux上完成。 我们的想法是通过RTSP / HTTP或任何其他networking协议接收videostream,并在回送地址上多播它,以便我可以使用VLC使用多播地址播放stream。 撇开其他比特率和受控组播的问题,我试图读取一个video文件和组播环回设备上。 但是当试图在vlc上播放时,它没有奏效。 我能看到数据包在wireshark中传输,但src ip是从我的默认networking接口(即接口,这是我的默认网关) 我已经尝试过下面的命令 sudo ifconfig lo多播sudo ip route添加239.252.10.10 dev lo 在这方面的任何build议将是非常有帮助的。 testing程序代码粘贴在下面 #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #define MULTICAST_ADDRESS "239.252.10.10" #define UDP_PORT 1234 #define INTERFACE_IP "127.0.0.1" #define MTU 1474 #define DATA_BUFFER_SIZE (1024*1024) static int […]

我怎样才能诊断我们的Java IP多点传送应用程序?

出于某种原因,我运行的每个组播例子(计算机运行OpenSUSE Linux)都可以工作。 客户都静静地坐着。 如何找出为什么组播被阻止/忽略? 一些例子: 例1 http://www.roseindia.net/java/example/java/net/udp/UDPMulticastServer.java 例2 http://docs.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html (使用这些文件:) http://docs.oracle.com/javase/tutorial/networking/datagrams/examples/MulticastServer.java http://docs.oracle.com/javase/tutorial/networking/datagrams/examples/MulticastServerThread.java http://docs.oracle.com/javase/tutorial/networking/datagrams/examples/MulticastClient.java http:// docs.oracle.com/javase/tutorial/networking/datagrams/examples/one-liners.txt

在具有多个接口的服务器上接收多播(linux)

要在我的非默认网卡(dvb)上接收多播,请执行以下操作: 打开一个套接字(AF_INET,SOCK_DGRAM) 在dvb接口上join带有IP_ADD_MEMBERSHIP的多播地址 绑定多播地址(注意,一个常见的错误是绑定“0.0.0.0”,然后在该套接字上接收,甚至你不感兴趣的多播)和端口 此时接收所需多播数据包的唯一方法是在路由表中添加一条规则,通过dvb到达发送者所在的networking(另一个networking),就好像dvb需要回复多播发送者; 让我们说一个源发送者多播模式。 任何人都知道发生了什么事? 这个问题对我来说很烦,因为原则上我不知道发件人的IP地址。

在一个套接字(Linux,C)上订阅多个多播组

是否可以从一个套接字上的多个多播组接收数据? 例如: void AddGroup(int sock, const char* mc_addr_str, int mc_port, const char* interface) { struct sockaddr_in mc_addr; memset(&mc_addr, 0, sizeof(mc_addr)); mc_addr.sin_family = AF_INET; mc_addr.sin_addr.s_addr = inet_addr(mc_addr_str); mc_addr.sin_port = htons(mc_port); if ((bind(sock, (struct sockaddr *) &mc_addr, sizeof(mc_addr))) < 0) { perror("bind() failed"); exit(1); } // construct an IGMP join request structure struct ip_mreq mc_req; mc_req.imr_multiaddr.s_addr = […]

Windows不会从所有接口接收组播IPv6数据包

我试图在Windows上使用这个Python 2.7代码接收IPv6多播数据包(发送到ff02 :: 1地址) import socket import win_inet_pton import struct socket.IPPROTO_IPV6=41 #because using python 2.7 on wondows PORT = 1234 UDP_BROADCAST_IPv6 = "ff02::1" sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(("",PORT)) # not working with "::" either # Join multicast group addrinfo = socket.getaddrinfo(UDP_BROADCAST_IPv6, None)[0] group = socket.inet_pton(addrinfo[0], addrinfo[4][0]) mreq = group + struct.pack('@I', […]

如何多播(发送)到第一个网卡?

我最近发现,如果我有一个拨号连接(这是一个自助服务terminal)和一个局域网连接,当build立拨号连接(与互联网接入),我的组播sendto默认拨号而不是我的LAN网卡。 这使得多点传送到拨号连接,而不是我的局域网,有几个多播用户。 我明白,我需要使用IP_MULTICAST_IF来设置我的多播套接字接口。 问题是如何枚举接口,如何在setsockopt中使用IP_MULTICAST_IF? 在Windows XP Embedded服务terminal上,总是只有一个局域网连接NIC。 我如何获得这个接口,并通过它的IP地址(这是什么IP_MULTICAST_IF期望??)setsockopt?

无法通过非默认NIC发送多播

在Windows 7虚拟机上,我尝试使用第二个(非默认的)两个networking接口将UDP数据包发送到多播地址。 我可以使用/ INTF选项(不允许指定端口)使用mcast来实现此目的,但我的C#代码不起作用: void run(string ipaddrstr, int port, string nicaddrstr) { int index = -1; // Create a socket for the UDP broadcast Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPAddress ipaddr = IPAddress.Parse(ipaddrstr); IPAddress nicAddr = IPAddress.Parse(nicaddrstr); int i = 0; foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) { if (ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 || ni.NetworkInterfaceType […]

Windows 8.1 UDP组播

我有一个问题,使UDP多点传送从Windows 8.1工作。 以下简单的testing程序可以在同一主机上运行Windows 7或Ubuntu 13的接口桥接虚拟机内运行。 由于这个原因,我相信这个问题是不是与Javatesting程序,或与物理networkingconfiguration。 import java.net.*; public class multicast_send { public static void main(String[] args) throws Exception { DatagramSocket socket = null; DatagramPacket outPacket = null; socket = new DatagramSocket(); String msg = "Multicast Test"; outPacket = new DatagramPacket(msg.getBytes(), msg.getBytes().length, InetAddress.getByName("230.0.0.1"), 4446); socket.send(outPacket); System.out.println("Server sent : " + msg); socket.close(); } } 在Windows […]

在同一个端口上接收多个多点传送 – C,Linux

我有一个应用程序从同一端口上的多个多播源接收数据。 我能够收到数据。 但是,我正在考虑每个组的统计信息(即收到的消息,收到的字节),所有的数据都混在一起。 有谁知道如何解决这个问题? 如果我试图查看发件人的地址,它不是多播地址,而是发送机器的IP地址。 我正在使用以下套接字选项: struct ip_mreq mreq; mreq.imr_multiaddr.s_addr = inet_addr("224.1.2.3"); mreq.imr_interface.s_addr = INADDR_ANY; setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)); 并且: setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &reuse, sizeof(reuse)); 我感谢任何帮助!