【socket编程-04】WSAStartup()函数以及DLL的加载

win32下Socket编程(1)    一.win32的socket编程,是socket编程中比较经典也比较基础的一部分,根据传输方式和协议的区别,可以简单的分为TCP传递和UDP传递两种。这篇文章主要是阐述基于TCP的Socket编程。二.Socket相关API1.WSAStartupint WSAStartup( __in WORD wVersionRequested, __out 阅读详情

  声明:本博客所转《socket编程》系列教程来自C语言中文网,本文地址WSAStartup()函数以及DLL的加载,本文仅供学习交流,更多内容请支持原创!


本节讲解 Windows 下 DLL 的加载,学习 Linux Socket 的读者可以跳过。

WinSock(Windows Socket)编程依赖于系统提供的动态链接库(DLL),有两个版本:
较早的DLL是 wsock32.dll,大小为 28KB,对应的头文件为 winsock1.h;
最新的DLL是 ws2_32.dll,大小为 69KB,对应的头文件为 winsock2.h。

几乎所有的 Windows 操作系统都已经支持 ws2_32.dll,包括个人操作系统 Windows 95 OSR2、Windows 98、Windows Me、Windows 2000、XP、Vista、Win7、Win8、Win10 以及服务器操作系统 Windows NT 4.0 SP4、Windows Server 2003、Windows Server 2008 等,所以你可以毫不犹豫地使用最新的 ws2_32.dll。

使用DLL之前必须把DLL加载到当前程序,你可以在编译时加载,也可以在程序运行时加载,《C语言高级教程》中讲到了这两种加载方式,请猛击:动态链接库DLL的加载:隐式加载(载入时加载)和显式加载(运行时加载)。

这里使用#pragma命令,在编译时加载:

#pragma comment (lib, "ws2_32.lib")

WSAStartup() 函数

使用DLL之前,还需要调用 WSAStartup() 函数进行初始化,以指明 WinSock 规范的版本,它的原型为:

int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

wVersionRequested 为 WinSock 规范的版本号,低字节为主版本号,高字节为副版本号(修正版本号);lpWSAData 为指向 WSAData 结构体的指针。

关于 WinSock 规范

WinSock 规范的最新版本号为 2.2,较早的有 2.1、2.0、1.1、1.0,ws2_32.dll 支持所有的规范,而 wsock32.dll 仅支持 1.0 和 1.1。

wsock32.dll 已经能够很好的支持 TCP/IP 通信程序的开发,ws2_32.dll 主要增加了对其他协议的支持,不过建议使用最新的 2.2 版本。

wVersionRequested 参数用来指明我们希望使用的版本号,它的类型为 WORD,等价于 unsigned short,是一个整数,所以需要用 MAKEWORD() 宏函数对版本号进行转换。例如:

MAKEWORD(1, 2);  //主版本号为1,副版本号为2,返回 0x0201
MAKEWORD(2, 2);  //主版本号为2,副版本号为2,返回 0x0202
关于 WSAData 结构体

WSAStartup() 函数执行成功后,会将与 ws2_32.dll 有关的信息写入 WSAData 结构体变量。WSAData 的定义如下:

#include <stdio.h>
#include <winsock2.h>
#pragma comment (lib, "ws2_32.lib")

int main() {
	WSADATA wsaData;
	WSAStartup(MAKEWORD(2, 2), &wsaData);

	printf("wVersion: %d.%d\n", LOBYTE(wsaData.wVersion), HIBYTE(wsaData.wVersion));
	printf("wHighVersion: %d.%d\n", LOBYTE(wsaData.wHighVersion), HIBYTE(wsaData.wHighVersion));
	printf("szDescription: %s\n", wsaData.szDescription);
	printf("szSystemStatus: %s\n", wsaData.szSystemStatus);
	getchar();
	return 0;
}

运行结果:
wVersion: 2.2
wHighVersion: 2.2
szDescription: WinSock 2.0
szSystemStatus: Running

ws2_32.dll 支持的最高版本为 2.2,建议使用的版本也是 2.2。

综上所述:WinSock 编程的第一步就是加载 ws2_32.dll,然后调用 WSAStartup() 函数进行初始化,并指明要使用的版本号。

socket封装dll 立即下载

相关推荐

MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整Demo下载)

目录 MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整Demo下载) MQTT(二)在windows64位上安装Python环境 MQTT(三)Python客户端+net客户端+net服务端 简单通信 MQTT(四)树莓派开机自动运行Python客户端 MQTT(五)EMQ开源MQTT消息服务器 1 什么是 MQTT ? MQTT(Message Que...

pw的博客 10万+

网络编程 WSAStartup

b、MEKEWORD(主版本,副版本)。#pragma comment(lib,"Ws2_32.lib")//只有32位的。对应库。2、异步:多个工作同时进行。a、打开网络库/启动网络库,启动这个库,这个库里的函数/功能才能试用。//MAKEWORD:原理((WORD)(((BYTE)(((DWORD_PTR)----异步与同步:1、同步:阻塞/卡死状态。a、word 类型。#include//网络库。c、位运算、内存操作、小端存储。...

qq_52119661的博客 426

STM32F407VET6与CH395Q串口通信实战:从零搭建以太网客户端(附完整代码)

本文详细介绍了基于STM32F407VET6微控制器与南京沁恒微CH395Q以太网芯片,通过串口通信从零搭建TCP客户端应用的完整实战过程。内容涵盖硬件连接、驱动层设计、基于FreeRTOS的任务实现以及核心调试技巧,并提供了完整的代码示例,帮助嵌入式开发者快速实现设备联网功能。

weixin_29179311的博客 415

socket编程:WSAStartup函数详解

文章目录1. 函数原型和使用2. 功能3. 参数1:`WORD wVersionRequested`4. 参数2:LPWSADATA lpWSAData5. 返回值 int 官方文档:https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsastartup 1. 函数原型和使用 int WSAAPI WSAStartup( WORD wVersionRequested, LPWSADATA

超级大洋葱的博客 1万+

Java开发者必看:如何快速对接七大主流快递API(附完整代码示例)

本文为Java开发者提供了快速对接顺丰、京东、DHL等七大主流快递API的实战指南。文章深入剖析了不同API的认证、通信协议与参数差异,并提供了高可用的HTTP客户端配置、通用签名工具、SOAP请求处理以及可扩展的领域模型与适配层设计等完整代码示例,帮助开发者构建统一、健壮的物流集成框架,显著提升开发效率。

tech5的博客 728

【雕爷学编程】MicroPython手册之 Teensy 4.1 实时时钟 (RTC)

在类的初始化函数中,定义了用于控制I2C总线的i2c对象和RTC模块的I2C地址。接着,使用该引脚初始化了一个Pin对象。它还提供了8个串口,3个SPI端口,3个I2C端口,2个I2S/TDM数字音频端口,3个CAN总线(其中一个支持CAN FD),以及一个SDIO(4位数据)原生SD卡端口12。2、内存:Teensy 4.1配备了1024 KB的RAM(其中512 KB是紧密耦合的),8 MB的Flash(其中64 KB用于恢复和EEPROM模拟),以及两个位置可以选择添加更多的QSPI内存芯片。

雕爷学编程 575

C语言网络知识:套接字库函数(容…

1、WSAStartup函数   该函数用于初始化Ws2_32.dll动态链接库。在使用套接字函数之前,一定要初始化Ws2_32.dll动态链接库。   int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);  wVersionRequested:表示调用者使用的Windows Socket的版本,高字节记录修订版本,低字节记录主

ZoharAndroid的博客 1615

GEE APP:基于Sentinel-2遥感影像的植被指数(NDVI)和水体指数(NDWI)可视化应用

本文介绍了利用Google Earth Engine(GEE)平台处理Sentinel-2卫星数据的方法,重点讲解NDVI(归一化植被指数)和NDWI(归一化水体指数)的计算与应用。内容包括环境准备、数据加载与处理、指数计算原理、可视化方法以及实际应用案例。教程详细展示了如何定义研究区域、加载影像数据、进行指数运算,并生成专业统计报告和图例。文章还提供了常见问题解答和最佳实践建议,为生态环境监测、农业评估和水资源管理等场景提供了实用工具。通过JavaScript代码示例,读者可以快速掌握GEE平台的遥感影像

此星光明博客 273

WSAStartup详解

在做计网课程设计“DNS中继服务器的实现”实验中,在相关代码中看到了该函数的出现,去网上查了下相关的资料,发现这个博主写的挺全的,是我需要的内容,因此特意转到这里,方便以后查看。 原博文链接 WSAStartup( ) 这里用通俗的语言解释一下这个函数,就类似于opencv一样,要添加链接库函数,cv.lib等,要添加到附加依赖项,或者通过#pragma co

Rex's Blog 2344

Gromacs 模拟昆虫 P450 解毒酶与农药结合完整指南,仅供参考!

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1240

《UDS协议从入门到精通》系列——图解0x23:通过地址读取内存

如何读取ECU中指定内存地址的数据?图解UDS 0x23服务带你快速上手!!

车载系统攻城狮 2623

socket编程九:WSAStartup()函数以及DLL的加载

本节讲解 Windows 下 DLL 的加载,学习LinuxSocket 的读者可以跳过。 WinSock(Windows Socket)编程依赖于系统提供的动态链接库(DLL),有两个版本: 较早的DLL是wsock32.dll,大小为 28KB,对应的头文件为 winsock1.h; 最新的DLL是ws2_32.dll,大小为 69KB,对应的头文件为winsock2.h。 ...

baidu_15547923的博客 1014

L型探测器几何畸变矫正

定位像素空间位置 -> 计算水平面投影点 -> 统一物理分辨率 -> 重采样生成新图。

如果想成为中心,那么就到中心去吧。 241

c++中Socket通信函数之WSAStartup

socket通信的整个过程:     WSAStartup 此函数在应用程序中初始化winsockDLL int WSAStartup(        __in      WORD wVersionRequested,        __out      LPWSADATA lpWSAData        ); wVersionRequested        调用程序使

zacklin的专栏 9363

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Windows下的socket演示程序及加载DLL_socket如何读32位dll文件

几乎所有的 Windows 操作系统都已经支持 ws2_32.dll,包括个人操作系统 Windows 95 OSR2、Windows 98、Windows Me、Windows 2000、XP、Vista、Win7、Win8、Win10 以及服务器操作系统 Windows NT 4.0 SP4、Windows Server 2003、Windows Server 2008 等,所以你可以毫不犹豫地使用最新的 ws2_32.dll。//主版本号为2,副版本号为2,返回 0x0202。

2401_84264468的博客 1031

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C语言startup()函数,WSAStartup()函数以及DLL的加载

本节讲解 Windows 下 DLL 的加载,学习 Linux Socket 的读者可以跳过。WinSock(Windows Socket)编程依赖于系统提供的动态链接库(DLL),有两个版本:较早的DLL是 wsock32.dll,大小为 28KB,对应的头文件为 winsock1.h;最新的DLL是ws2_32.dll,大小为 69KB,对应的头文件为winsock2.h。几乎所有的 Wi...

weixin_39623082的博客 330

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

windows下的socket编程之WSAStartup函数

WSA(Windows Sockets Asynchronous,Windows异步套接字) WSAStartup是WSA的启动命令,想要调用socket相关的Winsock API函数,必须调用WSAStartup函数完成对Winsock服务的初始化,指定socket版本等信息,操作系统将该版本的socket库绑定到应用程序中,之后就可以调用所请求的socket库中的其他socket函数。 完成对请求的socket库的调用后,要调用WSACleanup函数来解除与socket库的绑定并释放socket库占

Absinth_的博客 802

[量化]《Windows Socket 初始化编程指南:从 WSAStartup 到 RAII 封装》

项目 | 说明 || **必须初始化** | 任何Winsock函数调用前必须调用WSAStartup || **版本推荐** | MAKEWORD(2, 2) - 支持IPv4/IPv6 || **配对清理** | 每次WSAStartup对应一次WSACleanup || **链接库** | ws2_32.lib || **头文件** | winsock2.h (替代winsock.h) || **错误处理** | 检查返回值,使用WSAGetLastError() |

qq_55948352的博客 341

实现WSAStartup函数建立

#include #include #define MAXINJECTSIZE (2048*7)struct tagDownInfo{WSADATA v_wsadata;SOCKET v_sock;struct sockaddr_in v_target;TCHAR v_buf[256];TCHAR v_sendbuf[256];int v_rcvid;WORD v_VersionRequest

天蓝的专栏 3203

windows下Socket编程入门---WSAStartup()的使用

#include &amp;lt;iostream&amp;gt; using namespace std; /*windows下socket编程需包含以下文件*/ #include &amp;lt;WinSock2.h&amp;gt; #pragma comment (lib, &quot;ws2_32.lib&quot;) //加载 ws2_32.dll /*** 初始化socket 成功返回0 否则非0 */ int ma

qq_42673507的博客 1468

Windows下的socket演示程序及加载DLL

已剪辑自: http://c.biancheng.net/view/2129.html上节演示了 Linux 下的 socket 程序,这节来看一下 Windows 下的 socket 程序。同样,server.cpp 为服务器端代码,client 为客户端代码。服务器端代码 server.cpp: 客户端代码 client.cpp: 将 server.cpp 和 client.cpp 分别编译为 server.exe 和 client.exe,先运行 server.exe,再运行 client.exe,输

qq_41854911的博客 722

WSAStartup

WSAStartup 百科名片 WSAStarup,是Windows SocKNDs Asynchronous的启动命令、Windows下的网络编程接口软件 Winsock1 或 Winsock2 里面的一个命令。 目录 WSAStartup 函数定义 注释 返回值 错误代码 展开 WSAStartup 函数定义

小小世界的专栏 976

一个简单的Windows下的socket程序

上节演示了 Linux 下的 socket 程序,这节来看一下 Windows 下的 socket 程序。同样,server.cpp 为服务器端代码,client 为客户端代码。 服务器端代码 server.cpp: #include #include #pragma comment (lib, "ws2_32.lib") //加载 ws2_32.dll int main(){

自学C++,会写HelloWorld 8711
上一篇: 【socket编程-03】Windows socket程序演示
下一篇: 【socket编程-05】使用socket()函数创建套接字
魔方的块
博客等级 码龄11年 1056粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值