套接字i/o模型
1:select模型
select模型是一種常見的模型,通過select函式來確定套接字狀態。在網路應用程式中,通過乙個執行緒來設計乙個迴圈,不停的呼叫select函式,判斷套接字上是否存在資料或者是否能夠向套接字寫入資料等
int select(int nfds,fd_set far *readfds, fd_set far *writefds,fd_set far * exceptfds, const struct timeval far * timeout)
nfds:無實際意義
readfds表示一組可讀套接字
writefds表示一組可寫套接字
exceptfds表示一組被檢查有錯誤的套接字
timeout表示函式的等待時間
返回值:如果函式呼叫成功,在readfds,writefds、exceptfds引數中將儲存滿足條件的套接字元素,並且函式返回值為滿足條件的套接字數量。如果函式呼叫超出了timeout設定的時間,返回值是0,如果函式呼叫失敗,返回值是socket_error
為了方便使用者對fd_set型別的引數進行操作,vc++提供了四個巨集
1:fd_clr(s, *set) :從集合中刪除套接字
2:fd_isset(s,*set):判斷套接字s是否為集合set中的一員,如果是返回值為0,否則為0
3:fd_set(s,*set):向集合中新增套接字s
4:fd_zero(*set):將集合set初始化為null;
下面一段**判斷套接字上是否有資料可讀
fd_set fdread; //定義乙個fd_set物件
fd_zero(&fdread); //初始化fdread
fd_set(clientsock,&fdread); //將套接字clientsock新增到fdread中
if(select(0,&fdread,null,null,null)>0) //呼叫select函式
if(fd_isset(clientsock,&fdread)//判斷clientsock是否是fdread中一員
//從套接字中讀取資料
2:wsaasyncselect模型
wsaasyncselect模型是winsows系統基於訊息的網路事件通知模型。當網路中有事件發生時,利用使用者的連續請求,則應用程式中指定的視窗將會接受到乙個訊息,可以通過處理訊息函式對網路中的事件進行處理。
int wsaasyncselect(socket s,hwnd hwnd,unsigned int wmsg,long levent)
hwnd:表示接收訊息的視窗控制代碼
wmsg表示視窗接受來自套接字中的訊息
levent表示網路中發生的事
其中對於levent事件有
fd_read :套接字中有資料讀取時傳送訊息
fd_write:當輸出緩衝區可用區時發出訊息
fd_oob:套接字中有外帶資料讀取時發生訊息
fd_accept:有連線請求時發出訊息
fd_connect:當連線完成後發出訊息
fd_close:套接字關閉時發出訊息
下面通過一段**描述wsaasyncselect模型的使用
1:自定義乙個訊息
#define wm_socker wm_user+20
2:新增乙個訊息處理函式,用於處理網路中的事件
lresult cdialogdlg::onsocket(wparam wparam,lparam lparam)
int nevent=wsagetselectevent(lparam);//讀取網路18:40
int nerror=wsagetselecterror(lparam);//讀取錯誤**
switch(nevent)
case fd_connect:……
case fd_read :……
return 0;
3:新增訊息對映巨集,將自定義訊息與訊息處理函式關聯
on_message(wm_socket,onsocket)
4:呼叫wsaasyncselect函式套接字模型
int nret=wsaasyncselect(clientsock,m_hwnd,wm_socket,fd_read|fd_write|fd_connect);
if(nret!=0)
trace(「設定wsaasyncselect模型失敗」);
套接字模型
套接字i o模型 1 select模型 select模型是一種常見的模型,通過select函式來確定套接字狀態。在網路應用程式中,通過乙個執行緒來設計乙個迴圈,不停的呼叫select函式,判斷套接字上是否存在資料或者是否能夠向套接字寫入資料等 int select int nfds,fd set f...
4 套接字模式 選擇模型
winsock提供了一些i o模型幫助應用程式以非同步方式在乙個或者多個套接字上管理i o。大體上,這樣的i o模型共有6中 阻塞模型,選擇模型,wsaasyncselect模型,wsaeventselect模型,重疊模型和完成埠模型。本章先介紹套接字模型 選擇模型 wsaasyncselect模型...
4月19日 python學習總結 套接字模組的使用
import socket phone socket.socket socket.af inet,socket.sock stream 買 phone.bind 127.0.0.1 8081 插手機卡,補充 0 65535 0 1024給系統用的 phone.listen 5 開機print sta...