情境42消息隊列管理程序設計2_第1頁
情境42消息隊列管理程序設計2_第2頁
情境42消息隊列管理程序設計2_第3頁
情境42消息隊列管理程序設計2_第4頁
情境42消息隊列管理程序設計2_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、整理課件消息隊列管理程序設計(消息隊列管理程序設計(2)網(wǎng)絡通信程序的框架情境三:情境三:整理課件本次講授內(nèi)容本次講授內(nèi)容網(wǎng)絡通信程序設計的基本概念CAsyncSocket網(wǎng)絡通信程序設計框架CSocket網(wǎng)絡通信程序設計框架字符串整理課件一、網(wǎng)絡通信程序設計的基本概念一、網(wǎng)絡通信程序設計的基本概念1.近年來,利用Internet進行網(wǎng)際間通訊,在WWW瀏 覽、FTP、Gopher這些常規(guī)服務,以及在網(wǎng)絡電話、多媒體會議等這些對實時性要求嚴格 的應用中成為研究的熱點,而且已經(jīng)是必需的了。2.Windows環(huán)境下進行通訊程序設計的最基本方法是應用Windows Sockets實現(xiàn)進程間的通訊,為

2、此微軟提供了大量基于Windows Sockets的通訊API,如WinSockAPI、WinInetAPI和ISAPI,并一直致力于開發(fā)更快、 更容易的通訊API,將其和MFC集成在一起以使通訊編程越來越容易。 整理課件一、網(wǎng)絡通信程序設計的基本概念一、網(wǎng)絡通信程序設計的基本概念1. 常規(guī)網(wǎng)絡通信程序設計整理課件一、網(wǎng)絡通信程序設計的基本概念一、網(wǎng)絡通信程序設計的基本概念常規(guī)網(wǎng)絡通信程序設計 對于許多初學者來說,網(wǎng)絡通信程序的開發(fā),普遍的一個現(xiàn)象就是覺得難以入手。許多概念,諸如:同步(Sync)/異步(Async),阻塞(Block)/非阻塞(Unblock)等,初學者往往迷惑不清,只知其所

3、以而不知起所以然。整理課件一、網(wǎng)絡通信程序設計的基本概念一、網(wǎng)絡通信程序設計的基本概念常規(guī)網(wǎng)絡通信程序設計同步方式指的是發(fā)送方不等接收方響應,便接著發(fā)下個數(shù)據(jù)包的通信方式;而異步指發(fā)送方發(fā)出數(shù)據(jù)后,等收到接收方發(fā)回的響應,才發(fā)下一個數(shù)據(jù)包的通信方式 。阻塞套接字是指執(zhí)行此套接字的網(wǎng)絡調(diào)用時,直到成功才返回,否則一直阻塞在此網(wǎng)絡調(diào)用上,比如調(diào)用recv()函數(shù)讀取網(wǎng)絡緩沖區(qū)中的數(shù)據(jù),如果沒有數(shù)據(jù)到達,將一直掛在recv()這個函數(shù)調(diào)用上,直到讀到一些數(shù)據(jù),此函數(shù)調(diào)用才返回; 整理課件一、網(wǎng)絡通信程序設計的基本概念一、網(wǎng)絡通信程序設計的基本概念常規(guī)網(wǎng)絡通信程序設計非阻塞套接字是指執(zhí)行此套接字的網(wǎng)絡

4、調(diào)用時,不管是否執(zhí)行成功,都立即返回。比如調(diào)用recv()函數(shù)讀取網(wǎng)絡緩沖區(qū)中數(shù)據(jù),不管是否讀到數(shù)據(jù)都立即返回,而不會一直掛在此函數(shù)調(diào)用上。 在實際Windows網(wǎng)絡通信軟件開發(fā)中,異步非阻塞套接字是用的最多的。平常所說的C/S(客戶端/服務器)結構的軟件就是異步非阻塞模式的。 整理課件一、網(wǎng)絡通信程序設計的基本概念一、網(wǎng)絡通信程序設計的基本概念微軟MFC網(wǎng)絡通信程序概述 微軟的MFC把復雜的WinSock API函數(shù)封裝到類里,這使得編寫網(wǎng)絡應用程序更容易。CAsyncSocket類逐個封裝了WinSock API,為高級網(wǎng)絡程序員 提供了更加有力而靈活的方法。 MFC給出 了CSocket

5、類,這個類是由CAsyncSocket類繼承下來的,它提供了比CAsyncSocket更高層的WinSock API接口。 Csocket類和CsocketFile類可以與Carchive類一起合作來管理發(fā)送和接收的數(shù)據(jù),這使管理數(shù)據(jù)收發(fā)更加便利。 整理課件一、網(wǎng)絡通信程序設計的基本概念一、網(wǎng)絡通信程序設計的基本概念微軟MFC網(wǎng)絡通信程序概述CSocket對象提供阻塞模式,這對于Carchive的同步操作是至關重要的。阻塞函數(shù)(如Receive()、Send()、ReceiveFrom()、SendTo() 和Accept())直到操作完成后才返回控制權 。因此如果需要低層控制和高效率,就使用

6、CasyncSock類;如果需要方便,則可使用Csocket類。在Win32環(huán)境下,如果要使用具有阻塞性質(zhì)的套接字,應該放在獨立的工作線程中處理,利用多線程的方法使阻塞不至于干擾其他線程,也不會把CPU時間浪費在阻塞上。多線程的方法既可以使程序員享受CSocket帶 來的簡化編程的便利,也不會影響用戶界面對用戶的反應。 整理課件二、二、CAsyncSocket網(wǎng)絡程序設計框架 在一個MFC應用程序中,要想輕松處理多個網(wǎng) 絡協(xié)議,而又不犧牲靈活性時,可以考慮使用CAsyncSocket類,它的效率比CSocket 類要高。CAsyncSocket類針對字節(jié)流型套接字的編程模型簡述如下: 1.構造

7、一個CAsyncSocket對象,并用這個 對象的Create成員函數(shù)產(chǎn)生一個Socket句柄 。 CAsyncSocket sock; /使用默認參數(shù)產(chǎn)生一個字節(jié)流套接字Sock.Create(); 。 CAsyncSocket*pSocket=newCAsyncSocket;intnPort=27;pSocket-Create(nPort,SOCK-DGRAM); 。 整理課件二、二、CAsyncSocket網(wǎng)絡程序設計框架1. 構造一個CAsyncSocket對象,并用這個 對象的Create成員函數(shù)產(chǎn)生一個Socket句柄 。 第一種方法在棧上產(chǎn)生一個CAsyncSocket對象, 而

8、第二種方法在堆上產(chǎn)生CAsyncSocket對象;第一種方法中Create()成員函數(shù)用缺省參數(shù)產(chǎn)生一個字節(jié)流套接字,第二種方法中用Create()成員函數(shù)在指定的端口產(chǎn)生一個數(shù)字報套接字。 整理課件二、二、CAsyncSocket網(wǎng)絡程序設計框架1.構造一個CAsyncSocket對象,并用這個 對象的Create成員函數(shù)產(chǎn)生一個Socket句柄 。BOOL Create( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM,LPCTSTR lpszSocketAddress = NULL ); 該函數(shù)的參數(shù)有:1)端口,UINT類型。注意

9、:如果是服務方,則使 用一個眾所周知的端口供服務方連接;如果是客戶方,典型做法是接受默認參數(shù),使 套接字可以自主選擇一個可用端口;2)socket 類型,可以是SOCK-STREAM(默認值,字節(jié)流)或SOCK-DGRAM(數(shù)據(jù)報); 3)socket的地址,例如或3。 整理課件二、二、CAsyncSocket網(wǎng)絡程序設計框架通信雙方建立連接關系 。 如是客戶方程序,用CAsyncSocket Connect()成員函數(shù)連接到服務方 。 如是服務方程序,用CAsyncSocket Listen()成員函數(shù)開始 監(jiān)聽,一旦收到連接請求,則調(diào)用CAsyncSocket Ac

10、cept()成員函數(shù)開始接收。 注意:CAsyncSocket Accept()成員函數(shù)要用一個新的并且是空的CAsyncSocket對象作為它的參數(shù),這里所說 的空的指的是這個新對象還沒有調(diào)用Create()成員函數(shù)。 整理課件二、二、CAsyncSocket網(wǎng)絡程序設計框架1. 調(diào)用CAsyncSocket類的其他函數(shù),如:Receive()、ReceiveFrom()、Send()和SendTo()等成員函數(shù)進行數(shù)據(jù)通信。2. 通訊結束后,銷毀CAsyncSocket對象。如果是在棧上產(chǎn)生的CAsyncSocket對象,則對象超出定義的范圍時自動被析構;如果是在堆上產(chǎn)生,也就是用了new

11、這個操作符,則必須使用delete操作符銷毀CAsyncSocket 對象。 整理課件三、三、CSocket網(wǎng)絡程序設計框架 使用CSocket對象涉及CArchive和CSocketFile 類對象。以下介紹的針對字節(jié)流型套接字的操作步驟中,只有第3步對于客戶方和服務方操作是不同的,其他步驟都相同。1.構造一個CSocket對象 。 2.使用這個對象的Create()成員函數(shù)產(chǎn)生一個socket對象。 在客戶方程序中,除非需要數(shù)據(jù)報套接字,Create()函數(shù)一般情況下應該使用默認參數(shù)。 而對于服務方程序,必須在調(diào)用Create時指定一個端口。 需要注意的是,Carchive類對象不能與數(shù)據(jù)

12、報(UDP)套接字一起工作。 整理課件三、三、CSocket網(wǎng)絡程序設計框架通信雙方建立連接。 如果是客戶方套接字,則調(diào)用CAsyncSocket Connect()函數(shù)與服務方套接字連接。 如果是服務方套接字,則調(diào)用CAsyncSocket Listen()開始監(jiān)聽來自客戶方的連接請求,收到連接請求后,調(diào)用CAsyncSocket Accept()函數(shù)接受請求,建立連接。 請注意Accept()成員函數(shù)需要一個新的并且為空的CSocket對象作為它的參數(shù)。 整理課件三、三、CSocket網(wǎng)絡程序設計框架1. 產(chǎn)生一個CSocketFile對象,并把它與CSocket 對象關聯(lián)起來 。 2. 為接收和發(fā)送數(shù)據(jù)各產(chǎn)生一個CArchive 對象,把它們與CSocketFile對象關聯(lián)起來。切記CArchive是不能和數(shù)據(jù)報套接字一起工作的。 3. 使用CArchive對象的Read()、Write()等函數(shù)在客戶與服務方傳送數(shù)據(jù)。 4. 通訊完畢后,銷毀CArchive、CSocketFile和CSocket對象。 整理課件四、四、字符串1. 字符串。 字符串是由某字符集上的字符所組成的任何有限字符序列。 當一個字符串不包含任何字符時,稱為空字符串

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論