用完成埠寫的echo server

2021-04-13 07:49:03 字數 1695 閱讀 2078

完成埠網上的例子很多,但覺得都挺複雜的

寫了乙個簡化版的,方便學習,也加了注釋。

有任何問題,歡迎跟我討論。

*****===**來了*****====

#include 

<

winsock2.h

>

#include 

<

mswsock.h

>

#include 

<

windows.h

>

#include 

<

iostream

>

using

namespace

std;

intg_threadcount;

handle g_hiocp 

=invalid_handle_value;

socket g_serversocket 

=invalid_socket;

//maximum buffer size

#define

max_buff_size                8192

enum

io_operation;

struct

char

buffer[max_buff_size];

wsabuf                      wsabuf;

intntotalbytes;

int=

null;

io_data 

*lpiocontext 

=null; 

wsabuf buffsend;

dword dwrecvnumbytes =0

;dword dwsendnumbytes =0

;dword dwflags =0

;dword dwiosize =0

;bool bsuccess 

=false;

intnret =0

;while( 1

) lpiocontext 

=(io_data *if

(dwiosize ==0

) //

socket closed?

if(lpiocontext

->

opcode 

==io_read) 

//a read operation complete

}else

if(lpiocontext

->

opcode 

==io_write) 

//a write operation complete

} else }

}}return0;

}void

main (

intargc, 

char

*argv)}}

}}if(createiocompletionport((handle)g_serversocket,g_hiocp,0,

0) ==null)}}

if(createiocompletionport((handle)ls,g_hiocp,0,

0) ==null)

else}}

}closesocket(g_serversocket);

wsacleanup();

}

ACE中使用完成埠

使用ace中的proactor的話,會要比我們使用我們直接寫的要來得簡單。在說proactor之前我們需要了解windows裡的完成埠的工作原理。完成埠是winnt核心裡的乙個框架。我們可以為我們的一些非同步的操作 新建乙個完成埠,然後這個完成埠會有幾個工作執行緒來處理。我們 可以將socket,或...

使用完成埠框架開發非同步模組

static handle g hiocp static dword winapi worker lpvoid pvd static const int buf len 256 struct myperiodata int tmain int argc,tchar argv printf s n p...

使用完成埠的單台伺服器最多可連線2500個客戶端

typedef struct per handle data,lpper handle data dword stdcall serverworkerthread lpvoid pletionportid void main void if pletionport createio pletionp...