VC下CSocket非阻塞方式下的連線框架

2021-06-28 11:19:24 字數 2496 閱讀 1494

vc下csocket非阻塞方式下的連線框架

csocket非阻塞方式(不用自己建立執行緒)

1.服務端

應用非阻塞方式需要自己宣告乙個類繼承csokcet類

// mysocket.h : header file

class cmysocket : 

public csocket

}afx_virtual

// generated message map functions

//}afx_msg

// implementation

protected:

};// mysocket.cpp : implementation file

cmysocket::

cmysocket

(cserverdlg* pserverdlg

) cmysocket::~cmysocket

() // do not edit the following lines, which are needed by classwizard.

#if 0

begin_message_map

(cmysocket, csocket

)//}afx_msg_map

end_message_map

() #endif  // 0 /

// cmysocket member functions

void cmysocket::

onaccept

(int nerrorcode

) void cmysocket::

onreceive

(int nerrorcode

) // serverdlg.h : header file

cmysocket* m_pserver;   

//新增socket指標

cptrarray m_connectarray;       

//用於儲存連線指標的容器

// serverdlg.cpp : implementation file

void cserverdlg::

serverinit()

//服務端初始化,供別的函式呼叫

if(!m_pserver->listen

())//開始監聽

} void cserverdlg::

serveraccept()

//有客戶端連線,系統呼叫

m_connectarray.

add(connect

);    

//把這個連線新增進容器 }

void cserverdlg::

serverreceive

(cmysocket* connect

)//連線發來資料,準備接收

void cserverdlg::

socketsend

(cmysocket* connect, cstring msg

)//socket傳送資料

void cserverdlg::

serversendtoallconnect

(char* pchar

)//傳送給所有客戶端資料的函式

} void cserverdlg::

serverclose()

m_connectarray.

removeall();

} 注意:客戶端連線與斷開時,必須根據實際情況,更新存放連線容器,否則會出現錯誤

2.客戶端

//也使用了cmysocket,**同服務端cmysokcet一樣,只不過不用響應onaccept事件 //

// clientdlg.h : header file

cmysocket* m_pclient;   

//本身連線用socket //

// clientdlg.cpp : implementation file

bool cclientdlg::

clientinit()

if(!wsaeinval==m_pclient->connect

("127.0.0.1",

61111))

//連線伺服器ip的某埠(埠須和上面一直)

return

1; }

void cclientdlg::

clientreceive

(cmysocket* socket

)//客戶端接受資料

void cclientdlg::

clientsend

(cstring msg

)//客戶端傳送資料

bool cclientdlg::

clientclose()

//客戶端斷開連線

return

0; }

注意:客戶端連線與斷開時,必須根據實際情況,讓服務端只是,自己連線與斷開了,及時更新服務端的存放連線的容器

深入 CSocket 程式設計之阻塞和非阻塞模式

網路傳輸服務程序 將 socket 事件 儲存至 socket 的事件佇列中。此外,網路傳輸服務程序 還會向 socket window 傳送訊息 wm socket notify 通知有 socket 事件 產生,見下文對 socket window 的詳細說明。呼叫 csocket create...

linux下阻塞 非阻塞區別

socket基本概念 阻塞io socket 的阻塞模式意味著必須要做完io 操作 包括錯誤 才會 返回。非阻塞io 非阻塞模式下無論操作是否完成都會立刻返回,需要通過其他方 式來判斷具體操作是否成功。對於connect,accpet操作,通過select判斷,對於recv,recvfrom,sen...

設定非阻塞方式連線

設定非阻塞方式連線 unsigned long ul 1 ret ioctlsocket cclient,fionbio,unsigned long ul if ret socket error return 0 連線 server.sin family af inet server.sin por...