socket 多個客戶端下select的寫法

2021-08-03 00:25:43 字數 797 閱讀 3113

看windows網路程式設計第二版的時候,看到select模型,書上只有乙個客戶端連線的例子,如果是多個客戶端的話,服務端就需要適當的改一下,下面是我自己改的步驟,不過還有很多細節沒有處理,將就著看看;

1.一些初始化的操作

//初始化版本

int init_ret = wsastartup(makeword(2,2), &data);

if(init_ret == socket_error)

//有客戶端連線了,就把所有連線的客戶端socket乙個個fd_set,新增到fd_read集合中

for(std::vector::iterator it = vec_socket.begin(), isize = vec_socket.end(); it != isize; ++it)

//開始檢索各個sokcet的讀寫狀態

int ret = -1;

timeval timeval;

timeval.tv_sec = 1; //這裡一定要設定乙個很小的超時,如果把select的最後乙個引數設定成null,多個客戶端socket的話,就有點問題了,可以自己試試

timeval.tv_usec = 0;

if((ret = select(0, &fd_read, null, null, &timeval)) == socket_error)

; recv(fd_read.fd_array[i], buff, 1024, 0);

std::cout《服務端大概就是這4個步驟了,客戶端的話隨便寫乙個阻塞模式的就行,多開幾個客戶端去連線服務端;

源**在此:

socket模型處理多個客戶端

最近學完了簡單的socket程式設計,發現其實socket的網路程式設計其實並沒有什麼難度,只是簡單的函式呼叫,記住客戶端與服務端的步驟,寫起來基本沒有什麼問題。在伺服器程式的設計中,乙個伺服器不可能只相應乙個客戶端的鏈結,為了響應多個客戶端的鏈結,需要使用多執行緒的方式,每當有乙個客戶端連線進來,...

SOCKET客戶端程式設計

1.建立socket物件 socket建構函式有4個引數,第乙個是family,代表位址家族af net,af net6等,第二個是type,套接字型別sock stream 流套接字 和sock dgram 資料報套接字 import socket s socket.socket socket.a...

Socket實現HTTP客戶端

前些日子用 wininet做專案。功能忒強大了。但總覺得管理cookie有點不方便。即使設定了自己手動管理cookies。這天上掉餡餅的事還真的常常發生。比如你之前用瀏覽器訪問了這個站,留下了cookie 你再用wininet訪問的時候,這個餡餅就出現了。封包不難 連線後。將 headers一股腦堆...