库文件:WS2_32.dll
头文件:winsock2.h
函数名 | 描述 |
---|---|
int WSAStartup(...) | 加载套接字库, 并进行套接字的版本协商 |
WSAClearUp(...) | 释放套接字 (仅成功加载后) |
SOCKET socket(...) | 创建套接字 |
int bind(...) | 绑定本地 IP 地址和端口 |
int listen( SOCKET s, int backlog ) | 启动监听模式,等待客户端连接 |
SOCKET accept(...) | 接受客户端请求,并返回套接字 |
int send(...) | 发送信息 |
int recv(...) | 接收信息 |
int connect(...) | 连接到服务器 |
int sendto(...) | 发送信息(UDP 用) |
int recvfrom(...) | 接收信息报并保存源地址(UDP 用) |
u_short htons( u_short hostshort ) | 把 16 位数值从主机字节顺序转为 TCP/IP 网络字节顺序 |
u_long ntonl( u_long hostshort ) | 把 32 位数值从主机字节顺序转为 TCP/IP 网络字节顺序 |
unsigned long inet_addr( const char FAR *p ) | 字符串 IP 转为 u_long 形式 |
char FAR * inet_ntoa( struct in_addr in ) | u_long 形式 IP 转为字符串 |
WSAGetLastError() | 取得调用失败的信息 |
int WSAStartup(WORD wVersionRequired, LPWSADATA lpWSAData); |
参数 | 描述 |
---|---|
wVersionRequired | 希望采用的套接字版本, 低位主版本, 高位副版本. 参 MAKEWORD(h,l),LOBYTE(w), HIBYTE(w) |
lpWSAData | 指向 WSADATA 结构的指针, 输出套接字的有关信息 |
返回值 | 0 : 成功 WSASYSNOTREADY : 不能加载套接字库 WSAVERNOTSUPPORTED : 版本太低不支持 |
SOCKET socket( int af, int type, int protocol ) |
参数 | 描述 |
---|---|
af | 地址族, TCP/IP 协议对应为 AF_INET |
type | Socket 类型, 1.1 版支持 SOCK_STREAM 流式套接字和 SOCK_DGRAM 数据报套接字 |
protocol | 协议, 一般指定为 0 自动使用协议 |
返回值 | 成功返回 SOCKET 数据类型的套接字描述符 INVALID_SOCKET : 调用失败 |
int bind( SOCKET s, const struct sockaddr FAR *name, int namelen ) |
参数 | 描述 |
---|---|
s | 套接字, 由 socket 函数返回 |
name | 有关套接字本地地址信息的结构, 通常应与网络协议对应, 如 sockaddr, sockaddr_in 结构 注:绑定所有本地 IP 的方法:addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY) |
namelen | 上述结构的长度 |
返回值 | 0 : 绑定成功 SOCKET_ERROR : 绑定失败 |
int listen( SOCKET s, int backlog ) |
参数 | 描述 |
---|---|
s | 套接字, 由 socket 函数返回 |
backlog | 等待队伍长度,可设为 SOMAXCONN 使用最大合理值 |
返回值 |
SOCKET accept( SOCKET s, struct sockaddr FAR * addr, int FAR * addrlen ) |
参数 | 描述 |
---|---|
s | 套接字, 由 socket 函数返回,并已经启动监听 |
addr | 客户端地址信息结构 |
addrlen | 客户端地址信息结构长度 |
返回值 | 套接字,与指定客户对应,用于收发信息 |
int send( SOCKET s, const char FAR * buf, int len, int flags ) |
参数 | 描述 |
---|---|
s | 套接字, 由 accept 函数返回 |
buf | 待发送数据 |
len | 待发送数据长度 |
flags | 一般设为 0 |
返回值 |
int recv( SOCKET s, char FAR *buf, int len, int flags) |
参数 | 描述 |
---|---|
s | 套接字 |
buf | 接收数据的缓冲区 |
len | 接收数据的缓冲区大小 |
flags | 一般设为 0 |
返回值 |
int connect(SOCKET s, const struct sockaddr FAR * name, int namelen) |
参数 | 描述 |
---|---|
s | 套接字 |
name | 服务器地址信息结构 |
namelen | 服务器地址信息结构大小 |
返回值 |
int sendto(SOCKET s,const char FAR * buf,int len,int flags,const struct sockaddr FAR * to,int tolen) |
参数 | 描述 |
---|---|
s | 套接字 |
buf | 等发送的数据 |
len | 等发送的数据大小 |
flags | 一般设为 0 |
to | 指定接收地址信息的结构 |
tolen | 上面地址信息结构的大小 |
返回值 |
int recvfrom(SOCKET s,char FAR * buf,int len,int flags,struct sockaddr FAR * from,int FAR * fromlen) |
参数 | 描述 |
---|---|
s | 套接字 |
buf | 接收数据的缓冲区 |
len | 接收数据的缓冲区大小 |
flags | 一般设为 0 |
from | 保存发送主地址信息的结构 |
fromlen | 上面地址信息结构的大小(in/out) |
返回值 |
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; |
成员 | 描述 |
---|---|
wVersion | 采用的套接字版本 |
wHighVersion | 系统现有套接字的最大版本 |
szDescription | 未知 |
szSystemStatus | 未知 |
iMaxSockets | 同时最多可打开的套接字数, 勿更改 |
iMaxUdpDg | 同时最多可打开的数据报数, 勿更改 |
lpVendorInfo | 厂商预留信息, 未用 |
struct sockaddr { u_short sa_family; /* address family */ char sa_data[14]; /* up to 14 bytes of direct address */ }; |
成员 | 描述 |
---|---|
sa_family | 地址族, TCP/IP 协议对应为 AF_INET |
sa_data | 内存分配区, 具体信息按协议各不相同 (按网络字节顺序表示) |
在 TCP/IP 环境使用此结构比较方便。
struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; |
struct in_addr { union { struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; struct { u_short s_w1,s_w2; } S_un_w; u_long S_addr; } S_un; } |
成员 | 描述 |
---|---|
sin_family | 地址族, TCP/IP 协议对应为 AF_INET |
sin_port | 端口(网络字节顺序 ,参见 htons 函数) |
sin_addr | IP 地址结构 |
sin_zero | 未用,补充长度用 |
S_addr | IP 地址 (网络字节顺序 ,参见 htonl 函数) |