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