#include “winsock.h” //引用頭文件
#pragma comment(lib,”ws2_32.lib”) //鏈接庫文件
此外,使用套接庫函數前需要初始化套接字,使用函數WSAStartup()實現,例如:
WSADATA wsd; //定義WSADATA對象
WSAStartup(MAKEWORD(2,2),&wsd); //初始化套接字
下面介紹壹些套接字函數
1:WSAStartup函數:用於初始化動態連接庫,而且不可或缺
int WSAStartup(WORD wVersionRequested,LPWSADATA lpWDADATA)
//用法參見前面幾行代碼
2:socket函數:用於創建壹個套接字
SOCKET socket(int af, int type, int protocol)
Af:表示壹個地址家族,通常是AF_INET
type:表示套接字類型,SOCK_STREAM:創建面向連接的流式套接字;SOCK_DGRAM:表示創建面向無連接的數據報套接字,SOCK_RAW:表示創原始套接
protocol:表示所用的協議,不指定時可以設置為0
函數的返回值是創建的套接字句柄。
3:bind函數:用於將套接字綁定到指定的端口和地址上
int bind(SOCKET s,const struct sockadddr FAR * name, int namelen)
s:表示套接字標誌
name:是壹個sockaddr結構指針,包含了端口和地址
namelen:確定name緩沖區長度
返回值:成功返回0;失敗返回SOCKET_ERROR
4: listen函數:用於將套接字設置為監聽模式。對於流式套接字必須是該模式
Int listen(SOCKET s, int backlog)
Backlog: 表示等待連接的最大隊列長度
5:accept函數:用於接收客戶端的鏈接
SOCKET accept(SOCKET s, struct sockaddr FAR *addr, int FAR * addlen)
S:壹個套接字標誌,應該處於監聽狀態
addr:包含壹組客戶端的端口和地址信息
addlen:用於接收參數addr的長度
返回值:壹個新的套接字,它對應於已經接受的客戶端連接,對於該客戶端的所有後續操作,都應該使用這個新的套接字。
6:closesocket函數:關閉套接字。int closesocket(SOCKET s);
7:connect函數:用於發送壹個連續請求
int connect(SOCKET s, const struct sockaddr FAR * name, int namelen)
name:表示套接字想鏈接的主機地址和端口號
namelen:表示緩沖區長度
成功返回0,否則為SOCKET_ERROR。
8:recv函數:用於從面向連接的套接字中接收數據
int recv(SOCKET s, char FAR *buf,int len, int flags)
buf:接收數據的緩沖區
len:buf的長度
flags表示函數的調用方式 MSG_PEEK:表示查看傳來的數據,MSG_OOB表示用來處理外帶數據
9:send函數:用於在面向連接方式的套接字間發送數據
int send(SOCKET s, const char FAR * buf, int len, int flags)
buf要發送數據緩沖區的大小
flags函數的調用方式
10:select函數:用來檢查壹個或多個套接字是否處於可讀、可寫或錯誤狀態
Int select(int nfds,fd_set FAR *readfds, fd_set FAR *writefds,fd_set FAR * exceptfds, const struct timeval FAR * timeout)
nfds:無實際意義
readfds表示壹組可讀套接字
writefds表示壹組可寫套接字
exceptfds表示壹組被檢查有錯誤的套接字
timeout表示函數的等待時間
11:WSACleanup函數:用於釋放從Ws2_32.dll動態連接庫初始化分配的資源
Int WSACleanup(void)