#define win32_lean_and_mean
#include#include#pragma comment(lib,"ws2_32.lib")
#include#pragma comment(lib,"mswsock.lib")
#include#define nclient 10
enum io_type
;//資料緩衝區空間大小
#define data_buff_size 1024
struct io_data_base
;//向iocp投遞接受連線的任務
void postaccept(socket sockserver, io_data_base* pio_data) }}
//向iocp投遞接收資料的任務
void postrecv(io_data_base* pio_data)
; wsbuff.buf = pio_data->buffer;
wsbuff.len = data_buff_size;
dword flags = 0; }
}//向iocp投遞傳送資料的任務
void postsend(io_data_base* pio_data)
; wsbuff.buf = pio_data->buffer;
wsbuff.len = pio_data->length;
dword flags = 0; }
}//-- 用socket api建立簡易tcp服務端
//-- iocp server基礎流程
int main()
; _sin.sin_family = af_inet;
_sin.sin_port = htons(4567);//host to net unsigned short
_sin.sin_addr.s_addr = inaddr_any;
// 2.2 繫結sockaddr與serversocket
if (socket_error == bind(sockserver, (sockaddr*)&_sin, sizeof(_sin)))
else
// 3 監聽serversocket
if (socket_error == listen(sockserver, 64))
else
//-------iocp begin-------//
//4 建立完成埠iocp
handle _completionport = createiocompletionport(invalid_handle_value, null, 0, 0);
if (null == _completionport)
//5 關聯iocp與serversocket
//完成鍵
auto ret = createiocompletionport((handle)sockserver, _completionport, (ulong_ptr)sockserver, 0);
if (!ret)
//6 向iocp投遞接受連線的任務
io_data_base iodata[nclient] = {};
for (int n = 0; n < nclient; n++)
int msgcount = 0;
while (true)
if (error_netname_deleted == err)
printf("getqueuedcompletionstatus failed with error %d\n", err);
break;
} 接受鏈結 完成
if (io_type::accept == piodata->iotype)
向iocp投遞接收資料任務
postrecv(piodata);
} 接收資料 完成 completion
else if (io_type::recv == piodata->iotype)
printf("收到資料: sockfd=%d, bytestrans=%d msgcount=%d\n", piodata->sockfd, bytestrans, ++msgcount);
piodata->length = bytestrans;
向iocp投遞傳送資料任務
postsend(piodata);
} 傳送資料 完成 completion
else if (io_type::send == piodata->iotype)
printf("傳送資料: sockfd=%d, bytestrans=%d msgcount=%d\n", piodata->sockfd, bytestrans, msgcount);
向iocp投遞接收資料任務
postrecv(piodata);
} else
} //------------//
關閉clientsocket
for (int n = 0; n < nclient; n++)
關閉serversocket
closesocket(sockserver);
關閉完成埠
closehandle(_completionport);
//清除windows socket環境
wsacleanup();
return 0;
}
初識Linux下的C語言
最近在複習c語言的相關知識,發現自己從來沒有在linux下使用過c語言,因此在慕課網上找到了相關的教程,學習了在linux環境下執行c程式的基礎知識。記錄如下 sudo apt get install vim sudo apt get install gcc在home目錄下建立乙個用於儲存c程式的目...
window下 c 訪問mongodb之安裝驅動
windows下c 若想訪問mongodb需要安裝官方驅動。我按照官網的提示做了這個教程。廢話不說直接開始。步驟1 安裝cmake 步驟3 編譯,安裝mongo c driver cmd命令列中執行 cd mongo c driver 1.8.2 src libbson cmake g visual...
c語言在window下的多執行緒例項
include include include include int piao 100 pthread mutex t mut void tprocess1 void args else pthread mutex unlock mut if a 1 return null void tproce...