WinSock网络编程基础(1)

记录学习windows网络编程过程中遇到的问题和相关笔记

 

基本概念:

 

Socket:

socket起源于UNIX,Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。基于"打开—读/写—关闭"模式,其中WinSock就是变种之一

 

以下是一个典型的C/S中使用套接字接口的概述:

 

WinSock:

WinSock是Windows平台下的网络编程接口,它是基于Unix下的BSD Socket发展而来,是一个与网络协议无关的编程接口。

WinSock目前有两个版本:

 

Winsock 1: Windows CE平台支持; 头文件:WinSock.h ; lib库:wsock32.lib

 

Winsock 2: 部分平台不支持。通过前缀WSA可以区别于Winsock 1版本。个别函数如WSAStartup、WSACleanup、WSARecvEx、WSAGetLastError都属于Winsock 1.1规范的函数; 头文件:WinSock2.h; lib库:ws2_32.lib

 

初始化WinSock:所有需要调用WinSock函数的程序都必须初始化WinSock,同时确保winsock支持该系统

#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include 
#include  #include  #include  #include  #pragma comment(lib, "Ws2_32.lib") int main() { WSADATA wsaData; int iResult; iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); if (iResult != 0) { printf("WSAStartup failed: %d\n", iResult); return 1; } WSACleanup(); return 0; }

 

WSAStartup()函数使用合适的的winsock动态链接库,成功就返回0

int WSAStartup(
  _In_  WORD      wVersionRequested,
  _Out_ LPWSADATA lpWSAData
);

 

wVersionRequested指定了你想载入的Winsock版本,其高字节指定了次版本号,而低字节指定了主版本号。可以使用宏MAKEWORD(x, y)来指定版本号,这里x代表主版本,而y代表次版本。lpWSAData是一个指向WSAData结构的指针,WSAStartup会向该结构中填充其载入的Winsock动态链接库

 

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为你将使用的Winsock版本号,wHighVersion为载入的Winsock动态库支持的最高版本,它们的高字节代表次版本,低字节代表主版本。

 

szDescription与szSystemStatus由特定版本的Winsock设置

 

iMaxSockets表示最大数量的并发Sockets,其值依赖于可使用的硬件资源。


iMaxUdpDg表示数据报的最大长度;然而,获取数据报的最大长度,需要使用WSAEnumProtocols对协议进行查询。


lpVendorInfo是为Winsock实现而保留的制造商信息,这个在Windows平台上并没有什么用处.

 

Windows 95以后的操作系统都支持Winsock 2.2的版本.

 

WSACleanup() :对占用的资源进行释放,如果调用该函数失败,操作系统为自动将其释放,对应于每一个WSAStartup调用都应该有一个WSACleanup调用.

 原文链接: http://www.bugcoding.com/entry/9

转载于:https://www.cnblogs.com/NGNL/p/4531574.html

你可能感兴趣的:(WinSock网络编程基础(1))