windows下IPv6组播(C++、MFC)
Server
#include <stdio.h>
#include <Ws2tcpip.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
#define PORT 6060
#define IP "ff02::2"
#define BUF_LEN 256
int main(int argc, char* argv[])
{
WSADATA wsaData;
WORD wVersionRequested; // 版本
wVersionRequested = MAKEWORD(1, 1); //版本信息
WSAStartup(wVersionRequested, &wsaData); //初始化Windows套接字库
//使用此结构来指定将套接字连接到的本地或远程端点地址
struct sockaddr_in6 addr = { AF_INET6, htons(PORT) }; //创建一个UDP套接字
int l_nServer;
if ((l_nServer = socket(AF_INET6, SOCK_DGRAM, 0)) < 0)
{
perror("创建失败");
return -1;
}
bind(l_nServer, (struct sockaddr*)&addr, sizeof(addr));
//ipv6_mreq结构提供了用于IPv6地址的多播组的信息。
struct ipv6_mreq group;
//将接口索引指定为0,则使用默认的多播接口。
group.ipv6mr_interface = 0;
//IPv6组播组的地址。
inet_pton(AF_INET6, IP, &group.ipv6mr_multiaddr);
//将套接字加入到指定接口上提供的多播组。此选项仅对数据报和原始套接字有效(套接字类>型必须为SOCK_DGRAM或SOCK_RAW)。
setsockopt(l_nServer, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, (char*)&group, sizeof(group));
int l_naddLen = sizeof(addr);
int l_nReadLen = 0;
char msgbuf[BUF_LEN];
printf("等待接收\n");
while (1)
{
l_nReadLen = recvfrom(l_nServer, msgbuf, BUF_LEN, 0, (struct sockaddr*)&addr, &l_naddLen);
if (l_nReadLen < 0)
{
perror("接收失败");
exit(1);
}
msgbuf[l_nReadLen] = '\0';
printf("%s\n", msgbuf);
strcpy_s(msgbuf, "world");
int l_nLen = sendto(l_nServer, msgbuf, strlen(msgbuf), 0, (struct sockaddr*)&addr, sizeof(addr));
if (l_nLen < 0)
{
perror("发送失败");
exit(1);
}
printf("Send %s\n", msgbuf);
} return 0;
}
Cilect
#include <stdio.h>
#include <Ws2tcpip.h>
#include <winsock2.h>
#define HELLO_PORT 7905
#define HELLO_GROUP "224.0.0.1"
#pragma comment(lib,"ws2_32.lib")
int main(int argc, char* argv[])
{
WSADATA wsaData;
WORD wVersionRequested;
wVersionRequested = MAKEWORD(1, 1);
// Initialize Windows socket library
WSAStartup(0x0202, &wsaData);
int l_nCilect;
struct sockaddr_in6 addr = { AF_INET6, htons(6060) };
/* 创建一个UDP套接字 */
if ((l_nCilect = socket(AF_INET6, SOCK_DGRAM, 0)) < 0)
{
perror("创建失败");
exit(1);
}
inet_pton(AF_INET6, "ff02::2", &addr.sin6_addr);
char message[128];
int l_naddLen = sizeof(addr);
while (1)
{
strcpy_s(message, "hello");
int l_nLen = sendto(l_nCilect, message, strlen(message), 0, (struct sockaddr*)&addr, sizeof(addr));
if (l_nLen < 0)
{
perror("发送失败");
exit(1);
}
printf("Send %s\n", message);
Sleep(1000);
int l_nReadLen = recvfrom(l_nCilect, message, strlen(message), 0, (struct sockaddr*)&addr, &l_naddLen);
if (l_nReadLen < 0)
{
perror("接收失败");
exit(1);
}
message[l_nReadLen] = '\0';
printf("%s\n", message);
}
return 0;
}
windows下IPv6组播(C++、MFC)的更多相关文章
- linux下播放组播流出现setsockopt:No such device错误
在linux下播放组播流出现setsockopt:No such device错误是因为多播IP没有add路由表里面 可以采用如下命令完成: root@android:/ # busybox rout ...
- SDN网络IPv6组播机制支持实时视频业务海量用户扩展
以 OpenFlow 技术为核心的软件定义网络(SDN)框架具有集中控制的功能能够自己感知网络拓扑的变化,在细粒度的路径选择.接入控制.负载均衡方面有着天然的优势,为 IPv6 组播功能的实现提供了好 ...
- 关于组播数据包“发不出去",c#无法接收
问题一:发不出去 最近做一个小东西改进方案需要用到组播,简单来说就是我先作为服务器端组播发送设备编号,然后组播成员作为客户端接收消息后先确认对方是不是在呼叫我.是的话就返回一个消息,这样我服务器端就可 ...
- IP组播技术介绍及实现例子
引 言 近年来,随着Internet的迅速普及和爆炸性发展,在Internet上产生了许多新的应用,其中不少是高带宽的多媒体应用,譬如网 络视频会议.网络音频/视频广播.AOD/VOD.股市行情发布. ...
- CCIE路由实验(6) -- 组播Multicasting
1.组播IGMP的各种情况2.PIM Dense-Mode3.PIM Sparse-Mode4.PIM双向树和SSM5.动态RP之auto-rp6.动态RP之BSR7.Anycast RP8.域间组播 ...
- IP组播
1 IP组播基础 IP组播技术有效地解决了单点发送.多点接收的问题.组播源只发送一份数据,被传递的信息在距组播源尽可能远的网络节点才开始被复制和分发,并且只发送给需要该信息的接收者. 说明: 本章 ...
- IP组播技术
1 概述 1.1 产生背景 传统的IP通信有两种方式:一种是在源主机与目的主机之间点对点的通信,即单播:另一种是在源主机与同一网段中所有其它主机之间点对多点的通信,即广播.如果要将信息发送给多 ...
- 组播基本概念、IGMP、IGMP监听学习笔记
前言 一直对组播这个概念迷迷糊糊,特别是交换机处理组播的方式,非常想搞懂但是懒癌发作.这几天终于耐心地看了下有关组播的资料,大致了解了一下同一广播域内组播的相关知识.组播占了计算机网络的一大部分,特别 ...
- 【miscellaneous】VLC组播与接收
搭建组播服务器 第一步:运行程序后选择"媒体--串流": 第二步:通过"添加"选择需要播放的文件(以wmv文件为例),单击"串流": 第三 ...
- TCP/IP 笔记 - 广播和本地组播
在之前第二章介绍IP寻址的时候有介绍到,IP地址有4种:单播.组播.广播.任播. 单播,客户端与服务器之间点到点连接通信: 组播,在发送者和多个接收者(如某个特定的分组)之间实现点对多点的连接通信: ...
随机推荐
- javascript:eval()的用法
eval() 是 JavaScript 中的一个全局函数,它可以计算或执行参数.如果参数是表达式,则 eval() 计算表达式:如果参数是一个或多个 JavaScript 语句,则 eval() 执行 ...
- EMAS移动测试-远程真机篇
简介: 导读:本文将介绍申请远程真机以及在远程真机上执行测试任务的详细操作,包括申请远程真机.安装应用.扫码.定位.性能测试等. 一.移动测试概览 移动测试服务(Mobile Testing)是为企业 ...
- 一站式云原生智能告警运维平台——SLS新版告警发布!
简介: 本文介绍什么是云原生可观测性需求以及告警限制,介绍一站式云原生智能告警运维平台--SLS新版告警. 前言 本篇是SLS新版告警系列宣传与培训的第一篇,后续我们会推出20+系列直播与实战培训视频 ...
- 如何快速开发 Serverless Devs Package ?
简介:目前,开发者开发 Serverless Package 的流程相对来说是比较简单的.因为在 Serverless Devs 开发者工具中,已经提供了相对完整的脚手架能力,一文了解详情~ 作 ...
- 云原生数据仓库AnalyticDB支撑双11,大幅提升分析实时性和用户体验
简介:2021年双十一刚刚落幕,已连续多年稳定支持双十一大促的云原生数据仓库AnalyticDB,今年双十一期间仍然一如既往的稳定.除了稳定顺滑的基本盘之外,AnalyticDB还有什么亮点呢?下面 ...
- Spring Cloud Gateway一次请求调用源码解析
简介: 最近通过深入学习Spring Cloud Gateway发现这个框架的架构设计非常简单.有效,很多组件的设计都非常值得学习,本文就Spring Cloud Gateway做一个简单的介绍,以及 ...
- [Linux] IP 地址配置, 网络地址配置文件
# 查看与配置网络状态命令 $ ifconfig # 临时设置 eth0 网卡的 IP 地址与子网掩码,netmask 可以省略 $ ifconfig eth0 192.168.0.100 netma ...
- LVGL SCROLL循环滚动
一.案例测试 这里我使用LVGL的版本是8.3.3 运行案例 lvgl_examples\scroll\lv_example_scroll_6 效果如下所示 二.现象 这里先描述一下现象,当我们使用 ...
- 关于QQ群炸了的说明
ABAP 7.5学习群不幸被腾讯封了,想要聊天的群友可以加以下两个群, ABAP 7.5历史研究小组 728466742 ABAP 7.5 备份群 582240105
- redo日志全部丢失的情况下。Oracle的实例恢复
场景: redo日志全部丢失的场景. alert日志报错如下: ORA-00313: 无法打开日志组 1 (用于线程 1) 的成员 ORA-00312: 联机日志 1 线程 1: '/u01/app/ ...