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种:单播.组播.广播.任播. 单播,客户端与服务器之间点到点连接通信: 组播,在发送者和多个接收者(如某个特定的分组)之间实现点对多点的连接通信: ...
随机推荐
- redis 一百二十篇(历史发展)之第二篇
正文 简介: Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化, ...
- Jedis连接踩坑日记
Jedis连接踩坑日记 背景: 线上某块业务的增删改功能全部都不可用.页面发送了xhr请求之后 状态一直处于pending状态,后端没有日志产生 排查路线与解决办法 第一:由于服务在内网里面,无法进行 ...
- 上架即封神!3.6k Star 的开源游戏模拟器,Delta 冲上 App Store 免费榜
一直以来,苹果设备的应用商店(App Store)都是禁止游戏模拟器上架,所以 iPhone/iPad 用户不能直接安装 GBA.红白机之类的模拟器应用,这也让想在 iPhone 上重温童年游戏机的机 ...
- 剑指offer39(Java)-数组中出现次数超过一半的数字(简单)
题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, ...
- 力扣393(java)-UTF-8编码验证(中等)
题目: 给定一个表示数据的整数数组 data ,返回它是否为有效的 UTF-8 编码. UTF-8 中的一个字符可能的长度为 1 到 4 字节,遵循以下的规则: 对于 1 字节 的字符,字节的第一位设 ...
- 一首歌的时间,手把手搭建基于FC的网站
简介: 不是杰伦的那一首歌啦~ 部署网站 说好不哭 在接触serverless架构之前,我们如果想实现上线一个Web网站,就要在开发前期经过操作很多冗杂但又必须的步骤,不少小白可谓是快速的从入门到退坑 ...
- VSCode 中安装 esp-idf
一.准备工具 首先需要安装好 VSCode 软件和 esp-idf 环境. 安装 VSCode VSCode 安装比较简单,我就不赘述了,进入官网下载一键安装即可 VSCode官网:https://c ...
- STM32的半主机与MicroLIB机制
一.半主机模式 半主机机制的作用 半主机是作用于ARM目标的一种机制,可以将来自STM32单片机应用程序的输入与输出请求传送至运行仿真器的PC主机上.使用此机制可以启用C库中的函数,如printf() ...
- 大模型_2.2:Prompt示例
1.行业洞察分析 行业洞察分析的方法论:使用麦肯锡工作法可以快速了解一个行业. Step1:通过搜索分析几十个与该行业相关的关键词,覆盖该行业的上下游,以获取全面的信息. Step2:阅读一些行业最新 ...
- Docker推送镜像到Dockerhub
登录docker hub官网注册账号 https://hub.docker.com/signup 登录账户,创建一个仓库 "Create Repository"--> 输入命 ...