套接字函式介紹
套接字函式通常封裝在ws2_32.dll動態連線庫中,標頭檔案是winsock2.h,因此使用者需要引用標頭檔案和鏈結庫
#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
函式的返回值是建立的套接字控制代碼
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: 表示等待連線的最大佇列長度
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)
namelen:表示緩衝區長度
成功返回0,走則為socket_error
8:htons函式:將乙個16位的無符號短整型資料由主機排列方式轉換成網路排列方式
u_short htons(u_short hostshort)
hostshort:表示乙個主機排列方式的無符號整形資料
返回值是乙個網路排序的無符號短整型資料
9:htonl函式:表示將乙個主機排列的長整型資料有主機排列轉換成網路排列
u_long htonl(u_long hostlong);
unsigned long inet_addr(const char far * cp);
cp:表示乙個ip位址的字串
返回乙個32位無符號長整數
11:recv函式:用於從面向連線的套接字中接收資料
int recv(socket s, char far *buf,int len, int flags)
buf:接收資料的緩衝區
len:buf的長度
flags表示函式的呼叫方式 msg_peek:表示檢視傳來的資料
msg_oob表示用來處理外帶資料
12;send函式:用於在面向連線方式的套接字間傳送資料
int send(socket s, const char far * buf, int len, int flags)
buf要傳送資料緩衝區的大小
flags函式的呼叫方式
13: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表示函式的等待時間
14:wsacleanup函式:用於釋放從ws2_32.dll動態連線庫初始化分配的資源
int wsacleanup(void)
15:wsaasyncselect函式,用於將網路中發生的事情關聯到視窗的某個訊息中
int wsaasyncselect(socket s,hwnd hwnd,unsigned int wmsg,long levent)
hwnd:表示接收訊息的視窗控制代碼
wmsg表示視窗接受來自套接字中的訊息
levent表示網路中發生的事
16:ioctlsocket函式:用於設定套接字的i/o模式
int ioctlsocket(socket s, long cmd, u_long far * argp)
cmd:操作命令:如果是fionbio,argp為0時,表示禁止非阻塞模式,argp為非0時表示設定是非阻塞模式。如果是fionread表示從套接字中可以讀取的資料量。siocatmark 表示是否所有的外帶資料都已被寫入。
argp表示命令引數
s:表示套接字
lpcbtransfer:表示本次操作實際接受或傳送的位元組數
fwait: true表示除非i/o操作完成,否則函式不會返回,false表示如果函式進行中,則函式立即返回false
lpdwflags:表示一組標記,通常來自於wsarecv函式的lpflags引數
18createiocompletionport函式,表示用於建立完成埠物件
handle creareiocompletionport(handle filehandle, handle exitingcompetionport,ulong_ptr completionkey,dword numberofconcurrentthread);
filehandle:表示完成埠的關聯物件。如果是建立完成埠,引數為invalid_handle_value;
exitingcompetionport:表示關聯filehandle物件的完成埠,如果建立完成埠,引數是null
completionkey:表示埠的完成鍵值,使用者指定乙個自定義的結構指標,用於表示關聯完成埠的附加資料
numberofconcurrentthread:表示允許同時執行的使用者執行緒的最大數量,通常設定為0,表示系統根據cpu數量確定
套接字函式詳細介紹
套接字函式介紹 套接字函式通常封裝在ws2 32.dll動態連線庫中,標頭檔案是winsock2.h,因此使用者需要引用標頭檔案和鏈結庫 include winsock.h 引用標頭檔案 pragma comment lib,ws2 32.lib 鏈結庫檔案 此外,使用套接庫函式前需要初始化套接字,...
套接字函式詳細介紹
套接字函式介紹 套接字函式通常封裝在ws2 32.dll動態連線庫中,標頭檔案是winsock2.h,因此使用者需要引用標頭檔案和鏈結庫 include winsock.h 引用標頭檔案 pragma comment lib,ws2 32.lib 鏈結庫檔案 此外,使用套接庫函式前需要初始化套接字,...
socket套接字介紹
由於最近要完成自己的專案作業,其中需要使用socket進行網路通訊。所以簡單了解了一些這方面的知識,希望可以拋磚引玉。socket 的原意是 插座 在計算機通訊領域,socket 被翻譯為 套接字 它是計算機之間進行通訊的一種約定或一種方式。通過 socket 這種約定,一台計算機可以接收其他計算機...