精华内容
下载资源
问答
  • windows查看加入的组播

    千次阅读 2019-11-22 22:11:32
    问题描述:在windows下一个正确的组播测试程序发送与接收不成功,猜测原因是网卡过多,与组播地址绑定的IP地址不正确,但用Linux的命令netstat -g,并不被支持。搜了一下,应该用以下命令 netsh interface ipv4 show...

    问题描述:在windows下一个正确的组播测试程序发送与接收不成功,猜测原因是网卡过多,与组播地址绑定的IP地址不正确,但用Linux的命令netstat
    -g,并不被支持。搜了一下,应该用以下命令 netsh interface ipv4 show joins

    查看ipv4加入的组播地址组
    在这里插入图片描述

    那么在Java中如何象C++那样指定IP地址?

    实际上MulticastSocket类的初始构造函数本身就支持绑定指定IP地址,见下图。在maven代码中点击SocketAddress,可以查看其数据结构,发现SocketAddress有一个子类,inetSocketAddress,其有两个成员函数,一个是主机名(IP地址),另一个是端口,定义一SocketAddress(纯虚类)的类实例,但new的是子类inetSocketAddress,然后对其赋值。再次运行即可。

    -实际上再次运行时并没有真正绑定到指定IP,还是靠把其它网卡都禁用才成功的。时间因素没有多试。

    -不过,如果绑定的IP并不存在,程序还是会报错的。说明这条语句还是认真执行的。
    在这里插入图片描述

    展开全文
  • windows下UDP组播

    万次阅读 2018-08-12 18:19:57
    最近研究下UDP组播,首先上网看看各种组播的含义,以下是总结的:  多播,也称为“组播”,将网络中同一业务类型主机进行了逻辑上的分组,进行数据收发的时候其数据仅仅在同一分组中进行,其他的主机没有加入此...

    最近研究下UDP组播,首先上网看看各种组播的含义,以下是总结的:

        多播,也称为“组播”,将网络中同一业务类型主机进行了逻辑上的分组,进行数据收发的时候其数据仅仅在同一分组中进行,其他的主机没有加入此分组不能收发对应的数据。

        在广域网上广播的时候,其中的交换机和路由器只向需要获取数据的主机复制并转发数据。主机可以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择地复制并传输数据,将数据仅仅传输给组内的主机。多播的这种功能,可以一次将数据发送到多个主机,又能保证不影响其他不需要(未加入组)的主机的其他通 信。

    多播的地址是特定的,D类地址用于多播。D类IP地址就是多播IP地址,即224.0.0.0至239.255.255.255之间的IP地址,并被划分为局部连接多播地址、预留多播地址和管理权限多播地址3类:

      1、局部多播地址:在224.0.0.0~224.0.0.255之间,这是为路由协议和其他用途保留的地址,路由器并不转发属于此范围的IP包。

      2、预留多播地址:在224.0.1.0~238.255.255.255之间,可用于全球范围(如Internet)或网络协议。

      3、管理权限多播地址:在239.0.0.0~239.255.255.255之间,可供组织内部使用,类似于私有IP地址,不能用于Internet,可限制多播范围。

      多播的程序设计使用setsockopt()函数和getsockopt()函数来实现,组播的选项是IP层的,其选项值和含义参见下表。

                             

    getsockopt()/setsockopt()的选项

    含 义

    IP_MULTICAST_TTL

    设置多播组数据的TTL值

    IP_ADD_MEMBERSHIP

    在指定接口上加入组播组

    IP_DROP_MEMBERSHIP

    退出组播组

    IP_MULTICAST_IF

    获取默认接口或设置接口

    IP_MULTICAST_LOOP

    禁止组播数据回送

    下面是写的实例代码:

    client代码

    #include <stdio.h>  
    #include <winsock2.h>  
    #include <ws2tcpip.h>  
    #pragma comment(lib, "ws2_32.lib")
    
    int main()
    {
    	int iRet = 0;
    	WSADATA wsaData;
    	WSAStartup(MAKEWORD(2, 2), &wsaData);
    
    	SOCKET sock = socket(AF_INET,SOCK_DGRAM,0);
    
    	int iFlag = 0;	// 0-同一台主机 1-夸主机
    	iRet = setsockopt(sock, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&iFlag, sizeof(iFlag));
    	if(iRet != 0){
    		printf("setsockopt fail:%d", WSAGetLastError());
    		return -1;
    	}
    
    	sockaddr_in addr;
    	addr.sin_addr.S_un.S_addr = inet_addr("234.2.2.2");
    	addr.sin_family = AF_INET;
    	addr.sin_port = htons(9411);
    	
    	char strSend[1024] = {0};
    	static int iIdx = 0;
    	while(1)  
    	{     
    		sprintf_s(strSend, "udp send group data:%d", iIdx++);
    		iRet = sendto(sock, strSend, strlen(strSend) + 1, 0, (sockaddr*)&addr, sizeof(sockaddr));
    		if(iRet <= 0){
    			printf("send fail:%d", WSAGetLastError());
    		}else{
    			printf("send data:%s\n", strSend);
    		}
    		Sleep(500); 
    	}  
    
    	closesocket(sock);
    	WSACleanup();
    
    	return 0;
    }

    server代码:

    #include <stdio.h>  
    #include <winsock2.h>  
    #include <ws2tcpip.h>  
    #pragma comment(lib, "ws2_32.lib")
    
    int main()
    {
    	int iRet = 0;
    	WSADATA wsaData;
    	WSAStartup(MAKEWORD(2, 2), &wsaData);
    
    	SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);
    
    	sockaddr_in addr;
    	addr.sin_family = AF_INET;
    	//addr.sin_addr.S_un.S_addr = INADDR_ANY;
    	addr.sin_addr.S_un.S_addr = inet_addr("192.168.0.104");
    	addr.sin_port = htons(9411);
    
     	bool bOptval = true;
     	iRet = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char*)&bOptval, sizeof(bOptval));
     	if(iRet != 0){
     		printf("setsockopt fail:%d", WSAGetLastError());
     		return -1;
     	}
    
    	iRet = bind(sock, (sockaddr*)&addr, sizeof(addr));
    	if(iRet != 0){
    		printf("bind fail:%d", WSAGetLastError());
    		return -1;
    	}
    	printf("socket:%d bind success\n", sock);
    
    	// 加入组播  
    	ip_mreq multiCast;
    	//multiCast.imr_interface.S_un.S_addr = INADDR_ANY;
    	multiCast.imr_interface.S_un.S_addr = inet_addr("192.168.0.104");
    	multiCast.imr_multiaddr.S_un.S_addr = inet_addr("234.2.2.2");
    	iRet = setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*)&multiCast, sizeof(multiCast));
    	if(iRet != 0){
    		printf("setsockopt fail:%d", WSAGetLastError());
    		return -1;
    	}
    
    	printf("udp group start\n");
    
    	int len = sizeof(sockaddr);
    	char strRecv[1024] = {0};
    	while(true)  
    	{     
    		memset(strRecv, 0, sizeof(strRecv));
    		iRet = recvfrom(sock, strRecv, sizeof(strRecv) - 1, 0, (sockaddr*)&addr, &len);
    		if(iRet <= 0){
    			printf("recvfrom fail:%d", WSAGetLastError());
    			return -1;
    		}
    		printf("recv data:%s\n", strRecv);
    	}  
    
    	closesocket(sock);
    	WSACleanup();
    
    	return 0;
    }
    

     

     

    展开全文
  • windows无法接收到组播问题

    千次阅读 2020-01-20 19:31:14
    应项目要求, 参与将一个设备发现服务从 linux 移植到 windows 上的过程, 设备发现服务通过加入特定的组播组,比如239.255.255.250,来监听对应组播组的发现报文,接收到目的地址为对应组播组的地址时,返回当前...

    windows上组播接收异常的问题

    应项目要求, 参与将一个设备发现服务从 linux 移植到 windows 上的过程, 设备发现服务通过加入特定的组播组,比如239.255.255.250,来监听对应组播组的发现报文,接收到目的地址为对应组播组的地址时,返回当前设备的IP地址,完成发现的流程。

    测试过程中发现, 在部分型号路由器(包括TPlink部分型号,萤石,ASUS)下, 无法进行 SADP 搜索。通过抓包发现, windows 端 win10 系统发送的均为 IGMPv3 报文, 路由器上发送的均为IGMPv2 的报文, 在客户端发送对应的 239.255.255.250 地址段的组播报文时, 路由器未转发数据包到 windows 网段, 可以认为是没能成功加入组播组。

    按照微软官网描述,在发现系统所处的环境为 IGMPv2 组播环境时, 会自动切换到以 IGMPv2, 但此时看来因某种未知原因, windows 的该机制没有生效。故而从官网上找到一种固定 windows 系统的 IGMP 版本的办法, 通过修改注册表的方式固定从网卡以 IGMPv2 的方式加入组播组, 修改完成后, 即可正常在该路由器环境下接收到 IGMP 报文。修改地址如下:

    HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\services\\Tcpip\\Parameters
    

    截图如下:
    在这里插入图片描述

    新增 DWORD 类型的 IGMPLevel 字段为 2 , DWORD 类型的 IGMPVersion 字段为 3。

    IGMPVersion 字段中 2 表示 IGMPv1, 3 为 IGMPv2, 4 为 IGMPv3(默认)。
    IGMPLevel 字段中 0 表示不支持组播, 1 表示只支持发送 IPv4 组播, 2 表示完全支持IGMP(默认)

    参考网址:

    https://social.technet.microsoft.com/Forums/windows/en-US/0d0da348-3b8b-4790-8aa2-60740a02536f/windows-7-and-igmp-multicast

    展开全文
  • 在unix中,组播通信时,IP_ADD_MEMBERSHIP时可通过ip_mreq::imr_interface.s_addr指定接口地址,在windows中采用WSAJoinLeaf如何指定接口地址? 指定接口地址的目的是发送时,通过指定的IP发送出去,不由系统...
  • windows下UDP组播(多播)发送和接收程序

    千次下载 热门讨论 2013-01-14 10:33:09
    一个简单的C++实现UDP组播发送和接收的程序
  • windows系统实现组播

    千次阅读 2012-05-02 23:48:08
    Windows 包含“媒体感知”功能。在使用传输控制协议/Internet 协议 (TCP/IP) 且基于 Windows 的计算机上,Windows 会检测网络媒体是否处于“链接状态”。只要 Windows 检测到媒体处于“故障”状态,它就会从该适配器...
    Windows 包含“媒体感知”功能。在使用传输控制协议/Internet 协议 (TCP/IP) 且基于 Windows 的计算机上,Windows 会检测网络媒体是否处于“链接状态”。只要 Windows 检测到媒体处于“故障”状态,它就会从该适配器中删除绑定的协议,直到检测到该适配器重新“正常工作”时为止。你的异常应该就是Windows 检测检测不到正常造成的。也就是说你需要更改系统注册表以使系统网络适配器检测此状态。(提醒下,修改注册表之前,一定要先进行备份,修改此注册表有一定风险,若因错误操作可能需要重装系统。步骤是微软提供的。)要禁止网络适配器检测该链接状态,请按照下列步骤操作。注意:NetBEUI
     和 IPX 无法识别“媒体感知”。 使用注册表编辑器 (Regedt32.exe) 来查看下面的注册表项: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters 添加以下注册表值: 数值名称:DisableDHCPMediaSense数据类型:REG_DWORD - 布尔值数值数据范围:0、1(False、True)默认值:0 (False) 说明:此参数控制 DHCP 媒体感知行为。如果将此数值数据设置为 1,DHCP(甚至非
     DHCP)客户端就会忽略来自接口的媒体感知事件。默认情况下,媒体感知事件触发 DHCP 客户端执行操作,例如,试图获取租约(当发生连接事件时),或者使接口和路由无效(当发生连接断开事件时)。重新启动计算机。注意:在 Windows Server 2003 中,控制媒体感知的函数已添加到群集系统中。即使注册表中的 DisableDHCPMediaSense 未经设置或设置为 0 (False),群集系统也会将媒体感知更改为已禁用。随后,由于要启用媒体感知的系统的需要,DisableClusSvcMediaSense
     注册表值被引入到 SP1 中。通过使用以下注册表子项,可以设置群集系统的控制函数的打开/关闭:- 项:HKEY_LOCAL_MACHINE\Cluster\Parameters- 数值名称:DisableClusSvcMediaSense- 数据类型:REG_DWORD - 布尔值- 数据范围:0、1(False、True)- 默认值:0 (False)。DisableClusSvcMediaSense 默认值为 0 (False)。因此,控制函数处于打开状态,而媒体感知处于禁用状态。可以将 DisableClusSvcMediaSense
     设置为 1 (True)。这样,控制函数变为关闭状态。之后,您便可以使用 DisableDHCPMediaSense 注册表项设置媒体感知的启用/禁用状态了。这与 Windows 2000 Server 中的群集环境类似。注意:如果您禁用“媒体感知”功能,则可能会遇到一些问题。例如,假设您的计算机上安装了两个网络适配器,如果在您禁用“媒体感知”功能后,其中的一个网络适配器不能工作,则该适配器将取消绑定。此外,如果配置了默认网关,则会删除关联的路由,以使所有通信通过另一个网络适配器进行。另举一例,当您从计算机上断开网络电缆时,如果禁用了“媒体感知”功能,则通知区域的“本地连接”图标将显示“网络电缆没有插好”状态消息。此外,当您运行“ipconfig”命令时,会收到“Media
     State .....:Cable Disconnected”消息。但在此情况下,网络适配器已绑定到 TCP/IP。要验证网络适配器是否已绑定到 TCP/IP,请查看路由表。要查看路由表,请使用“route print”命令。路由表可显示网络适配器的 IP 地址。还可以使用“ping”命令 ping 网络适配器的 IP 地址,以验证网络适配器是否已绑定到 TCP/IP。
    
    展开全文
  • 使用vc开发的windows udp组播发送程序,在局域网中只能达到1~2M/S。就是简单的建立socket,设置socket为组播,加入组播地址,然后就发送数据了,但是性能只能这个速度,是需要设置什么吗
  • Windows多网卡环境接收组播

    千次阅读 2020-05-07 15:08:09
    title: “Windows多网卡环境接收组播包” subtitle: “跨过千山万水,踏遍海角天涯–I got it!” date: “2018-01-14” author: “cj” tags: multicast windows multiple-interfaces c++ 说明:本文仅针对IPv4 ...
  • 创建组播时: struct in_addr dest; dest.s_addr = chooseRandomIPv4SSMAddress(env); const Port rtpPortVideo(videoRTPPortNum);  const Port rtcpPortVideo(videoRTPPortNum+1);  rtpGroupsockVideo = n
  • 摘要: 本文主要是在windows平台下,设计一个UDP多播(组播)发送和接收程序。
  • 查看当前加入的组播

    千次阅读 2018-11-27 16:17:48
    命令netstat -gan查看本机当前加入的组播组:
  • windows网络编程之组播

    千次阅读 2016-10-31 09:28:35
    #define MCASTADDR "233.0.0.1" //本例使用的多播组地址。 #define MCASTPORT 5150 //绑定的本地端口号。 #define BUFSIZE 1024 //接收数据缓冲大小。 int main( int argc,char ** argv) { WSADATA wsd; struct...
  • 记录Windows10上收不到组播问题

    千次阅读 2020-11-20 10:19:55
    最近两天为了做一个局域网内设备搜索功能的小工具,首先就想到用组播实现,根据网上的代码(Qt的)写好发送端和接收端,在同一个电脑上测试没有任何问题,放在同一个交换机下就不行,相互之间不能通信。 根据网上的...
  • 在TX2嵌入式开发板上(Ubuntu操作系统)编写网络组播发送接收程序,首先了解一下组播. linux多播编程 linux多播编程步骤: 1&gt;建立一个socket; 2&gt;设置多播的参数,例如超时时间TTL,本地回环...
  • 组播在双网卡或者多网卡下,系统会根据路由表自动选择网卡发送命令,但是会导致一些网卡发送数据异常,这时候就需要绑定ip来解决这个问题了。 我被这个问题纠结了几天,网上的资料也很少,在查找无数资料后,终于...
  • Windows NLB单和多的区别

    千次阅读 2015-04-08 17:55:30
    Windows NLB(网络负载均衡)是 Windows 2000 Server 开始在操作系统上提供的一种负载平衡技术。NLB 使用一种分布算法将负载均衡分布到多台主机上,从而提高基于 IP 的关键型服务...Windows NLB有单与多两种模式,
  • 组播

    千次阅读 2009-09-05 21:19:00
    1992年出现支持IP组播的Mbone(组播主干网)和Mbone桌面工具;1993-1996年IP Multicast成为业界关注的焦点,然而因发展条件不成熟使得IP组播只为业界所关注;进入1999年以来,IP组播具备了发展的三个关键条件:支持...
  • ubuntu下组播问题总结

    千次阅读 2017-02-10 09:28:26
    程序大概讲下,服务器A通过组播发出数据,服务器B接收A发出的组播数据,windows下收发一切正常。 在向linux(ubuntu16.04)移植时,服务器B接收不到组播数据,使用tcpdump是可以抓到组播数据的。 尝试了网上找到的很...
  • 加入一个组播

    千次阅读 2016-05-12 12:51:55
    网络中的一台主机如果希望能够接收到来自网络中其它主机发往某一个组播组的数据报,那么这么主机必须先加入该组播组,然后就可以从组地址接收数据包。在广域网中,还涉及到路由器支持组播路由等,但本文希望以一个...
  • 主机怎么加入组播

    万次阅读 2018-04-30 21:12:00
    组播也是一种IP包,也有源IP地址,目的IP地址,源IP地址为组播源的服务器IP地址,目的地址为一个特殊的IP地址,它位于 224.0.0.0 - 239.255.255.255 中,由于 224.0.0.0/8用于本地链路,即一跳的组播,239.0.0.0/8 ...
  • 一、什么是组播: 1、组播的特点 1)什么是组播?  组播是一种数据包传输方式,当有多台主机同时成为一个数据包的接受者时,出于对带宽和CPU负担的考虑,组播成为了一种最佳选择。 2)组播如何进行工作?  ...
  • IP组播及实例

    千次阅读 2015-03-31 18:07:32
    组播网络体系结构包括:组播的基本工作原理、实现组播的条件、组播的地址分配方案及与MAC地址映射、Internet组管理协议。 2.1组播的工作原理 组 播是一种允许一个或多个发送者(组播源)发送单一的数据包到多个...
  • Android开发:组播(多播)与广播

    千次阅读 2016-05-04 14:00:15
    近期由于需要编写能够使同一局域网中的Android客户端与PC端进行自动匹配通信功能的程序,学习并试验了JAVA组播与广播的内容,记录一些理解如下: 一.组播(多播) 背景知识:组播使用UDP对一定范围内的地址发送...
  • 如何发送UDP组播

    千次阅读 2016-02-25 22:52:00
    socket通信术语上有三种通信方式:单播,广播,多播(也称组播),多播的IP地址是D类地址,地址范围为224.0.0.0 ~239.255.255.255,这里不多说,到后面将物联网模块配网方式,会详细介绍广播知识,组播知识说明。...
  • 单播、多播(组播)和广播的区别

    千次阅读 2019-01-17 16:17:42
    、多和广播单”(Unicast)、“多”(Multicast)和“广播”(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思?区别何在? 1.单:网络节点之间的通信就好像...
  • WIN7 下 解决 组播 IGMP 问题

    千次阅读 2019-09-16 15:31:04
    最近在做一个项目,需要用到组播的功能,程序调试完了以后,在XP下可以正常实现组播,不过到了WIN7下以后就无法使用组播了,搞了很久,最后在网络课老师的指点下,发现应该是IGMP(组播协议)版本的问题,解决方法...
  • CCIE知识点总结——组播

    千次阅读 2018-05-14 23:28:51
    CCIE专题之组播
  • windows下用python加入指定源组播的时候,执行语句 s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_SOURCE_MEMBERSHIP, imr) 报错[Errno 10049],上下文错误! 运行环境为 Win10 64bit,python2.7 python3.6 32...
  • 局域网内组播接收失败

    千次阅读 2019-01-07 14:58:41
    最近进行组播通信时,由于接收组播的服务部署在windows,linux(ubuntu,mac)等环境下。windows环境下。出现windows下的服务接收不到组播数据包。网上都建议修改注册表。为了安全起见,不建议采用。 总结原因如下: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,116
精华内容 23,646
关键字:

windows查看组播