Windows程序设计学习笔记——Winsock和udp

2023-05-16

Winsock是处理网络的Windows api,使用前先包含头文件Winsock2.h以及导入静态库Ws2_32.lib

#include<Winsock2.h>
#pragma comment(lib,"Ws2_32.lib")

如果要包含Windows.h,则Windows.h要包含在Winsock2.h下方

然后需要初始化winsock库

int WSAStartup(
  __in   WORD wVersionRequested,    //应用程序支持的最高WinSock库版本
  __out  LPWSADATA lpWSAData    //dll库详细信息
);

WinSock库使用完毕后需要释放:


int WSACleanup(void);
  

udp服务端编写:

1.创建套接字:

SOCKET WSAAPI socket(
  __in  int af,
  __in  int type,
  __in  int protocol
);

函数成功返回套接字句柄,失败返回 INVALID_SOCKET 

第一个参数表示地址族,一般用AF_INET(IPV4)

第二个参数指定套接字的类型,SOCK_STREAM是流套接字,用于TCP,SOCK_DGRAM是数据报套接字,用于UDP

第三个参数表示协议类型,如下:

最后使用完毕记得关闭句柄

int closesocket(
  __in  SOCKET s
);

2.绑定端口:

int bind(
  __in  SOCKET s,    //套接字句柄
  __in  const struct sockaddr* name,    //要关联的本地地址
  __in  int namelen    //地址长度
);

该函数用于将套接字和本地地址关联起来,第struct sockaddr { ushort sa_family; char sa_data[14]; };

二个参数是一个结构体指针,指向如下结构体:

struct sockaddr {
        ushort  sa_family;    //协议族,与af参数相同
        char    sa_data[14];    //端口(2字节)+地址(4字节)
};
或
struct sockaddr_in {
        short   sin_family;    //协议族
        u_short sin_port;    //端口号
        struct  in_addr sin_addr;    //ip
        char    sin_zero[8];    //保留
};

ip地址需要填uint32_t形式,也就是一串16进制数,可以使用inet_addr函数将ip转换成长整形,如果不关心使用的地址,可以填INADDR_ANY(相当于0.0.0.0),如果想让系统分配端口号,则端口号可以填0,操作系统会在1024-5000之间选一个端口号,注意ip地址和端口号填写的字节顺序必须是网络字节顺序,所以需要如下函数转换:

u_short htons(
//端口使用该函数转换
  __in  u_short hostshort
);

u_long htonl(
//ip使用该函数转换
  __in  u_long hostlong
);


int inet_pton(
int af,     //地址族
const char *src,    //ip
void *dst    //接收一个in_addr结构体
);

3.接受数据:

int recvfrom(
  __in         SOCKET s,
  __out        char* buf,    //缓冲区
  __in         int len,       //缓冲区大小
  __in         int flags,    //linux使用,windows填0
  __out        struct sockaddr* from,    //传出参数,源地址
  __inout_opt  int* fromlen    //from参数大小
);

如果客户端没有发送数据,该函数会一直阻塞

客户端编写:

1.创建套接字,同上

2.发送数据\接收数据

由于udp不需要建立连接,所以直接使用如下api发送数据:

int sendto(
  __in  SOCKET s,
  __in  const char* buf,
  __in  int len,
  __in  int flags,
  __in  const struct sockaddr* to,    //服务器ip和端口
  __in  int tolen 
);

以上是创建udp服务端和客户端大致步骤,最后要记得释放句柄,另外如果需要与外网通信,需要做端口映射或内网穿透

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows程序设计学习笔记——Winsock和udp 的相关文章

  • 无刷电机与odrive

    无刷电机 无刷电机的优点 能获得更好的扭矩转速特性高速动态响应高效率长寿命低噪声高转速 无刷电机的简介 无刷直流电机由电动机主体和驱动器组成 xff0c 是一种典型的机电一体化产品 由于无刷直流电动机是以自控式运行的 xff0c 所以不会像
  • 无刷舵机 数字舵机 模拟舵机

    舵机 1 无刷舵机 xff1a 由 xff1a 电机 减速齿轮组 反馈电位器 控制电路构成 主电机可以使用无刷电机 xff0c 减少磨损延长使用寿命 模拟舵机需要给它不停的发送PWM信号 xff0c 才能让它保持在规定的位置或者让它按照某个
  • PCA9685如何通过iic协议控制多个舵机

    iic协议 即I2C xff0c 一种总线结构 能够有效减少芯片管脚和线路连接的数量 例如 内存中的SPD信息 通过IIC xff0c 与BX芯片组联系 xff0c IIC 存在于英特尔PIIX4结构体系中 随着大规模集成电路技术的发展 x
  • 无人机电池模块

    3 电池模块 xff1a 1 xff1a 电池的多少mah什么意思 xff1f 表示电池容量 xff0c 如5200mah电池 xff0c 表示以5 2A的电流放电 xff0c 可持续放电1小时 但是 xff0c 实际的放电时间还是要参考厂
  • 每日漏洞 | 跨站请求伪造

    01 漏洞描述 HTTP的无状态性 xff0c 导致Web应用程序必须使用会话机制来识别用户 一旦与Web站点建立连接 访问 登录 xff0c 用户通常会分配到一个Cookie xff0c 随后的请求 xff0c 都会带上这个Cookie
  • 每日漏洞 | rsync未授权访问

    01 漏洞描述 rsync是Linux Unix下的一个远程数据同步工具 xff0c 可通过LAN WAN快速同步多台主机间的文件和目录 xff0c 默认运行在873端口 由于配置不当 xff0c 导致任何人可未授权访问rsync xff0
  • 每日漏洞 | 不安全的HTTP方法

    01 漏洞描述 HTTP HTTP报文 中介绍了HTTP的请求方法 在这些方法中 xff0c HTTP定义了一组被称为安全方法的方法 xff1a GET HEAD OPTIONS TRACE xff0c 这些方法不会产生什么动作 xff0c
  • 每日漏洞 | Host头攻击

    01 漏洞描述 HTTP HTTP报文 最后一节 xff0c 简单的介绍了一下首部字段 xff0c 其中就包含了Host首部字段 为了方便获取网站域名 xff0c 开发人员一般依赖于请求包中的Host首部字段 例如 xff0c 在php里用
  • 每日漏洞 | HTTP.sys远程代码执行

    01 漏洞描述 上篇文章介绍了Host头攻击 xff0c 今天我们讲一讲HTTP sys远程代码执行漏洞 HTTP sys是Microsoft Windows处理HTTP请求的内核驱动程序 xff0c 为了优化IIS服务器性能 xff0c
  • miivii域控制器(Xavier)实现TensorRT加速后的Ultra-Fast-Lane-Detection项目

    TRT ONNX2是神力模型转换工具链 鸡汤哥知乎金天 一 配置TRT ONNX2 1 安装依赖 xff08 2020 09 30更新 xff09 昨天刷了JetPack4 4 xff0c 很好用 xff01 只需要下载编译thor即可 x
  • 每日漏洞 | CRLF注入

    01 漏洞描述 在 HTTP HTTP报文 一文中 xff0c 我们介绍了HTTP报文的结构 xff1a 状态行和首部中的每行以CRLF结束 xff0c 首部与主体之间由一空行分隔 或者理解为首部最后一个字段有两个CRLF xff0c 首部
  • PTES-情报搜集

    01 概述 在 PTES 渗透测试执行标准 中介绍了渗透测试的一般流程 xff0c 其中简要介绍了情报搜集的目标 情报搜集的目标是尽可能多的收集渗透对象的信息 网络拓扑 系统配置 安全防御措施等 xff0c 在此阶段收集的信息越多 xff0
  • 每日命令 | ls

    01 每日命令系列导语 安全行业 xff0c 接触Linux不可避免 今天我们开启Linux学习之旅 一直在构思Linux系列文章该怎么排版 xff0c 最终决定采用每日命令的形式 xff0c 毕竟Linux有大量的命令需要学习 每日命令系
  • c51单片机(预备知识)

    1 什么是单片机 单片机又称单片微控制器 它不是完成某一个逻辑功能的芯片 而是把一个计算机系统集成到一个芯片上 相当于一个微型的计算机 xff0c 和计算机相比 xff0c 单片机只缺少了I O设备 xff08 小键盘 LED显示器 xff
  • 一级指针和二级指针的传参问题(学习笔记)

    一 指针 一级指针 xff1a 是一个指针变量 xff0c 指向一个普通变量 xff0c 并保存该普通变量的地址 二级指针 xff1a 是一个指针变量 xff0c 指向一个一级指针 xff0c 并保存该一级指针的地址 二 一级指针的引用 2
  • UDP广播的实现

    一 广播的概念 广播 xff1a 由一台主机向该主机所在子网内的所有主机发送数据的方式 任何一个网段最后一个地址就是广播的地址 例如 xff1a 192 168 5 103主机发送广播信息 xff0c 那么 xff0c 广播地址为192 1
  • 必备模块知识——继电器

    一 继电器的概念 1 1 什么是继电器 继电器是一种电控制器件 xff0c 是当输入量的变化达到规定要求时 xff0c 在电气输出电路中使被控量发生预定的阶跃变化的一种电器 继电器具有控制系统和被控制系统 xff0c 通常应用于自动化的控制
  • 必备模块知识——超声波传感器

    一 超声波传感器 1 什么是超声波 人们能听到声音是由于物体振动产生的 xff0c 它的频率在20HZ 20KHZ范围内 xff0c 超过20KHZ称为超声波 xff0c 低于20HZ的称为次声波 常用的超声波频率为几十KHZ 几十MHZ
  • typedef的用法——c语言

    一 ypedef 1 1 xff1a typedef的用法 xff08 如上图所示 xff09 typedef 用法一句话总结 把定义的类型改名 举个例子 xff1a 我们熟悉的int类型 定义一个变量 xff0c 如int a xff1b
  • shell的测试语句

    一 shell的条件测试语句 在写shell脚本时 xff0c 经常遇到的问题就是判断字符串是否相等 xff0c 可能还要检查文件状态或进 行数字测试 xff0c 只有这些测试完成才能做下一步动作 1 1 shell脚本中的条件测试如下 x

随机推荐

  • 在miivii域控制器(基于Xavier)上复现Ultra-Fast-Lane-Detection源论文项目

    源项目链接 一 安装 参考源项目安装教程 xff0c 个别步骤有改动 xff1a 1 我没有安装Anaconda xff0c 所以跳过步骤2 2 步骤3中安装pythorch torchvision的血泪史 xff1a 网上看了很多下载py
  • shell的控制语句(3)

    shell脚本与我们所用的c语言控制语句 xff0c 是存在一些差异的 xff0c 因此 xff0c 我们需要重新认识并且学会它们 因此 xff0c 接下来 xff0c 我会介绍常用的流程控制语句 如 xff1a if for while
  • shell的函数

    一 shell函数 有些脚本段间互相重复 xff0c 如果能只写一次代码块而在任何地方都能引用那就提高了代码的可重用性 shell 允许将一组命令集或语句形成一个可用块 xff0c 这些块称为 shell 函数 二 shell函数的格式 2
  • Visual Studio 2015(C#)编写实现TCP调试助手(服务端+客户端一体)-新手

    近期在做项目的时候运用到了WIFI模块 xff0c 想着自己捣鼓捣鼓弄个上位机调试调试 初次接触 xff0c 长达3天的修修改改终于完成 xff0c 实现代码比较杂乱 xff0c 但是可以正常使用 不足之处 xff0c 还望指正 xff01
  • IDEA This is not a valid Java qualified name问题解决

    今天在创建类的时候突然出现这样的一个错误 This is not a valid Java qualified name 出现这个错误的主要原因是因为类名出现了空格 我是在类名前有一个空格
  • 双系统ubuntu18.04如何更新到22.04

    将双系统中的Ubuntu 18 04更新到22 04 xff0c 按照以下步骤操作 xff1a 1 打开终端并更新系统 xff0c 使用以下命令 xff1a span class token function sudo span span
  • 如何查看自己的ubuntu系统的镜像源,并且换源

    1 查看自己的Ubuntu系统当前使用的镜像源 xff1a 1 打开终端 xff1a 按下Ctrl 43 Alt 43 T xff0c 或者在菜单中搜索 终端 2 输入以下命令并按Enter键 xff1a span class token
  • QT项目2048游戏(C++)(附流程图、源码)

    在学校学完C语言后用easyX图形库写了一个2048游戏 xff0c 在大概学完C 43 43 后用QT改进了一下的2048游戏 游戏框图 流程图 开始界面 游戏中的界面 游戏结束界面 改进之处 1 添加了背景音乐 2 添加了结束游戏后重新
  • 用 Saleae Logic 16 示波器测量并分析 I2C、SPI、串口的信号

    文章目录 一 安装Saleae Logic 16软件二 Saleae Logic 16简单介绍1 Saleae Logic 16 逻辑分析仪2 Saleae Logic 16软件 三 三个实例1 I2C信号2 SPI信号3 串口信号 四 总
  • TCP通信—客户端与客户端的双向通信

    功能 xff1a 1 实现客户端与客户端之间的TCP双向通信 xff1b 2 服务器记录客户端实名连接 xff0c 并显示客户端数据记录 xff1b 3 客户端退出 xff0c 服务器和另一客户端显示相应提示 xff1b 服务器代码思路 x
  • xshell登录wsl

    配置ssh server 卸载 span class token function sudo span span class token function apt get span remove openssh server 安装 span
  • 获取form表单中的数据对象集合

    form表单中直接获取所有数据的对象集合 form表单中的数据获取方法 我们在开发中如果出现form表单 xff0c 那么肯定我们是要获取用户在表单中填写的数据 xff0c 当然如果一个个去那大每一个输入框中的数据 xff0c 也是可取的
  • JavaScript中的window.location的使用

    window location对象可以用于获取当前页面地址 xff08 url xff09 并把浏览器重定向到新页面 location对象的属性与对应的属性值 xff1a window location href 返回当前页面的href u
  • js原生实现本地图片转base64上传服务器(js,jq,html)

    这里写自定义目录标题 上传过程 xff1a htmljs 上传过程 xff1a 1 xff0c 使用input xff1a type 61 file读取本地图片 xff1b 2 xff0c 使用new FileReader 将 图片转化为b
  • AJAX异步请求原理与过程;

    AJAX异步请求原理和过程 1 AJAX创建异步对象XMLHttpRequest xff1a AJAX 的要点是 XMLHttpRequest 对象 不同的浏览器创建 XMLHttpRequest 对象的方法是有差异的 IE浏览器使用 Ac
  • vue生命周期图解(带注释)

    vue生命周期图解 xff08 带注释 xff09
  • c++ class和struct的区别是什么?

    c 43 43 class和struct的区别是什么 在c 43 43 中使用struct和class xff0c 定义类的唯一区别就是默认的访问权限 c 43 43 primer第五版 没错 c 43 43 中class和struct几乎
  • 让程序编译更优雅的几个CMake命令

    简介 本文通过一个工程示例介绍了几个让程序编译更优雅的CMake命令 文末有完整下载地址 该工程示例首先生成一个动态库 xff08 libversion dll xff1a 该库主要用于打印版本相关的信息 xff09 xff0c 然后在一个
  • Fast-Planner安装

    Fast Planner安装 Fast Planner是港科大沈老师课题组的项目 xff0c 该项目是为了实现四旋翼无人机能在复杂未知环境下快速飞行 首先到Fast Planner的github网址下 xff0c 查看README xff0
  • Windows程序设计学习笔记——Winsock和udp

    Winsock是处理网络的Windows api 使用前先包含头文件Winsock2 h以及导入静态库Ws2 32 lib include lt Winsock2 h gt pragma comment lib 34 Ws2 32 lib