對MFC封裝Windows通訊API的研究

2021-04-12 17:54:44 字數 3101 閱讀 3618

對mfc封裝windows通訊api的研究

2.win32internet(wininet)api

----微軟公布了一些使internet應用程式的設計比以前更快、更容易的api:wininetapi,它提供了中高層通訊函式,這使訪問主要的internet協議變得相當容易。這些函式在程式設計師和winsock驅動之間提供了隔離層。有4類wininetapi函式:通用wininet函式、wininet檔案傳輸協議(ftp)函式、wininetgopher函式、wininet超文字傳輸協議(http)函式。

----事實上,mfc把wininetapi和activex技術封裝進類,使internet程式設計更加容易,這些類包括cinternetsession、cinternetconnection、cinternetfile、chttpconnection、chttpfile、cgopherfile、cftpconnection、cgopherconnection、cfilefind、cftpfilefind、cgopherfilefind、cgopherlocator和cinternetexception。

3.internet伺服器api(isapi)

----微軟的iis是惟一與windowsntserver作業系統緊密整合的www伺服器,它作為internet/intranet伺服器應用範圍很廣。iis允許擴充套件功能,這是通過isapi來實現的,isapi描述了與internet伺服器之間的介面。用isapi提供的工具,可建立高效能、高效率、滿足商業安全及符合新的iis標準的internet伺服器。同樣,isapi在mfc中由典型的類所封裝,包括chttpfilter、chttpfiltercontext、chttpserver、chttpservercontext、relatedclasses和chtmlstream。

三、winsockapi的mfc封裝類

一些網路應用程式(如網路**、多**會議工具)實時性要求非常強,要求能夠直接應用winsock傳送和接收資料。這時設計者應該選擇直接應用winsockapi或者由mfc封裝的winsockapi。新開發的應用程式中,為了充分利用mfc的優勢,首選方案應當是mfc中的casyncsocket類和csocket類,這兩個類完全封裝了winsockapi,並提供更多的便利。本文介紹應用這兩個類的程式設計模型,並引出相關的成員函式與一些概念的解釋。

1.casyncsocket類和csocket類簡述

附圖casyncsocket類和csocket類的繼承關係

----2.casyncsocket類程式設計模型

----在乙個mfc應用程式中,要想輕鬆處理多個網路協議,而又不犧牲靈活性時,可以考慮使用casyncsocket類,它的效率比csocket類要高。casyncsocket類針對位元組流型套接字的程式設計模型簡述如下:

----(1)構造乙個casyncsocket物件,並用這個物件的create成員函式產生乙個socket控制代碼。可以按如下兩種方法構造:

casyncsocketsock;

sock.create();

//使用預設引數產生乙個位元組流套接字

或casyncsocket*psocket=newcasyncsocket;

intnport=27;

psocket->create(nport,sock-dgram);

//指定埠號產生乙個資料報套接字

----第一種方法在棧上產生乙個casyncsocket物件,而第二種方法在堆上產生casyncsocket物件。第一種create成員函式用預設引數產生乙個位元組流套接字,第二種create成員函式用指定的埠和位址產生乙個數字報套接字。create的引數有:

----①埠,uint型別。注意:如果是服務方,則使用乙個眾所周知的埠供服務方連線;如果是客戶方,典型做法是接受預設引數,使套接字可以自主選擇乙個可用埠;

----②socket型別。sock-stream(預設值)或sock-dgram;

----③socket位址。例如「ftp.gliet.edu.cn」或「202.193.64.33」。

----(2)如是客戶方程式,用casyncsocket∷connect成員函式連線到服務方;如是服務方程式,用casyncsocket∷listen成員函式開始監聽,一旦收到連線請求,則呼叫casyncsocket∷accept成員函式開始接收。注意:casyncsocket∷accept成員函式要用乙個新的並且是空的csocket物件作為它的引數,這裡所說的「空的」指的是這個新物件還沒有呼叫create成員函式。

----(3)呼叫其他的casyncsocket類成員函式進行通訊管理。

----(4)通訊結束後,銷毀casyncsocket物件。如果是在棧上產生的casyncsocket物件,則物件超出定義的範圍時自動被析構;如果是在堆上產生,也就是用了new這個操作符,則必須使用delete操作符銷毀casyncsocket物件。

----3.csocket類程式設計模型

----使用csocket物件涉及carchive和csocketfile類物件。以下介紹的針對位元組流型套接字的操作步驟中,只有第3步對於客戶方和服務方操作是不同的,其他步驟都相同。

----(1)構造乙個csocket物件。

----(2)使用這個物件的create成員函式產生乙個socket控制代碼。在客戶方程式中,除非需要資料報套接字,create一般情況下應該使用預設引數。而對於服務方程式,必須在呼叫create時指定乙個埠。注意:carchive不能與資料報(udp)套接字一起工作,因此對於資料報套接字,casyncsocket和csocket的使用方法是一樣的。

----(3)如果是客戶方套接字,則呼叫casyncsocket∷connect與服務方套接字連線;如果是服務方套接字,則呼叫casyncsocket∷listen開始監聽來自客戶方的連線請求,收到連線請求後,呼叫casyncsocket∷accept接受請求,建立連線。注意:accept成員函式需要乙個新的並且為空的csocket物件作為它的引數,解釋同上。

----(4)產生乙個csocketfile物件,並把它與csocket物件關聯起來。

----(5)為接收和傳送資料各產生乙個carchive物件,把它們與csocketfile物件關聯起來。切記carchive是不能和資料報套接字一起工作的。

----(6)使用carchive物件在客戶與服務方傳送資料。(7)通訊完畢後,銷毀carchive、csocketfile和csocket物件。

MFC 視窗封裝

mfc對window作了一層比較淺的封裝,其建立過程基本與sdk差不多。它簡化了視窗的註冊,並將視窗過程與類關聯起來 後者是比較重要的封裝,它使訊息能夠分流給 類的視窗過程 既而通過訊息對映,才能到達各個處理函式。使用傳統的sdk來建立乙個視窗有點繁瑣,偽 是這樣的 if registerclass...

Windows串列埠通訊

封裝了乙個串列埠通訊的c 類cserial,通過cserial類的openserialport 可以開啟乙個串列埠,串列埠開啟後後自動新建執行緒讀取串列埠資料,並通過messagebox簡單的顯示出資料。通過cserial類的senddata 方法可以向串列埠傳送資料。主函式中,新建了乙個cseri...

對元件庫對再次封裝

自定義button元件,在cube元件庫的基礎上再次封裝 mbutton.vue 考慮到這種按鈕每個頁面都有用到,可以在main.js中引入 注意 1,元件引入的位置是在cube ui的後面 2,原本也是用vue.use mbutton 這樣會出錯,所以換成vue.component mbutton...