2 3 Winsock程式設計流程

2021-08-25 11:57:37 字數 2303 閱讀 3989

使用socket函式建立乙個套接字物件:

socket socket(

int af, //指定套接字使用的位址格式,winsock只支援af_inet

int type, //指定套接字型別 sock_stream:流套接字(tcp) sock_dgram:資料報套接字(udp)

int protocol //配合type引數使用,指定套接字型別

);

函式執行失敗返回invalid_socket

也可以使用winsock2的新函式wsasocket來建立套接字,與socket相比,提供了更多引數。

當不使用socket建立的套接字時,應呼叫closesocket函式將其關閉。沒有錯誤返回0,否則返回socket_error

int closesocket(socket s);
套接字被建立後存在於指定的位址家族裡,但它是未命名的。bind函式通過安排乙個本地名稱到未命名的socket而建立此socket的本地關聯。本地名稱包含3各部分:主機位址、協議號、埠號。

int bind(

socket s, //套接字控制代碼

const struct sockaddr* name, //要關聯的本地位址

int namelen //位址的長度

);

//填充sockaddr_in結構

sockaddr_in sin;

sin.sin_family=af_inet; //指定位址家族,與af引數含義相同,智慧型用af_inet

sin.sin_port=htons(4567); //必須為網路位元組順序,因為與intel位元組順序相反,必須用htons函式轉換

sin.sin_addr.s_un.s_addr=inaddr_any;

//若應用程式不關心所使用位址,可指定internet位址為inaddr_any,系統自動使用當前主機配置的所有ip位址

//繫結這個套接字到乙個本地位址

if(::bind(slisten,(lpsockaddr)&sin,sizeof(sin))==socket_srror)

listen函式設定套接字進入監聽狀態。

int listen(

socket s, //套接字控制代碼

int backlog //監聽佇列中允許保持的尚未處理的最大連線數量

);

listen僅用再支援連線的套接字上,如sock_stream型別的他套接字,函式執行成功後,套接字s進入被動模式,到來的連線會被通知要排隊等候接受處理。

再同一時間處理多個連線請求的伺服器通常使用listen函式,若乙個連線請求到達,佇列已滿,客戶端將受到wsaeconnrefused錯誤。

accept函式用於接受到來的連線。

socket accept(

socket s, //套接字控制代碼

struct sockaddr* addr, //乙個指向sockaddr_in結構的指標,用於取得對方的位址資訊

int* addrlen //乙個指向位址長度的指標

);

對於流套接字來說,一般使用send和recv函式來收發資料。

int send(

socket s, //套接字控制代碼

const char far* buf, //要傳送資料的緩衝區位址

int len, //緩衝區長度

int flags //指定了呼叫格式,通常設定為0

);int recv(socket s,char far *buf,int len,int flags);

#include"../common/initsock.h"

#includeclnitsock initsock;

int main()

//填充sockaddr_in結構,繫結套接字到本地位址

sockaddr_in sin;

sin.sin_family=af_inet;

sin.sin_port=htons(4567);

sin.sin_addr.s_un.s_addr=inaddr_any;

return 0;

}

winsock程式設計

伺服器端 include include pragma comment lib,ws2 32.lib using namespace std void do service socket conn while 1 不斷接收客戶端傳送的資料 if lobyte wsadata.wversion 2 h...

Winsock程式設計框架

microsoft的windows sockets api是windows下的網路應用程式介面,為了適用於 windows下的訊息機制和非同步的i o選擇操作,windows sockets api在功能上擴充了將近 20個函式,其中擴充的部分均冠以字首wsa windows sockets asy...

winsock程式設計(一)

一 windows sockets 背景知識 socket的定義。socket控制代碼型別的描述。socket的應用領域。windowssockets規範為windows定義了一套面向位元組相容的網路程式設計介面。windowssockets基於unix socket 伯克利軟體發行機構,bsd,r...