c++绑定多网卡 组播通信

7 篇文章 0 订阅

多网卡时,通过绑定网卡IP地址的方式实现绑定网卡 解决组播收不到数据的问题


	server.sin_family = AF_INET;
	server.sin_port = htons(pszRemotePort); ///server的监听端口   
	server.sin_addr.s_addr = inet_addr(pszRemoteIP); ///server的地址   1

	server1.sin_family = AF_INET;
	server1.sin_port = htons(pszRemotePort); ///server的监听端口   
	server1.sin_addr.s_addr = inet_addr(pszRemoteIP); ///server的地址   1

	printf("Winsock 客户端端口: %d!\n", client.sin_port);

	if (WSAStartup(MAKEWORD(2, 2), &wsaData)) //初始化  
	{
		printf("Winsock无法初始化!\n");
		WSACleanup();
		return false;
	}
	socket1 = socket(AF_INET, SOCK_DGRAM, 0);
	printf("客户端开始创建SOCKET。\n");

	memset(&client, 0, sizeof(client));/*初始化IP多播地址为0*/
	printf("Winsock 客户端端口0: %d!\n", nLocalPort);
	client.sin_family = AF_INET;
	client.sin_port = htons(nLocalPort); //客户端端口6050  
	client.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

	if (bind(socket1, (sockaddr*)&client, sizeof(sockaddr)) < 0)
	{
		printf("端口绑定失败!\n");
		return  false;
	}
	
	socket2 = socket(AF_INET, SOCK_DGRAM, 0);
	int reuse = 1;
	setsockopt(socket2, IPPROTO_IP, IP_MULTICAST_LOOP, (char *)&reuse, sizeof(reuse));
	memset(&client1, 0, sizeof(client1));/*初始化IP多播地址为0*/
	client1.sin_family = AF_INET;
	client1.sin_port = 0;
	client1.sin_addr.s_addr = inet_addr(localIP);
	if (bind(socket2, (sockaddr*)&client1, sizeof(sockaddr)) < 0)
	{
		closesocket(socket1);
		//closesocket(socket2);
		printf("socket2端口绑定失败!\n");
		return  false;
	}

	 if_addr = inet_addr(localIP);
	//setsockopt(socket2, SOL_SOCKET,SO_DONTROUTE, (const char*)&if_addr, sizeof(if_addr));//打开路由查找功能
	setsockopt(socket1, SOL_SOCKET, SO_DONTROUTE, (const char*)&if_addr, sizeof(if_addr));
	/*设置回环许可*/
	int loop = 1;
	int err = -1;
	err = setsockopt(socket1, IPPROTO_IP, IP_MULTICAST_LOOP, (char *)&loop, sizeof(loop));
	if (err < 0)
	{
		perror("setsockopt():IP_MULTICAST_LOOP");
		return false;
	}

	mreq.imr_multiaddr.s_addr = inet_addr(pszRemoteIP); /*广播地址*/
	//多播网卡绑定
	mreq.imr_interface.s_addr = inet_addr(localIP);
	/*将本机加入广播组*/ //IP_ADD_MEMBERSHIP
	err = setsockopt(socket1, IPPROTO_IP,12 , (char *)&mreq, sizeof(mreq));
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C组播通信库是一种用于在计算机网络中实现组播通信的软件库。组播通信是一种网络通信方式,它可以在多个设备之间传输相同的数据,适用于需要向多个接收方发送相同数据的场景。 C组播通信库可以提供一组函数或模块,用于管理组播通信。它可以允许开发人员设置组播地址,加入或离开组播组,发送和接收组播数据等操作。通过使用C组播通信库,开发人员可以更方便地实现组播通信功能而不需要编写底层的网络通信代码。 下载C组播通信库可以通过以下步骤完成: 1. 在网络上搜索可靠的C组播通信库。可以通过搜索引擎或软件开发社区找到一些常用的C组播通信库。 2. 选择合适的C组播通信库。根据自己的需求和项目要求,选择适合的C组播通信库进行下载。可以参考其他开发者的评价、文档和示例代码等来做出决策。 3. 找到可下载的资源。在C组播通信库的官方网站或相关软件开发平台上找到可以下载的资源。通常,会提供压缩文件或源代码的下载选项。 4. 下载和解压缩库文件。选择合适的版本和文件类型,将库文件下载到本地计算机中。然后,通过压缩软件解压缩库文件,得到可用的源代码或库文件。 5. 阅读文档和示例代码。在开始使用C组播通信库之前,建议阅读官方文档和示例代码。文档通常会包含使用说明、函数接口、配置指南等,而示例代码可以帮助开发人员更好地理解如何使用该库。 6. 集成库文件到项目中。通过将C组播通信库的源代码或库文件添加到项目中,可以开始在项目中使用组播通信功能。 总的来说,下载C组播通信库需要在互联网上搜索、选择、下载和集成。在下载之后,开发人员可以使用该库来实现组播通信功能,从而满足多设备间数据共享或广播的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Acnidouwo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值