一、客戶端**
c++**
#include "stdafx.h"
#include
#include
#pragma comment(lib, "ws2_32.lib")
#define server_address "192.168.10.56"
#define port 5150
#define msgsize 1024
int main(int argc, char* argv)
// clean up
closesocket(sclient);
wsacleanup();
return 0;
}
這是乙個最簡單的客戶端**,負責傳送資料,然後接受返回。
二、使用select模型的伺服器
c++**
// write by larry
// 2009-8-20
// this is server using select model.
#include "stdafx.h"
#include
#include
#define port 5150
#define msgsize 1024
#pragma comment(lib, "ws2_32.lib")
int g_itotalconn = 0;
socket g_clisocketarr[fd_setsize];
dword winapi workerthread(lpvoid lpparam);
int main(int argc, char* argv)
return 0;
} dword winapi workerthread(lpvoid lpparam)
; char szmessage[msgsize];
while (true)
// we only care read event
ret = select(0, &fdread, null, null, &tv);
if (ret == 0)
for (i = 0; i
}
else
} } }
}
這是非同步模型中最簡單的一種,伺服器端的幾個主要流程如下:
1.建立監聽套接字,繫結,監聽;
2.建立工作者執行緒;
3.建立乙個套接字陣列,用來存放當前所有活動的客戶端套接字,每accept乙個連線就更新一次陣列;
4.接受客戶端的連線。
分享到:
六種Socket I O模型
完成埠模型 抽象出乙個完成埠大概的處理流程 1 建立乙個完成埠。2 建立乙個執行緒a。3 a執行緒迴圈呼叫getqueuedcompletionstatus 函式來得到io操作結果,這個函式是個阻塞函式。4 主線程迴圈裡呼叫accept等待客戶端連線上來。5 主線程裡accept返回新連線建立以後,...
Socket I O 模型的效能引數
伺服器 p4 17g xeon,記憶體768mb i o 模型 嘗試數 成功連線數 使用記憶體 k 未分頁記憶體池 cpu 線程式 吞吐率 byte s 阻塞 7000 1008 25632 36121 10 60 2016 2198148 非阻塞 7000 4011 4208 135123 95 ...
winsock之select選擇模型
由於使用傳統的socket模型在處理大量的客戶端時需要不斷的開闢多餘的執行緒,這樣無非會很大程度上浪費系統資源,因此,我們需要一種能夠管理套接字的模型。最簡單的select選擇模型可以採用一種有序的方式,輪詢fd set集合,從而同時進行對多個套接字的管理。所用結構體 typedef struct ...