Socket API函数介绍:WSAStartup与WSACleanup函数详解
前言


几种典型的应用编程接口
API
抽象

struct sockaddr_in {
u_char sin_len; // 地址长度
u_char sin_family; // 地址族
u_short sin_port; // 端口号
struct in_addr sin_addr; // IP地址
char sin_zero[8]; // 保留位,置0
}
API 函数(为例)
函数
使用的应用程序在使用之前必须首先调用函数
int WSAStartup(WORD wVersionRequested,LPWSADATA IpWSAData);
两个参数:
第一个参数指明程序请求使用的版本,其中高位字节指明副版本、低位字节指明主版本。 第二个参数返回实际的的版本信息
例:使用2.1版本的的程序代码段
wVersionRequested = MAKEWORD(2, 1);
err = WSAStartup(wVersionRequested, &wsaDara);
函数
应用程序在完成对请求的库的使用,最后要调用函数,解除与库的绑定,释放库所占用的系统资源。
int WSACleanup(void)
函数
创建套接字,操作系统返回套接字描述符(sd)
sd = socket(protofamily, type, proto);
第一个参数(协议族):对于TCP/IP协议族, = (TCP/IP) 第二个参数(套接字类型) 第三个参数(协议号):0为默认

函数
关闭一个描述符为sd的套接字,如果多个进程共享一个套接字,调用将套接字引用计数减1,减至0才关闭。
int closesocket(SOCKET sd);
一个进程中的多线程对一个套接字的使用无计数:如果进程中的一个现场调用将一个套接字关闭,该进程中的其他线程也将不能访问该套接字。
Bind 函数

绑定套接字的本地端点地址:IP地址+端口号
int bind(sd, localaddr, addrlen);
函数
置服务器端的流套接字处于监听状态。
int listen(sd, queuesize);
函数
客户端程序调用函数来使客户套接字(sd)与特定计算机的特定端口(saddr)的套接字(服务)进行连接。其仅用于客户端。
int connect(sd, saddr, saddrlen);
函数
服务端调用函数从处于监听状态的流套接字sd的客户连接请求队列中取出排在最前的一个客户请求,并且创建一个新的套接字来与客户端套接字创建连接通道。
newsock = accept(sd, caddr, caddrlen);
利用新创建的套接字()与客户通信,保证服务器可以并发。
send、 函数
send函数TCP套接字(客户与服务器)或调用了函数的UDP客户端套接字。
函数用于UDP服务器端套接字与未调用函数的UDP客户端套接字。
send(sd, *buf, len, flags);
sendto(sd, *buf, len, flags, destaddr, addrlen);
recv、 函数
recv函数从TCP连接的另一端接收数据,或者从调用了函数的UDP客户端套接字接收服务器发来的数据。
函数从UDP都武器端套接字与未调用函数的UDP客户端套接字接收对端数据。
recv(sd, *buffer, len, flags);
recvfrom(sd, *buf, len, flags, sendaddr, saddrlen);
、 函数
() 函数用来设备套接字sd的选项参数
()函数用于获取任意类型、任意状态套接口的选项当前值,并把结果存入。
int setsocketopt(int sd, int level, int optname, *optval, int optlen);
int getsocketopt(int sd, int level, int optname, *optval, socklen_t optlen);



数据解析网络字节顺序
TCP/IP 定义了标准的用于协议头中的二进制整数表示:网络字节顺序( byte order)。
























