经过反复测试,发现了规律,当电脑上有多块网卡(虚拟网卡也算)时,就有可能无法发出组播包数据,但自己可以收到自己发送的组播/广播包。 哇哦,原来与多网卡环境有关。...有了这个规律,再去百度发现不少关于多网卡环境下发送组播/广播包问题的文章,比如这个 《解决多网卡环境下使用特定网卡广播UDP消息的问题》 这篇文章开头的内容就给出了解决办法,如下图: ?...因为这个原因,对于多网卡环境下,发送广播或组播包就必须要指定用哪块网卡发送。...所以我的解决办法就是:遍历所有物理网卡,在每一块网卡上都把组播或广播数据发送一遍,接收组播包时将要明确将每一块物理网卡加入到组播地址中。...下面是我的实现代码片段: 发送组播或广播: /** * 向指定的组播或广播地址和端口发送组播数据 * @param group 组播或广播地址 * @param port 端口 * @
() 关闭当前的Socket,通知驱动程序释放为这个Socket保留的资源 广播/多播(组播) 使用UDP协议进行信息的传输之前不需要建议连接。...对于多播,消息只是发送到一个多播地址,网络只是将数据分发给哪些表示想要接收发送到该多播地址的数据的主机。 总得来说,只有UDP套接字允许广播或多播。...UDP多播 同样的UDP多播也要指明接受者的端口号,而且与广播相似的是多播与单播之间的区别还在于地址。 ipv4中的多播地址范围是:224.0.0.0到239.255.255.255。...使用Java 的UDP进行多播,要分两步走,首先要加入到广播组地址,其次要建立套接字传输信息 关于多播,涉及到MulticastSocket,他用于接收广播的信息,前提是要将它加入到广播组, 组播的地址是保留的...b.length; i++) { res += (b[i] & 0xff) << (i * 8); } return res; } } 验证网卡是否加入多播组
组播(multicast): 也叫多播, 多点广播或群播。 指把信息同时传递给一组目的地址。它使用策略是最高效的,因为消息在每条网络链路上只需传递一次,而且只有在链路分叉的时候,消息才会被复制。...组播(multicast) “组播”这个词通常用来指代IP组播。IP组播是一种通过使用一个组播地址将数据在同一时间以高效的方式发往处于TCP/IP网络上的多个接收者的协议。...组播报文的目的地址使用D类IP地址, D类地址不能出现在IP报文的源IP地址字段。在IPv4网络中,224.0.0.0到239.255.255.255属于多播地址。...在单播中,在网络位址和网络节点之间存在一一对应的关系。 在广播和组播中,在网络位址和网络节点之间存在一对多的关系:每一个目的位址对应一群接收可以复制资讯的节点。...不然无法在BROADCAST_PORT端口接收到DISCOVER_RESPONSE报文,新加入局域网的设备就无法感知其他设备的存在。
() 关闭当前的Socket,通知驱动程序释放为这个Socket保留的资源 单播/广播/多播(组播) 使用UDP协议进行信息的传输之前不需要建议连接。...这三者都需要发送方指定接收方的IP和端口,区别在于单播是接收方的本机IP,广播是固定的广播地址255.255.255.255,多播是对应的多播地址。 多播数据报的接收是主动的。...主机主动加入指定的多播组,才会接收该组的多播数据报。...} } } return ipList; } } } 验证网卡是否加入多播组...多播组监听只和接收者有关。
joinMulticastGroup 加入组播joinMulticastGroup() 函数是 QUdpSocket 类的成员函数,用于将 QUdpSocket 加入指定的多播组。...iface:要加入多播组的网络接口。默认情况下,会选择默认的网络接口。函数返回一个 bool 类型的值,表示是否成功加入了多播组。如果成功加入多播组,返回 true;否则返回 false。...通过调用 joinMulticastGroup() 函数,QUdpSocket 将成为指定多播组的成员,并能够接收该多播组发送的数据报。...QUdpSocket 从指定的多播组中移除。...通过调用该函数,QUdpSocket 将不再是指定多播组的成员,不再接收该多播组发送的数据报。
joinMulticastGroup 加入组播 joinMulticastGroup() 函数是 QUdpSocket 类的成员函数,用于将 QUdpSocket 加入指定的多播组。...iface:要加入多播组的网络接口。默认情况下,会选择默认的网络接口。 函数返回一个 bool 类型的值,表示是否成功加入了多播组。如果成功加入多播组,返回 true;否则返回 false。...通过调用 joinMulticastGroup() 函数,QUdpSocket 将成为指定多播组的成员,并能够接收该多播组发送的数据报。...QUdpSocket 从指定的多播组中移除。...通过调用该函数,QUdpSocket 将不再是指定多播组的成员,不再接收该多播组发送的数据报。
; -- 多播地址 : 用于当作一组接口的标识符, 发送到多播地址的数据包被交付给由地址标识的所有接口; -- 回送地址 : 分配给回送接口的地址, 发送到回送地址的任何内容, 都将当作本地主机的IP输入...; -- 指定2部分 : d.d , 最后一部份是3个字节, 放在最右边的三个字节上; -- 指定1部分 : d , 直接存储在网络地址中, 字节不用重新排列; 多播地址范围 : IPv4 生存时间 (...地址列表组成的网络接口, 用于标识加入多播组的本地接口; 接口名称 "eth0", "wlan0" 等; 可以进行的操作 : 根据 IP地址 名称 硬件地址 获取网络接口, 判断网络接口类型, 判断网络接口状态...多播包; 特点 : MulticastSocket 是一种 DatagramSocket, 比一般的 DatagramSocket 多出一个功能, 具有加入Internet 上其它多播主机组的功能;...多播组指定 : 多播组通过 D 类 IP地址, 和 标准 UDP 端口号指定;
大家好,又见面了,我是你们的朋友全栈君。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
InetAddress类的方法详解: boolean isMulticastAddress():检查 InetAddress 是否为 IP 多播地址的实用程序例程。...IP v4多播地址是 D 类地址,即地址的前四位是 1110; IPv6地址开头的 11111111 将该地址标识为多播地址。...boolean isMCLinkLocal():检查多播地址是否具有链接范围的实用程序。...(224.0.0/24 前缀 并且 ttl == 1) boolean isMCSiteLocal():用于检查多播地址是否具有站点范围的实用程序。...(239.255/16 前缀 或者 ttl < 32) boolean isMCOrgLocal():检查多播地址是否具有组织范围的实用程序。
3.组播 组播也称多播,凡是需要接受数据的客户端都需要使用joinmultiastgroup()加入指定组播地址,然后发送方只要往指定组播地址发送数据。...加入指定组播地址的客户端就会产生readyRead信号,然后调用readDatagram()从指定的组播地址和端口去取数据。...&groupAddress); //加入指定组播地址所在组,如果成功,这个函数返回true;否则它将返回false bool QUdpSocket::leaveMulticastGroup(const...QHostAddress &groupAddress) //离开指定组播地址所在组,如果成功,这个函数返回true;否则它将返回false 需要注意的是joinmultiastgroup()函数,如果我们加入的组播地址是...未完待续,下章学习: 65.QT-UDP组播实现多人共享桌面
其他: boolean isMulticastAddress():检查 InetAddress 是否为 IP 多播地址的实用程序例程。...IP v4多播地址是 D 类地址,即地址的前四位是 1110; IPv6地址开头的 11111111 将该地址标识为多播地址。...IPv6中加入了关于身份验证、数据一致性和保密性的内容。...IPv6协议主要定义了三种地址类型:单播地址(Unicast Address)、组播地址(Multicast Address)和任播地址(Anycast Address)。...与原来在IPv4地址相比,新增了“任播地址”类型,取消了原来IPv4地址中的广播地址,因为在IPv6中的广播功能是通过组播来完成的。 IPv6支持无状态自动地址配置,简化了地址配置过程。
单播地址标识单个接口,广播地址标识所有接口,多播地址标识一组接口。多播数据报仅对感兴趣的接口接收。...这样既能一次将数据传输给多个有需要(加入组)的主机,又能保证不影响其他不需要(未加入组)的主机的其他通讯。 组播的优点: 需要相同数据流的客户端加入相同的组共享一条数据流,节省了服务器的负载。..._ADD_MEMBERSHIP 在一个指定的本地接口上加入一个多播组。...我们用IPv4中的单播地址或IPv6中的接口索引去指定本地接口。当加入或离开一个组时,要用到下面两个结构。...IP_DROP_MEMBERSHIP 和 IPV6_DROP_MEMBERSHIP 在一个指定的本地接口上离开一个多播组。
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QUdpSocket...joinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface = QNetworkInterface()) 加入多播组...leaveMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface = QNetworkInterface()) 离开多播组...QNetworkInterface multicastInterface() const 返回多播组的网络接口。...void setMulticastInterface(const QNetworkInterface &iface) 设置多播组的网络接口。
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QUdpSocket...joinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface = QNetworkInterface())加入多播组...leaveMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface = QNetworkInterface())离开多播组...QNetworkInterface multicastInterface() const 返回多播组的网络接口。...void setMulticastInterface(const QNetworkInterface &iface)设置多播组的网络接口。
9.单播、多播和广播的区别 单播(Unicast)、多播(Multicast)和广播(Broadcast)这三个术语都是用来描述网络节点之间通讯方式。...(2)多播(组播) 主机之间一对一组的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。...主机可以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择的复制并传输数据,即只将组内数据传输给那些加入组的主机。...这样既能一次将数据传输给多个有需要(加入组)的主机,又能保证不影响其他不需要(未加入组)的主机的其他通讯。 组播的优点: 1)需要相同数据流的客户端加入相同的组共享一条数据流,节省了服务器的负载。...IP协议允许有2亿6千多万个组播,所以其提供的服务可以非常丰富。 3)此协议和单播协议一样允许在Internet宽带网上传输。
查询响应过程:路由器向 224.0.0.1(网内所有主机)发查询报文;接收到该报文的主机将自己加入的组播地址填入报告报文,向该组播地址多播;其他加入该组播组的主机收到该组播报文后,抑制自己报告报文的发送...(2) 指定组查询:用于获知邻接接口中跟某一个 IP 地址相关的多播接收状态。组地址字段含有需 要查询的那个组地址,源数量(N)字段为 0。...(3) 指定组和源查询:用于获知邻接接口是否需要接收来自指定的这些源发往指定组的多播数据报。组地址字段含有要查询的多播地址,源地址[i]字段含有相关的源地址。...PS:IGMP查询器:在网络中如果没有三层组播设备,将无法实现 IGMP 查询器的相关功能。...配置为查询器后,必须指定设备的一个地址为查询器地址,否则由于缺省源地址为 0.0.0.0 故无法发出 IGMP 组查询报文配置了 IP 地址的查询器会参加 VLAN 内 IGMP 查询者的选举,当选查询者负责维护
IP 地址是所属局域子网中的广播地址,即位于该局域子网下的所有主机均能收到一份数据副本;多播:也称为组播,是将网络中属于同一业务类型的主机进行逻辑上的分组,信息收发仅发生在同一分组中,不在该分组的的主机无法收发对应的数据...udp6'); socket.bind(1234, () => { socket.setMulticastInterface('::%eth1'); }); 复制代码addMembership:在指定的接口上将指定的地址加入到一个不限源的多播组中...:多播接口,如未指定,将会从首个匹配的多播组中将指定的地址移除。...addSourceSpecificMembership:在指定的接口上加入一个特定于源的多播组(内部使用了套接字选项 IP_ADD_SOURCE_MEMBERSHIP),相关参数如下:sourceAddress...:源地址;groupAddress:多播组地址;multicastInterface:多播接口,如未指定,将会解除首个匹配的特定于源的多播组之间的成员关系。
当前的网络中有三种通讯模式:单播、广播、组播(多播),其中的组播出现时间最晚但同时具备单播和广播的优点,最具有发展前景。...三、组播: 主机之间“一对一组”的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。...主机可以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择的复制并传输数据,即只将组内数据传输给那些加入组的主机。...这样既能一次将数据传输给多个有需要(加入组)的主机,又能保证不影响其他不需要(未加入组)的主机的其他通讯。 组播的优点: 1. 需要相同数据流的客户端加入相同的组共享一条数据流,节省了服务器的负载。...IP协议允许有2亿6千多万个(268435456)组播,所以其提供的服务可以非常丰富。 3. 此协议和单播协议一样允许在Internet宽带网上传输。
其基本原理是这样的:有个多播组,只要加入这个组里的所有客服端,服务端发送的数据它们都能收到,具体传输到多播组里的每个客户是由路由完成的(如果路由器不支持多播或网络堵塞,实现多播也会使用隧道技术) 多播的数据传输特点如下...: 1,多播服务器端针对特定多播组,只需发送1次数据,该组内的所有所有客服端都能接收数据。...设置生存时间和加入多播组的方法 1,设置生存时间:只指服务端发送的数据包最远能传递的距离,用整数表示,并且每经过1个路由器就减1,当为0时,该数据包无法再被传递,只能销毁。...2,加入多播组:也是通过套接字可选项设置,示例代码中有使用方法,这里只介绍多播组的结构体ip_mreq。...但他们在网络范围上有区别,多播可以跨越不同的网络,只要加入了多播组就能接收数据。但广播只能向同一网络中的主机传输数据。
. 2 组管理协议(IGMP) 两个多播节点之间的所有路由器必须支持IGMP协议 任何没有开启IGMP的路由器仅简单的丢弃接收到的多播数据...IP多播组的成员。...printf(" 开始接收多播组上的数据......多播 带源地址的IP多播允许加入组时,指定要接收哪些成员的数据 1 包含方式:指定N个有效的源地址,套接字仅接收来自这些源地址的数据 2 排除方式:指定N个有效的源地址,套接字将接受这些源地址之外的数据...printf(" 开始接收多播组上的数据...
领取专属 10元无门槛券
手把手带您无忧上云