- 1、本文档共60页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
【网络编程】之一、初识WinSocket
Winsock是Windows下的网络编程接口,它是由Unix下的BSD Socket发展而来,是一个与网络协议无关的编程接口。
Winsock在常见的Windows平台上有两个主要的版本,即Winsock1和Winsock2。编写与Winsock1兼容的程序你需要引用头文件WINSOCK.H,如果编写使用Winsock2的程序,则需要引用WINSOCK2.H此外还有一个MSWSOCK.H头文件,它是专门用来支持在Windows平台上高性能网络程序扩展功能的。使用WINSOCK.H头文件时,同时需要库文件WSOCK32.LIB,使用WINSOCK2.H时,则需要WS2_32.LIB,如果使用MSWSOCK.H中的扩展API,则需要MSWSOCK.LIB。正确引用了头文件,并链接了对应的库文件,你就构建起编写WINSOCK网络程序的环境了。
OK,下面我们来看看具体用法:
初始化winsocket
每个Winsock程序必须使用WSAStartup载入合适的Winsock动态链接库,如果载入失败,WSAStartup将返回SOCKET_ERROR,这个错误就是WSANOTINITIALISED,WSAStartup的定义如下:
[cpp]?view plain?copy
int?WSAStartup(??
????WORD?wVersionRequested,??
????LPWSADATA?lpWSAData??
);??
wVersionRequested指定了你想载入的Winsock版本,其高字节指定了次版本号,而低字节指定了主版本号。你可以使用宏MAKEWORD(x, y)来指定版本号,这里x代表主版本,而y代表次版本。lpWSAData是一个指向WSAData结构的指针,WSAStartup会向该结构中填充其载入的Winsock动态链库的信息。
lpWSAData是一个指向WSAData结构的指针,WSAStartup会向该结构中填充其载入的Winsock动态链库的信息。
[cpp]?view plain?copy
typedef?struct?WSAData???
{??
????WORD???????????wVersion;???????//wVersion为你将使用的Winsock版本号??
????WORD???????????wHighVersion;//wHighVersion为载入的Winsock动态库支持的最高版本,??
注意,它们的高字节代表次版本,低字节代表主版本。??
????char???????????szDescription[WSADESCRIPTION_LEN?+?1];???
????char???????????szSystemStatus[WSASYS_STATUS_LEN?+?1];//上面两个变量由特定版本的Winsock设置,实际上没有太大用处。??
????unsigned?short?iMaxSockets;//表示最大数量的并发Sockets,其值依赖于可使用的硬件资源。??
????unsigned?short?iMaxUdpDg;//?iMaxUdpDg表示数据报的最大长度??
????char?FAR?*?????lpVendorInfo;//是为Winsock实现而保留的制造商信息,??
这个在Windows平台上并没有什么用处.??
}?WSADATA,?*?LPWSADATA;???
当你使用完Winsock接口后,要调用下面的函数对其占用的资源进行释放:??? int WSACleanup(void);如果调用该函数失败也没有什么问题,因为操作系统为自动将其释放,对应于每一个WSAStartup调用都应该有一个WSACleanup调用.
错误处理:
Winsock函数调用失败大多会返回 SOCKET_ERROR(实际上就是-1),你可以调用WSAGetLastError得到错误的详细信息:
[cpp]?view plain?copy
int?WSAGetLastError?(void);??
对该函数的调用将返回一个错误码,其码值在WINSOCK.H或WINSOCK2.H(根据其版本)中已经定义,这些预定义值都以WSAE开头.同时你还可以使用WSASetLastError来自定义错误码值.
代码示例:
下面是来自msdn的示例:
[cpp]?view plain?copy
#define?WIN32_LEAN_AND_MEAN??
??
#include?windows.h??
#include?winsock2.h??
#include?ws2tcpip.h??
#include?stdio.h??
?
您可能关注的文档
- 大功率数字电视发射双工器教案分析.ppt
- Whenwasheborn-SectionB2b课文介绍.ppt
- Whichisthedeepestsaltlakeintheworldtell介绍.ppt
- 大海的歌生字教案分析.ppt
- 土地管理学教案分析.doc
- 多元统计方差教案分析.doc
- WHTM20150408-024-连接器返修不良介绍.ppt
- 多元统计聚类判别教案分析.ppt
- 多元统计学期末论文教案分析.docx
- 多元文化与教育教案分析.doc
- 1420mm酸轧产线点冷系统工作原理及故障分析.pdf
- 2025年瑜伽教练资格证考试题库:瑜伽教学环境与设备管理试题.docx
- 2025年日语N2水平测试模拟试卷:日语N2考试阅读理解能力提高.docx
- 2025年消防员考试题库:消防法律法规精解与消防设施操作实践试题.docx
- 2025年心理咨询师基础理论知识测试卷:心理咨询心理治疗方法.docx
- 2025年心理咨询师基础理论知识测试卷:必备核心考点解析试题.docx
- 2025年心理咨询师基础理论知识测试卷:心理测评技术专项练习试题.docx
- 2025年秋季学期高中英语必修8同步练习题试卷.docx
- 2025年软件设计师考试软件工程实践与创新团队文化建设试题.docx
- 2025年葡萄牙语等级考试葡萄牙语阅读理解难点解析试卷.docx
文档评论(0)