1. 程式人生 > >MFC 基於訊息機機制的WSAAsyncSelect demo

MFC 基於訊息機機制的WSAAsyncSelect demo

void CXXXDlg::OnSockEvent(WPARAM wParam,LPARAM lParam)
{
    SOCKET sSock= static_cast<SOCKET>(wParam);
 if(WSAGETSELECTERROR(lParam)) 
    { 
        AfxMessageBox("OnSockEvent()接收到錯誤訊息"); 
        ::closesocket(wParam); 
        return; 
    } 
 switch(WSAGETSELECTEVENT(lParam))
 {
 case FD_ACCEPT:
  {
   SOCKADDR_IN addrSock;
   memset(&addrSock, 0x0, sizeof addrSock);
   int Len = sizeof(addrSock);
   //當客戶端connect的時候全域性的m_sSocket和wParam傳進來的SOCKET是相同的,
   //當服務端呼叫accept去獲取客戶端的SOCKET傳入下一次的OnSockEvent中wParam引數中
   m_cSocket = ::accept(m_sSocket, (SOCKADDR*)&addrSock, &Len);
   if (INVALID_SOCKET == m_cSocket)
   {
    char szError[256] = {0};
    sprintf(szError, "接收SOCKET錯誤,%d",  WSAGetLastError());
    AfxMessageBox(szError);
   }
  }
  break;
 case FD_READ:
  {
   char buff[1024] = {0};
   SOCKADDR_IN addrSock;
   memset(&addrSock, 0x0, sizeof addrSock);
   int Len = sizeof(addrSock);
   //recv不等待是因為你使用的是非阻塞socket,換而你使用阻塞socket一樣需要等待。
   //recv的recvfrom是可以替換使用的,只是recvfrom多了兩個引數,可以用來接收對端的地址資訊,
   //這個對於udp這種無連線的,可以很方便地進行回覆。
   //而換過來如果你在udp當中也使用recv,那麼就不知道該回復給誰了,如果你不需要回復的話,也是可以使用的。
   //另外就是對於tcp是已經知道對端的,就沒必要每次接收還多收一個地址,
   //沒有意義,要取地址資訊,在accept當中取得就可以加以記錄了。
   ::recv(sSock, buff, 1024, 0);
//    ::recvfrom(m_cSocket, buff, 1024, 0, (SOCKADDR*)&addrSock, &Len);
   static_cast<CListBox *>(GetDlgItem(IDC_LIST_LOG))->AddString(buff);
   ::send(sSock/*m_cSocket*/, buff, 1024, 0);
  }     
  break;
 case FD_CLOSE:
  {
   ::shutdown(sSock, 2);
   ::closesocket(sSock);
  }
  break;
 }
}

相關推薦

MFC 基於訊息機制WSAAsyncSelect demo

void CXXXDlg::OnSockEvent(WPARAM wParam,LPARAM lParam) {     SOCKET sSock= static_cast<SOCKET>(wParam);  if(WSAGETSELECTERROR(lParam))      {     

MFC基於訊息,使用事件驅動(Message Based,Event Driven)機制

        MFC程式基於訊息,而使用事件驅動(Message Based,Event Driven)。也就是說MFC就是一個死迴圈,裡面有很多的條件,每個條件對應一個方法。這些條件就是有訊息類定義,當用戶觸發事件時,將傳送訊息到響應的視窗。當程式收到訊息時進行解析,判

MFC訊息處理機制及相關的巨集

這段話是我在中文維基的“類成員函式指標”詞條寫的: MFC類體系中,Windows訊息傳遞處理機制是基於CCmdTarget類及其派生類的靜態資料成員與靜態成員函式GetThisMessageMap()。使用者所寫的類中的Windows訊息處理函式(例如OnCommand)

MFC訊息對映機制實現方法

訊息對映初見 我們新建一個Draw單文件工程後,通過在DrawView類中新增一個“滑鼠左鍵按下的訊息”進行訊息對映機制的分析,在分析之前,先 完成“WM_LButtonDown”訊息響應函式的新增

MFC訊息對映機制的理解

當窗體,控制元件,點選標題欄等時,會產生訊息,然後發給訊息處理函式進行處理,而訊息與訊息對映表是一一對應的關係,這個關係就是訊息對映表,根據根據訊息通過訊息對映表來查詢對應的訊息處理函式,這就稱為訊息對映機制。 而Windows有自己的訊息佇列,通過訊息迴圈,採用GetMessage來獲取訊

VC++/MFC訊息對映機制(2):MFC訊息路由原理

VC++/ MFC訊息對映機制(2):模仿MFC的訊息路由 本文要求對C++語法比較熟悉(特別是虛擬函式的使用),若不熟悉建議參閱《C++語法詳解》一書,電子工業出版社出版。並且本文需結合上一篇文章《MFC訊息對映原理》閱讀。 訊息路由的目的就是把當前類沒有處理的訊息,上傳給其父類進

VC++/MFC訊息對映機制(1):MFC訊息對映原理

VC++/MFC訊息對映機制(1):模仿MFC的訊息對映原理 本文要求對C++語法比較熟悉(特別是虛擬函式的使用),若不熟悉建議參閱《C++語法詳解》一書,電子工業出版社出版 1、訊息對映:就是把指定的訊息交給指定的函式進行處理的方法,這樣就形成了一個<訊息,處理函式>對。

VC++/MFC訊息對映機制(4):附:鉤子函式原理

VC++/MFC訊息對映機制(4):附:鉤子函式原理 若對C++語法不熟悉,建議參閱《C++語法詳解》一書,電子工業出版社出版,該書語法示例短小精悍,對查閱C++知識點相當方便,並對語法原理進行了透徹、深入詳細的講解。 一、鉤子SetWindowsHookEx 注意:本文的鉤子和

VC++/MFC訊息對映機制(3):MFC訊息路由的原始碼分析

VC++/MFC訊息對映機制(3):MFC訊息路由的原始碼分析 若對C++語法不熟悉,建議參閱《C++語法詳解》一書,電子工業出版社出版,該書語法示例短小精悍,對查閱C++知識點相當方便,並對語法原理進行了透徹、深入詳細的講解。 注意:本文最好結合本人所作前兩篇與訊息對映機制有關的文章一

【slighttpd】基於lighttpd架構的Server專案實戰(8)—狀態機制回顧

轉載地址:https://blog.csdn.net/jiange_zh/article/details/50640270 有限狀態機FSM(Finite State Machine) 關於狀態機的一個極度確切的描述是它是一個有向圖形,由一組節點和一組相應的轉移函式組成。狀態機通過響應一系列

基於UMeng訊息推送測試-demo教程(iOS版)

基於UMeng訊息推送測試-demo教程(iOS版) 眼看著就要過年了(2017本命年終於快過去了臨來嶄新的2018大發年),每個人的心裡就像飛了一樣,這個時候能夠在辦公間待下來的,每個人都是精英,突然想起了那首張含韻的歌《放假了》。 今天是2017年臘月25距離2018年僅有5天,依舊在外

MFC訊息對映機制(2):MFC訊息路由原理

MFC訊息對映機制(2):模仿MFC的訊息路由 本文要求對C++語法比較熟悉(特別是虛擬函式的使用),若不熟悉建議參閱《C++語法詳解》一書,電子工業出版社出版。並且本文需結合上一篇文章《MFC訊息對映原理》閱讀。 訊息路由的目的就是把當前類沒有處理的訊息,上傳

MFC原始碼實戰分析(三)——訊息對映原理與訊息路由機制初探

如果在看完上一篇文章後覺得有點暈,不要害怕。本節我們就不用這些巨集,而是用其中的內容重新完成開頭那個程式,進而探究MFC訊息對映的本來面目。 MFC訊息對映機制初探 還我本來面目 class CMyWnd : public CFrameWnd

Android中基於ServerSocket的實際使用與簡單介紹(內附一個PC端群控多臺手機的訊息傳送和接收Demo

一、要想將ServerSocket整明白首先至少先要知道或是瞭解幾點基礎內容部分(大神或是有一定能力的小神跳過): 1.ServerSocket是需要在服務端定義書寫的而在客戶端不需要ServerSocket,客戶端只需要建立socket就可以了。 2.socket需要在子

MFC訊息反射機制

1、訊息反射解釋:   父視窗將子視窗發給它的通知訊息,首先反射回子視窗進行處理(即給子視窗一個機會,讓子視窗處理此訊息),這樣通知訊息就有機會能被子視窗自身進行處理。 2、MFC中引入訊息反射的原因:   在Windows的訊息處理中,子視窗的發給其父視窗的通知訊息只能

VC----MFC訊息對映機制詳解

Windows程式和MFC程式是靠訊息驅動的,他們對於訊息的處理本質上是相同的。只是Windows程式對於訊息處理的過程十分清晰明瞭,MFC程式則掩蓋了訊息處理的過程,以訊息對映的方式呈現在開發者面前,使得開發訊息的處理十分簡單。用多了mfc就想對它的訊息對映機制有一個本

mfc程式設計訊息機制訊息彙總

做VC開發必須熟悉訊息機制,筆試面試重點,自己在這方面很欠缺,蒐集學習一下WM_CREATE CreateWindow 初始化工作 GetMessage 遇到WM_QUIT,程式結束 DispatchMessage 向視窗派送訊息 重複2,3操作 關

MFC的UI更新機制和加速鍵的創建

mod 方法 實現 標簽 設置 term cif item radio 近期在看《MFC Windows程序設計》這本書,正好看到更新菜單中的菜單項和加入菜單項的加速鍵這方面的內容,下面總一下總結。 MFC提供的更新菜單項的機制例如以下: 通過消

基於虛擬的CentOS7系統的IP配置

網絡服務 ip地址 虛擬機 編輯器 動態 dhclient #自動獲取動態IP ip add #獲取ip地址將動態IP修改為靜態IP(步驟):vi /etc/sysconfig/network-scripts/ifcfg-ens33 按小寫字母“i”,進入編輯模式然後增加或改變以下內容:

MFC基於對話框 手寫數字識別 SVM+MNIST數據集

識別數字 做了 XML svm 簡單實用 清空 朋友 detail data 完整項目下載地址: http://download.csdn.net/detail/hi_dahaihai/9892004 本項目即拿MFC做了一個畫板,畫一個數字後可自行識別數字。此外還 有保存