套接字模型

2022-08-19 20:51:14 字數 2171 閱讀 1748

套接字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...