Socket I O模型之選擇 select

2021-06-13 13:35:50 字數 1354 閱讀 4332

一、客戶端**

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 ...