windows下IPv6通信(C++、MFC)
Server
#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")
using namespace std;
int main()
{
WSADATA wsaData;//初始化
//初始化Socket
WSAStartup(MAKEWORD(2, 2), &wsaData);
sockaddr_in6 RecvAddr; //服务器地址
sockaddr_in6 SenderAddr = { AF_INET6, htons(6060) }; //本地地址
char RecvBuf[1024];//发送数据的缓冲区
int BufLen = 1024;//缓冲区大小
//创建接收数据报的socket
SOCKET RecvSocket = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP); bind(RecvSocket, (SOCKADDR*)&SenderAddr, sizeof(SenderAddr));
int SenderAddrSize = sizeof(RecvAddr);
printf("服务的接收:\n");
while (1)
{
strcpy_s(RecvBuf, "hello");
int l_nLen = recvfrom(RecvSocket, RecvBuf,BufLen, 0, (SOCKADDR*)&RecvAddr, &SenderAddrSize);
if (l_nLen < 0)
{
perror("发送失败");
exit(1);
}
printf("\nSend:");
for (int i = 0; i < strlen(RecvBuf); i++)
{
printf("%02x ", (UCHAR)RecvBuf[i]);
}
int l_nReadLen = sendto(RecvSocket, RecvBuf, strlen(RecvBuf), 0, (SOCKADDR*)&RecvAddr, SenderAddrSize);
printf("\nread:");
for (int i = 0; i < l_nReadLen; i++)
{
printf("%02x ", RecvBuf[i]);
}
Sleep(1000);
}
//调用Recvfrom函数在绑定的socket上接收数据
//关闭socket,结束接收数据
closesocket(RecvSocket);
//释放资源,退出
WSACleanup();
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")
using namespace std;
int main()
{
WSADATA wsaData;//初始化
//初始化Socket
WSAStartup(MAKEWORD(2, 2), &wsaData);
sockaddr_in6 RecvAddr = { AF_INET6, htons(6060) }; //服务器地址
inet_pton(AF_INET6, "fe80::4c09:7105:c377:4bc7", &RecvAddr.sin6_addr); //服务器IP
sockaddr_in6 SenderAddr = { AF_INET6, htons(7000) }; //本地地址
char SendBuf[1024]; //发送数据的缓冲区
int BufLen = 1024; //缓冲区大小
//创建Socket对象
SOCKET SendSocket = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
bind(SendSocket, (SOCKADDR*)&SenderAddr, sizeof(SenderAddr));
int l_naddLen1 = sizeof(SenderAddr);
printf("客户端发送:\n");
while (1)
{
strcpy_s(SendBuf, "hello");
int l_nLen = sendto(SendSocket, SendBuf, strlen(SendBuf), 0, (SOCKADDR*)&RecvAddr, sizeof(RecvAddr));
if (l_nLen < 0)
{
perror("发送失败");
exit(1);
}
printf("\nSend:");
for (int i = 0; i < strlen(SendBuf); i++)
{
printf("%02x ", (UCHAR)SendBuf[i]);
}
int l_nReadLen = recvfrom(SendSocket, SendBuf, BufLen, 0, (struct sockaddr*)&SenderAddr, &l_naddLen1);
printf("\nread:");
for (int i = 0; i < l_nReadLen; i++)
{
printf("%02x ", SendBuf[i]);
}
Sleep(1000);
}
//发送完成,关闭Socket
closesocket(SendSocket);
WSACleanup();
return 0;
}
windows下IPv6通信(C++、MFC)的更多相关文章
- 转:windows下多线程通信方法
多线程知识简介 同一进程中可以包含多个线程,由于进程中的多个线程可以共享进程中的资源,所以使同一进程中的多个线程之间通信相对比较简单. 当需要有多个线程来访问一个全局变量时,通常我们会在这个全局变量前 ...
- Linux下TCP网络编程与基于Windows下C#socket编程间通信
一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使s ...
- windows下用c实现Socket通信
原文:windows下用c实现Socket通信 原本以为c是跨平台,所以,c在windows下和linux下的程序应该是类似于Java,什么都不用改变的,今儿才恍然大悟,他们的类库不一样啊-- 下面我 ...
- windows下进程间通信与线程间通信
进程间通信: 1.文件映射(Memory-Mapped Files) 文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待.因此,进程不必使用文件I/ ...
- qt在windows下的udp通信(最简单)
qt编程:windows下的udp通信 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:win7 开发环境:qt 功能: 用udp进行收发 ...
- (8)Linux(客户端)和Windows(服务端)下socket通信实例
Linux(客户端)和Windows(服务端)下socket通信实例: (1)首先是Windows做客户端,Linux做服务端的程序 Windows Client端 #include <st ...
- 一个简单的Windows下的socket程序
服务器端代码server.cpp: #include <stdio.h> #include <WinSock2.h> #pragma comment(lib,"ws2 ...
- windows下端口映射(端口转发)
windows下端口映射(端口转发) 转载: https://blog.csdn.net/i1j2k3/article/details/70228043 本文是对网文的归纳整理,算不上原创,摸索过程亲 ...
- 局域网内使用ipv6 通信
链路本地地址:用于网段内通信,不能跨路由访问 在ping本地链路地址和全球唯一地址时有点差别,链路本地地址需要加上网络接口号 Linux 查看ipv6链路本地地址:ifconfig linux系统pi ...
- Windows下多线程编程(一)
前言 熟练掌握Windows下的多线程编程,能够让我们编写出更规范多线程代码,避免不要的异常.Windows下的多线程编程非常复杂,但是了解一些常用的特性,已经能够满足我们普通多线程对性能及其他要求. ...
随机推荐
- 面向切面编程AOP[二](java @EnableAspectJAutoProxy 代码原理)
前言 @EnableAspectJAutoProxy 是启动aop功能的意思,那么里面是什么呢? 正文 @Target({ElementType.TYPE}) @Retention(Retention ...
- Android开发 Error:The number of method references in a .dex file cannot exceed 64K.Android开发 Error:The number of method references in a .dex file cannot exceed 64K
前言 错误起因: 在Android系统中,一个App的所有代码都在一个Dex文件里面. Dex是一个类似Jar的存储了多有Java编译字节码的归档文件. 因为Android系统使用Dalvik虚拟机, ...
- nginx 如何代理websocket
前言 下面是配置nginx websocket 的代码. # HTTPS server map $http_upgrade $connection_upgrade { default upgrade; ...
- 关于CDN的原理、术语和应用场景那些事
关于CDN,想必你一定看过很多官方的解释.今天,CDN百科第七期,将用一篇3844字的文章,来带你了解CDN的诞生.术语.原理.特征以及应用场景,看完这篇文章,相信你将会对CDN这项互联网基础设施有更 ...
- 企业上云如何对SLS日志审计服务进行权限控制
简介: 日志审计是信息安全审计功能的核心部分,是企业信息系统安全风险管控的重要组成部分.SLS的日志审计服务针对阿里云的多种云产品(Actiontrail.OSS.SLB.RDS.PolarDB.SA ...
- Flink CDC 2.0 正式发布,详解核心改进
简介: 本文由社区志愿者陈政羽整理,内容来源自阿里巴巴高级开发工程师徐榜江 (雪尽) 7 月 10 日在北京站 Flink Meetup 分享的<详解 Flink-CDC>.深入讲解了最新 ...
- [Go] assignment count mismatch 1 = 2
Golang 中这个错误的的意思是赋值变量的数目不匹配. 举例: result := json.Marshal(List) 由于没有给返回值中的 error 正确赋值,就会报 assignment ...
- dotnet 使用 ConfigureAwait.Fody 库设置默认的 await 同步上下文切换配置
在 dotnet 里面,使用 await 进行异步逻辑,默认是会尝试切换回调用 await 的线程同步上下文.这个机制对于大多数的上层应用来说都是符合逻辑且方便的逻辑,例如对于带 UI 线程的 WPF ...
- dotnet 根据基线包版本实现库版本兼容
本文来告诉大家如何根据 基线包版本 的功能来实现自动在构建过程中,告诉开发者,当前版本是否存在不兼容旧版本的变更.其不兼容变更包括二进制中断变更和 API 不兼容变更和源代码中断变更.可以让库开发者花 ...
- VSCode 在 windows 下默认添加 _WIN32 的问题
现象 在 VSCode 在 windows 下环境中使用时,会默认添加 _WIN32 ,会出现查看代码时,出现错误提示,现象如下 检测到 #include 错误.请更新 includePath.已为此 ...