Winsock 初探

在编写Windows网络应用程序的时候,最常用的便是Winsock接口,注意它不是网络协议,你可以理解它为网络应用API。在百度百科中是这样介绍的:


” Windows下网络编程的规范-Windows Sockets是Windows下得到广泛应用的、开放的、支持多种协议的网络编程接口。从1991年的1.0版到1995年的2.0.8版,经过不断完善并在Intel、Microsoft、Sun、SGI、Informix、Novell等公司的全力支持下,已成为Windows网络编程的事实上的标准。 “

实际上Windows95以后的各个windows版本都支持Winsock2.2版本,但是Window CE 只支持1.1版本。Winsock2.2提供了更多的功能和API函数,而且区分两个版本的函数非常容易,2.2版本的API函数都以WSA开头的,除了WSAStartup, WSACleanup, WSARecvEx, 和 WSAGetLastError这几个函数也出现在1.1版本中。

使用Winsock写应用程序所需要的头文件和类库有:
  1. // 对于1.1版本
  2. #include<winsock.h>
  3. #pragma comment(lib, "wsock32.lib")
  4. // 对于2.2版本
  5. #include<winsock2.h>
  6. #pragma comment(lib, "ws2_32.lib")
现在我们来看看一个通用的Winsock应用程序框架:
  1. #include<winsock2.h>  // 头文件
  2. #pragma comment(lib, "ws2_32.lib") // 库文件加载
  3. void main(void)
  4. {
  5.    WSADATA wsaData;  // WSADATA 结构体主要包含了系统所支持的Winsock版本信息         
  6.    
  7.    // 初始化Winsock 2.2。使用WSAStartup函数,第一个参数是所要用的Winsock版本号
  8.    // 第二个参数就是WSADATA结构体的指针。如果初始化成功则返回0
  9.    // 要注意任何WinsockAPI函数都必须在初始化后使用,包括错误检查函数
  10.    // WSAGetLastError (用于查看出错详细信息)
  11.    if( WSAStartup( MAKEWORD(2,2), &wsaData) != 0 )
  12.    {
  13.       printf( "WSAStartup 无法初始化!");
  14.       return;
  15.    } 
  16.     // winsock 应用代码
  17.     // 最后应该做一些清除工作
  18.     if( WSACleanup() == SOCKET_ERROR )
  19.         printf( "WSACleanup 出错!");
  20. }
这里需要说明的有两点:
1. WSADATA结构体:
  1. typedef struct WSAData 
  2. {
  3.     WORD           wVersion;
  4.     WORD           wHighVersion;
  5.     char           szDescription[WSADESCRIPTION_LEN + 1]; 
  6.     char           szSystemStatus[WSASYS_STATUS_LEN + 1];
  7.     unsigned short iMaxSockets;
  8.     unsigned short iMaxUdpDg;
  9.     char FAR *     lpVendorInfo;
  10. } WSADATA, * LPWSADATA; 
wVersion 就是对应你所要的版本,比如1.2,高位字节对应2,低位字节对应1。
wHiVersion 是系统所支持的最高版本,如果初始化失败,这个参数仍然返回。

其他成员基本都用不到,所以不必关心。

2.对应每一个WSAStartup都要有一个WSACleanup与之对应
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值