WinSock IO模型 重疊模型

2021-06-16 20:09:15 字數 1820 閱讀 7898

設計的原理便是:讓應用程式使用乙個重疊的資料結構,一次投遞乙個或者多個io請求。

1.建立乙個套接字,並在指定的埠上監聽。

2.建立成功以後,將其與本地的介面繫結到一起,便可以進行重疊的io操作。

3.接收乙個進入的請求。

結構體的說明:

注:函式通常會失敗,返回socket_error狀態wsa_io_penging(io操作未完成);

6.使用4中的事件陣列,呼叫wsawaitformultipleevents等待與重疊關聯事件變成傳信狀態。

7.wsawaitformultipleevent函式完成後,針對事件陣列,呼叫wsaresetevent重設事件物件,並對完成的重疊請求進行處理;

(in socket s, //重疊操作開始時,與之對應的套接字

out lpdword lpcbtransfer, //負責接收一次重疊傳送或者接收實際傳輸的位元組

in bool fwait,  //確定函式是否應該等待一次未完成的重疊操作完成;true表示一直等到操作完成再返回;

out lpdword lpdwflags  //負責接收結果標誌   

)返回值的分析:該函式成功返回的true,表示我們的重疊io已經完成。而且lpcbtransfer函式指向的值已經得到更新,如果返回的是false則可能是一下的原因:1.重疊的io仍然在待決的狀態。

2.重疊io完成,但是有錯誤。

3.重疊io的完成狀態不可以判斷,因為傳遞給該函式的乙個或者多個引數存在錯誤;

9.在套接字上投遞裡另外乙個重疊wsarecv請求。

10.重複6--9;

示例**:

#include "stdafx.h"

#include #include #include #pragma comment(lib,"ws2_32.lib")

#define port 5150

#define data_buffer 4096

int _tmain(int argc, _tchar* argv)

slisten=socket(af_inet,sock_stream,ipproto_tcp);

if (slisten==invalid_socket)

sockaddr_in listenaddr;

listenaddr.sin_addr.s_un.s_addr=htonl(inaddr_any);

listenaddr.sin_family=af_inet;

listenaddr.sin_port=htons(port);

if (bind(slisten, (psockaddr)&listenaddr, sizeof(listenaddr)) == socket_error)

if (listen(slisten, 5))

printf("listening...\n");

saccept=accept(slisten,null,null);

if (slisten==invalid_socket)

eventarray[eventtotal]=wsacreateevent();

eventtotal++;

wsabuf.buf=buffer;

wsabuf.len=data_buffer; }

while(true)

//post another wsarecv on socket;

flags=0;

wsabuf.buf=buffer;

wsabuf.len=data_buffer;

}} return 0;

}

VC 網路程式設計 WINSOCK I O模型

window 下的套接字以來兩種方式執行i o操作,阻塞io 非阻塞io,一般預設使用的是阻塞io 即執行緒會等待不會把控制權利立刻返回給程式,這就意為乙個執行緒在某乙個時候只能夠去執行乙個io操作。如果服務端想和多個客戶端同時進行通訊的話就要使用多執行緒程式設計,但是會增加開銷,如果採用非阻塞io...

winsock i o的select模型的學習

include include include pragma comment lib,ws2 32.lib bool insertsock socket psock,socket sock if nindex fd setsize 1 return false return true int mai...

重疊 overlapped 模型

include include include include pragma comment lib,ws2 32 define buffer size 1024 typedef struct socket obj socket obj,psocket obj typedef struct buff...