库文件: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 函数) |