Visual C++程序設(shè)計教程課件第19章_第1頁
Visual C++程序設(shè)計教程課件第19章_第2頁
Visual C++程序設(shè)計教程課件第19章_第3頁
Visual C++程序設(shè)計教程課件第19章_第4頁
Visual C++程序設(shè)計教程課件第19章_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第19章

MFC網(wǎng)絡(luò)編程及無線組網(wǎng)2025/6/19219.1網(wǎng)絡(luò)編程基本概念1.網(wǎng)絡(luò)字節(jié)序2.套接字的類型3.套接字的初始化WinsockWinsock是Windows下網(wǎng)絡(luò)編程的規(guī)范-WindowsSockets是Windows下得到廣泛應(yīng)用的、開放的、支持多種協(xié)議的網(wǎng)絡(luò)編程接口。在Windows平臺下,一般使用Winsock進行網(wǎng)絡(luò)編程,其初始化函數(shù)如下:

2025/6/19319.2Winsock基礎(chǔ)19.2.1WinsockAPISocket接口是網(wǎng)絡(luò)編程(通常是TCP/IP協(xié)議,也可以是其他協(xié)議)的API。最早的Socket接口是Berkeley接口,在Unxi操作系統(tǒng)中實現(xiàn)。WinSock也是一個基于Socket模型的API,在MicrosoftWindows操作系統(tǒng)類中使用。它在Berkeley接口函數(shù)的基礎(chǔ)之上,還增加了基于消息驅(qū)動機制的Windows擴展函數(shù)。Winscok1.1只支持TCP/IP網(wǎng)絡(luò),WinSock2.0增加了對更多協(xié)議的支持。這里,討論TCP/IP網(wǎng)絡(luò)上的API。2025/6/19419.2.2Winsock的使用WinSock以DLL的形式提供,在調(diào)用任何WinSockAPI之前,必須調(diào)用函數(shù)WSAStartup進行初始化,最后,調(diào)用函數(shù)WSACleanUp作清理工作。MFC使用函數(shù)AfxSocketInit包裝了函數(shù)WSAStartup,在WinSock應(yīng)用程序的初始化函數(shù)IninInstance中調(diào)用AfxSocketInit進行初始化。程序不必調(diào)用WSACleanUp。2025/6/195MFC對WinSocktAPI的封裝MFC提供了兩個類CAsyncSocket和CSocket來封裝WinSockAPI,這給程序員提供了一個更簡單的網(wǎng)絡(luò)編程接口。CAsyncSocket在較低層次上封裝了WinSockAPI,缺省情況下,使用該類創(chuàng)建的socket是非阻塞的socket,所有操作都會立即返回,如果沒有得到結(jié)果,返回WSAEWOULDBLOCK,表示是一個阻塞操作。2025/6/196

CAsyncSocketCAsyncSocket封裝了低層的WinSockAPI,其成員變量m_hSocket保存其對應(yīng)的socket句柄。使用CAsyncSocket的方法如下:首先,在堆或者棧中構(gòu)造一個CAsyncSocket對象,例如:CAsyncSocketsock;或者CAsyncSocket*pSock=newCAsyncSocket;其次,調(diào)用Create創(chuàng)建socket,例如:2025/6/197

2.socket對象的創(chuàng)建和捆綁Create函數(shù)首先,討論Create函數(shù),分析socket句柄如何被創(chuàng)建并和CAsyncSocket對象關(guān)聯(lián)。Create的實現(xiàn)如下:2025/6/198

Create函數(shù)首先,討論Create函數(shù),分析socket句柄如何被創(chuàng)建并和CAsyncSocket對象關(guān)聯(lián)。Create的實現(xiàn)如下:捆綁(Attatch)捆綁過程類似于其他Windows對象,將在模塊線程狀態(tài)的WinSock映射中添加一對新的映射:this所指對象和新創(chuàng)建的socket對象的映射。2025/6/199指定要監(jiān)測的網(wǎng)絡(luò)事件在捆綁完成之后,調(diào)用AsyncSelect指定新創(chuàng)建的socket將監(jiān)測的網(wǎng)絡(luò)事件。AsyncSelect實現(xiàn)如下:2025/6/1910首先,調(diào)用socket函數(shù)創(chuàng)建一個socket;然后把創(chuàng)建的socket對象映射到CAsyncSocket對象(捆綁在一起),指定本socket要通知的網(wǎng)絡(luò)事件,并創(chuàng)建一個“socket窗口”來接收網(wǎng)絡(luò)事件消息,最后,指定socket的本地信息。下一步,是使用成員函數(shù)Connect連接遠地主機,配置socket的遠地信息。函數(shù)Connect類似于Bind,把指定的遠地地址轉(zhuǎn)換成SOCKADDR_IN對象表示的地址信息(包括網(wǎng)絡(luò)字節(jié)序的轉(zhuǎn)換),然后調(diào)用WinSock函數(shù)Connect連接遠地主機,配置socket的遠地端口和遠地IP地址。2025/6/1911.CSocket如果希望在用戶界面線程中使用阻塞socket,則可以使用CSocket。它在非阻塞socket基礎(chǔ)之上實現(xiàn)了阻塞操作,在阻塞期間實現(xiàn)了消息循環(huán)。對于CSocket,處理網(wǎng)絡(luò)事件通知的函數(shù)OnAccept、OnClose、OnReceive仍然可以使用,OnConnect、OnSend在CSocket中永遠不會被調(diào)用,另外OnOutOfBandData在CSocket中不鼓勵使用。2025/6/191219.3MFC網(wǎng)絡(luò)編程示例19.3.1基于TCP的網(wǎng)絡(luò)編程示例本示例使用tcp協(xié)議進行網(wǎng)絡(luò)編程,示例代碼保存在目錄Eg19_1中。19.3.2基于UDP的網(wǎng)絡(luò)編程示例本示例代碼保存在目錄Eg19_2中。2025/6/191319.4使用json傳輸數(shù)據(jù)上一章中講解了如何在Android平臺下使用json進行傳輸數(shù)據(jù)的方法,json雖然是一種通用的網(wǎng)絡(luò)傳輸數(shù)據(jù)格式,但是在不同平臺下卻有不同的實現(xiàn),也就是說,不同平臺下使用的json解析庫是不一樣的,下面就來講解在MFC平臺下使用json傳輸數(shù)據(jù)的相關(guān)知識。1.下載和編譯:下載地址是:/projects/jsoncpp/2.jsoncpp的用法

2025/6/191419.5無線組網(wǎng)通常在進行socket網(wǎng)絡(luò)編程的時候,客戶端需要指定服務(wù)器的IP地址才能進行socket的創(chuàng)建以及后續(xù)的數(shù)據(jù)通信,在通常的實驗中,一般會使用作為服務(wù)器的IP地址,即服務(wù)器和客戶端運行在同一臺計算機上,這樣可以減少實驗的成本。但是在實際的產(chǎn)品運行時,服務(wù)器往往需要租用或者自行搭建,即服務(wù)器和客戶端運行在不同的計算機系統(tǒng)上。為無線局域網(wǎng)內(nèi)的計算機配置固定IP的方法如下:1).查看計算機MAC地址2).登陸路由器打開瀏覽器,在地址欄上輸入,如圖19.8所示:3).選擇左邊菜單的DHCP服務(wù)器

|靜態(tài)地址分配,如圖19.10所示:4).進入靜態(tài)地址分配主界面,如圖19.11所示:左邊菜單的DHCP服務(wù)器

|靜態(tài)地址分配,如圖19.10所示:5)點擊增加新條目,進入增加新條目界面,輸入步驟一中查詢到的MAC地址,并設(shè)置一個IP地址(IP地址可以任意設(shè)定,如00等),狀態(tài)選擇生效,點擊保存,如圖19.12所示:.根據(jù)提示,點擊重啟路由器,完成固定IP的設(shè)置。至此,一個無線局域網(wǎng)服務(wù)器環(huán)境已經(jīng)搭建成功,智能手機上的Android客戶端可以通過設(shè)定好的固定IP

溫馨提示

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

最新文檔

評論

0/150

提交評論