當前位置:編程學習大全網 - 編程語言 - 2,4,4實驗總結與思考windows套接字函數使用要求有初始化和釋放的操作,如果沒

2,4,4實驗總結與思考windows套接字函數使用要求有初始化和釋放的操作,如果沒

套接字函數通常封裝在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

函數的返回值是創建的套接字句柄。

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)

  • 上一篇:購買機票的程序設計
  • 下一篇:孩子有必要學少兒編程嗎?
  • copyright 2024編程學習大全網