套接字函式詳細介紹

2022-08-19 20:54:10 字數 3595 閱讀 2301

套接字函式介紹

套接字函式通常封裝在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 這種約定,一台計算機可以接收其他計算機...