windows vc++ vs winsock2.h socket通信
时间:2020-08-01
本文章向大家介绍windows vc++ vs winsock2.h socket通信,主要包括windows vc++ vs winsock2.h socket通信使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
sendto
int sendto( SOCKET s, const char *buf, int len, int flags, const sockaddr *to, int tolen );
这个使用时需要这样来用。特别是最后的tolen,必须得是一个int参数,不能用sizeof。
int addrsize = sizeof(addrto); int len = sendto(sock, message, BUF_SIZE, 0, (SOCKADDR*)&addrto, addrsize); if (len == SOCKET_ERROR) printf("recvfrom err = %d\n", WSAGetLastError());
比如下面的用法就不行。原因不知道。
int len = sendto(sock, message, BUF_SIZE, 0, (SOCKADDR*)&addrto, sizeof(addrsize));
recv和recvfrom
recv用于tcp的stream流。recvfrom用于udp。
完整代码
不知为何,只是接收不行,需要先发送一个数据才能接收?
#define _WINSOCK_DEPRECATED_NO_WARNINGS #include <stdio.h> #include <winsock2.h> #include <ws2ipdef.h> #include <ws2tcpip.h> #include <wsipv6ok.h> #pragma comment(lib, "ws2_32.lib") #define BUF_SIZE 500 #define _WINSOCK_DEPRECATED_NO_WARNINGS int iResult = 0; WSADATA wsaData; SOCKET sock; char message[BUF_SIZE] = "send..."; SOCKADDR_IN6 addrto, addrfrom; char rcvbuf[BUF_SIZE]; typedef struct { unsigned char ver : 2; unsigned char tp_type : 1; unsigned char ackflag : 1; unsigned char res1 : 4; unsigned char seq; unsigned char ackseq; unsigned char res2; }secondhdr_t; secondhdr_t sechdr; unsigned char sequence = 0; int main(int argc, char * argv[]) { iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); sock = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP); /*需要管理员权限*/ if (sock == INVALID_SOCKET) printf("sock err = %d\n", WSAGetLastError()); addrfrom.sin6_family = AF_INET6; iResult = inet_pton(AF_INET6, "fc00::d41:0:0:d41:2", addrfrom.sin6_addr.u.Byte); addrfrom.sin6_port = htons(2020); addrfrom.sin6_scope_id = 0; addrto.sin6_family = AF_INET6; iResult = inet_pton(AF_INET6, "fc00::d41:0:0:d41:1", addrto.sin6_addr.u.Byte); addrto.sin6_port = htons(2020); addrto.sin6_scope_id = 0; iResult = bind(sock, (SOCKADDR *)&addrfrom, sizeof(addrfrom)); if (iResult == SOCKET_ERROR) printf("bind err = %d\n", WSAGetLastError()); int addrsize = sizeof(addrto); int len = sendto(sock, message, BUF_SIZE, 0, (SOCKADDR*)&addrto, addrsize); if (len == SOCKET_ERROR) printf("recvfrom err = %d\n", WSAGetLastError()); while (1) { addrsize = sizeof(addrfrom); len = recvfrom(sock, rcvbuf, BUF_SIZE, 0, (SOCKADDR*)&addrfrom, &addrsize); if(len == SOCKET_ERROR) printf("recvfrom err = %d\n", WSAGetLastError()); for (int i = 0; i < 10; i++) { printf("%X ", rcvbuf[i]); } printf("\nlen=%d\n", len); } }
原文地址:https://www.cnblogs.com/yanhc/p/13416866.html
- [实战篇] Python 运维中使用并发
- PHP数据结构(十) ——有向无环图与拓扑算法
- PHP数据结构(十一) ——图的连通性问题与最小生成树算法(1)
- 优化 MySQL: 3 个简单的小调整
- PHP数据结构(十一) ——图的连通性问题与最小生成树算法(2)
- 进程间通信的历史与未来
- PHP数据结构(十二) ——静态查找表
- 小程序中滚动条的使用,wx.pageScrollTo和<scroll-view>的对比
- 小程序中tabBar的使用
- ubuntu配置虚拟内存
- PHP数据结构(十三) ——动态查找表(二叉排序树)
- Ubuntu下配置JavaWeb开发环境
- 小程序中picker的使用|日期、时间、省市区联动都可以用它实现
- swiper组件添加左右箭头
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android视频压缩的示例代码
- Android如何从实现到封装一个MVP详解
- Android利用爬虫实现模拟登录的实现实例
- Android实现移动小球和CircularReveal页面切换动画实例代码
- Android4.4+ 实现半透明状态栏(Translucent Bars)
- Android弹出dialog后无法捕捉back键的解决方法
- Android编程设置屏幕亮度的方法
- 利用SurfaceView实现下雨与下雪动画效果详解(Kotlin语法)
- Android WebView的使用方法及与JS 相互调用
- Android标题栏上添加多个Menu按钮的实例
- Android编程解析XML文件的方法详解【基于XmlPullParser】
- 教你3分钟了解Android 简易时间轴的实现方法
- Android网络技术HttpURLConnection详解
- Ubuntu16.04下CUDA8.0和CUDA9.0共存
- Ubuntu 20.04 开启隐藏录音降噪功能(推荐)