第1章開(kāi)發(fā)平臺(tái)和網(wǎng)絡(luò)編程_第1頁(yè)
第1章開(kāi)發(fā)平臺(tái)和網(wǎng)絡(luò)編程_第2頁(yè)
第1章開(kāi)發(fā)平臺(tái)和網(wǎng)絡(luò)編程_第3頁(yè)
第1章開(kāi)發(fā)平臺(tái)和網(wǎng)絡(luò)編程_第4頁(yè)
第1章開(kāi)發(fā)平臺(tái)和網(wǎng)絡(luò)編程_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第1章 網(wǎng)絡(luò)編程和開(kāi)發(fā)環(huán)境1.1.1 11.1.2 2Visual C+ 2010Visual C+ 2010開(kāi)發(fā)平臺(tái)開(kāi)發(fā)平臺(tái)網(wǎng)絡(luò)編程的基本概念網(wǎng)絡(luò)編程的基本概念1 . 1 Visual C+ 2010開(kāi)發(fā)平臺(tái)Visual Studio 2010Visual Studio 2010安裝安裝本書(shū)使用網(wǎng)上下載的Visual Studio 2010安裝包:cn_visual_studio_2010_ultimate_x86_dvd_532347.iso這是個(gè)鏡像(.iso)文件,需要虛擬光驅(qū)才能運(yùn)行。用虛擬光驅(qū)軟件DAEMON Tools Lite載入鏡像,如圖1.1所示。1.1.1 Visual

2、Studio 2010安裝載入后彈出如圖1.2所示的啟動(dòng)窗口。1.1.1 Visual Studio 2010安裝單擊“安裝Microsoft Visual Studio 2010”,進(jìn)入如圖1.3所示的安裝向?qū)Ы缑妫瑔螕簟跋乱徊健卑粹o繼續(xù)。1.1.1 Visual Studio 2010安裝在圖1.4所示窗口中選擇“我已閱讀并接受許可條款”,在圖1.5所示窗口中選擇“完全”,產(chǎn)品安裝路徑為默認(rèn)的“C:Program FilesMicrosoft Visual Studio 10.0”,單擊“安裝”按鈕開(kāi)始安裝進(jìn)程。 1.1.1 Visual Studio 2010安裝Visual Studi

3、o 2010包含Microsoft .NET平臺(tái)的許多組件,如圖1.6所示。1.1.1 Visual Studio 2010安裝初次啟動(dòng)會(huì)彈出如圖1.7所示的“選擇默認(rèn)環(huán)境設(shè)置”對(duì)話(huà)框,本書(shū)是Visual C+ 編程,故選擇“Visual C+開(kāi)發(fā)設(shè)置”,單擊“啟動(dòng)Visual Studio”按鈕進(jìn)入開(kāi)發(fā)環(huán)境。1.1.1 Visual Studio 2010安裝Visual Studio 2010的Visual C+集成開(kāi)發(fā)環(huán)境的起始界面如圖1.8所示。1.1.2 創(chuàng)建Visual C+項(xiàng)目工程選擇菜單命令“文件”“新建”“項(xiàng)目”,如圖1.9所示。 1.1.2 創(chuàng)建Visual C+項(xiàng)目工程系

4、統(tǒng)彈出“新建項(xiàng)目”對(duì)話(huà)框(如圖1.10所示),左邊“項(xiàng)目類(lèi)型”樹(shù)中默認(rèn)選項(xiàng)為“Visual C+”“MFC”,對(duì)應(yīng)右邊“模板”選擇“MFC應(yīng)用程序”。1.1.2 創(chuàng)建Visual C+項(xiàng)目工程單擊“確定”按鈕,彈出“MFC應(yīng)用程序向?qū)А睂?duì)話(huà)框(如圖1.11所示),接下來(lái)我們將在這個(gè)對(duì)話(huà)框的指引下輕松完成創(chuàng)建VC工程的工作,單擊“下一步”按鈕繼續(xù)。1.1.2 創(chuàng)建Visual C+項(xiàng)目工程在“應(yīng)用程序類(lèi)型”界面(如圖1.12所示)選中“基于對(duì)話(huà)框”單選按鈕。1.1.2 創(chuàng)建Visual C+項(xiàng)目工程接下來(lái)的“用戶(hù)界面功能”和“高級(jí)功能”界面(如圖1.13所示)都采用系統(tǒng)默認(rèn)設(shè)置,連續(xù)單擊“下一步

5、”按鈕跳過(guò)。1.1.2 創(chuàng)建Visual C+項(xiàng)目工程最后一步出現(xiàn)的是“生成的類(lèi)”,稍留意下可以看到,系統(tǒng)已經(jīng)自動(dòng)為程序建立了兩個(gè)類(lèi)CGetIPAndPortApp和CGetIPAndPortDlg(如圖1.14所示)。1.1.3 Visual C+可視化設(shè)計(jì)開(kāi)發(fā)環(huán)境工作區(qū)主界面將呈現(xiàn)的樣子如圖1.15所示。1.1.3 Visual C+可視化設(shè)計(jì)主工作區(qū)大致分為三部分,最左邊是供用戶(hù)瀏覽程序結(jié)構(gòu)的,包括好幾個(gè)選項(xiàng)卡界面,常用的是解決方案資源管理器、類(lèi)視圖和資源視圖,如圖1.16所示。1.1.3 Visual C+可視化設(shè)計(jì)在本例的三個(gè)類(lèi)中,CAboutDlg類(lèi)和CGetIPAndPortDl

6、g類(lèi)都有各自的對(duì)話(huà)框界面資源。資源視圖中Dialog目錄下有它們的ID號(hào)(對(duì)應(yīng)的分別是IDD_ABOUTBOX和IDD_GETIPANDPORT_ DIALOG),雙擊ID號(hào)可以打開(kāi)其對(duì)話(huà)框的界面設(shè)計(jì)工作區(qū),如圖1.17所示。1.1.3 Visual C+可視化設(shè)計(jì)只是針對(duì)本書(shū)所介紹的網(wǎng)絡(luò)編程,有一個(gè)控件需要特別提一下,那就是IP地址控件(如圖1.18所示)。它在界面上的顯示效果如圖1.19所示。 1.1.3 Visual C+可視化設(shè)計(jì)選擇工具箱中的控件設(shè)計(jì)程序界面,可以看到VC界面設(shè)計(jì)環(huán)境的使用極其方便,絲毫不比VB遜色。在布局界面時(shí)可以使用工具欄中提供的功能調(diào)整各個(gè)控件的大小、對(duì)齊方式。

7、如圖1.20所示,1.1.3 Visual C+可視化設(shè)計(jì)最終設(shè)計(jì)出的程序界面效果如圖1.21所示。1.1.4 一個(gè)簡(jiǎn)單的Visual C+小程序例如,為了在程序代碼中獲得用戶(hù)輸入的IP,需要給IP地址控件關(guān)聯(lián)一個(gè)變量。如圖1.22所示,右擊該控件,在彈出的菜單中選擇“添加變量”命令。 1.1.4 一個(gè)簡(jiǎn)單的Visual C+小程序出現(xiàn)“添加成員變量向?qū)А睂?duì)話(huà)框(如圖1.23所示),將變量命名為“m_ip”,變量類(lèi)別為“Control”。1.1.4 一個(gè)簡(jiǎn)單的Visual C+小程序下面接著添加變量,給用于接收端口號(hào)的文本框關(guān)聯(lián)Value變量strport(如圖1.24所示)。1.1.4 一個(gè)

8、簡(jiǎn)單的Visual C+小程序再設(shè)置該文本框的Number屬性為T(mén)rue(如圖1.25所示),之所以這樣設(shè)置,是為了限定用戶(hù)只能在這個(gè)文本框中輸入數(shù)字形式的端口號(hào)。1.1.4 一個(gè)簡(jiǎn)單的Visual C+小程序本程序還有一個(gè)文本框是用于顯示程序獲取的IP和端口的,給它關(guān)聯(lián)Control型變量m_showIpAndPort,并且設(shè)置Read Only屬性為T(mén)rue(作為顯示信息窗口的文本框一般都設(shè)為只讀模式),如圖1.26所示。 1.1.4 一個(gè)簡(jiǎn)單的Visual C+小程序程序界面上的“獲取”按鈕是實(shí)現(xiàn)本程序功能的關(guān)鍵,編程工作主要就是給這個(gè)按鈕添加事件處理程序。右擊“獲取”按鈕,在彈出的功能

9、菜單中選擇“添加事件處理程序”命令,如圖1.27所示。1.1.4 一個(gè)簡(jiǎn)單的Visual C+小程序在“事件處理程序向?qū)А睂?duì)話(huà)框中將這個(gè)處理程序命名為“OnShowIpAndPort”,如圖1.28所示。1.1.4 一個(gè)簡(jiǎn)單的Visual C+小程序單擊“添加編輯”按鈕,進(jìn)入代碼編輯窗口(如圖1.29所示),VC自動(dòng)打開(kāi)需要編輯的程序代碼文件GetIPAndPortDlg.cpp并定位到源文件中相應(yīng)的位置,供用戶(hù)添加自己的代碼。1.1.4 一個(gè)簡(jiǎn)單的Visual C+小程序?yàn)椤矮@取”按鈕編寫(xiě)的事件過(guò)程代碼如下:BYTE nFild4;/分別存放IP地址的四個(gè)字段CString sip; /IP

10、地址的字符串形式(可以直接顯示在界面上的)UpdateData(); /刷新對(duì)話(huà)框界面,獲取用戶(hù)輸入/驗(yàn)證輸入是否合法if(m_ip.IsBlank()/若用戶(hù)沒(méi)有填寫(xiě)IP地址,則提示填寫(xiě)AfxMessageBox(請(qǐng)?zhí)顚?xiě)IP地址!);return;if(strport.IsEmpty()/若用戶(hù)忘了指定端口號(hào),則提醒其指定AfxMessageBox(請(qǐng)指定進(jìn)程端口!);return;/獲取用戶(hù)輸入的IP地址值m_ip.GetAddress(nFild0,nFild1,nFild2,nFild3);/將IP地址格式化為可以在計(jì)算機(jī)屏幕上顯示的字符串sip.Format(%d.%d.%d.%d,

11、nFild0,nFild1,nFild2,nFild3);/在界面上顯示用戶(hù)輸入的網(wǎng)絡(luò)進(jìn)程地址(包括所在主機(jī)的IP和端口)m_showIpAndPort.SetWindowTextA(sip + : + strport);m_ip.SetFocus();/焦點(diǎn)回到IP地址欄1.1.4 一個(gè)簡(jiǎn)單的Visual C+小程序雙擊“關(guān)于”按鈕,為其添加事件過(guò)程(如圖1.30所示)。“關(guān)于”按鈕的Click事件代碼如下:CAboutDlg dlg;dlg.DoModal();/顯示“關(guān)于”對(duì)話(huà)框1.1.4 一個(gè)簡(jiǎn)單的Visual C+小程序單擊工具欄上的“啟動(dòng)調(diào)試”( )按鈕,程序界面如圖1.31所示。

12、我們先不填寫(xiě)IP地址而直接單擊“獲取”按鈕,看看會(huì)發(fā)生什么。程序彈出了消息框,提醒填寫(xiě)IP地址(如圖1.32所示)。 1.1.4 一個(gè)簡(jiǎn)單的Visual C+小程序填寫(xiě)完合法IP,再故意不填端口號(hào),單擊“獲取”按鈕后,程序同樣也會(huì)彈出消息框,提醒輸入端口號(hào)(如圖1.33所示)。1.1.4 一個(gè)簡(jiǎn)單的Visual C+小程序在IP和端口都合法填寫(xiě)的情況下,單擊“獲取”按鈕,程序就會(huì)將用戶(hù)輸入的網(wǎng)絡(luò)進(jìn)程地址(IP+端口)顯示在下方的輸出文本框中,如圖1.34所示。1.1.4 一個(gè)簡(jiǎn)單的Visual C+小程序單擊“關(guān)于”按鈕,程序彈出“關(guān)于GetIPAndPort”對(duì)話(huà)框(如圖1.35所示),這是

13、一個(gè)版本聲明對(duì)話(huà)框,每一個(gè)Windows程序幾乎都有這樣一個(gè)對(duì)話(huà)框,用于聲明版本號(hào)和版權(quán)信息。1 . 2 網(wǎng)絡(luò)編程基礎(chǔ)知識(shí)1.2.1 1.2.1 計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議網(wǎng)絡(luò)中的計(jì)算機(jī)要做到有條不紊地交換數(shù)據(jù),就必須遵守一些事先約定好的規(guī)則,這些規(guī)則、標(biāo)準(zhǔn)或約定就稱(chēng)為網(wǎng)絡(luò)協(xié)議(Network Protocol),它主要由以下三個(gè)要素組成:(1)語(yǔ)法語(yǔ)法,即數(shù)據(jù)與控制信息的結(jié)構(gòu)或格式;(2)語(yǔ)義語(yǔ)義,即需要發(fā)出何種控制信息,完成何種動(dòng)作,以及做出何種響應(yīng);(3)同步同步,即事件實(shí)現(xiàn)順序的詳細(xì)說(shuō)明。1.2.1 網(wǎng)絡(luò)協(xié)議該協(xié)議將網(wǎng)絡(luò)功能劃分成獨(dú)立的四層結(jié)構(gòu),自上而下分別是應(yīng)用層、傳輸層、網(wǎng)際層和

14、網(wǎng)絡(luò)接口層,如圖1.36所示。1.2.1 網(wǎng)絡(luò)協(xié)議其實(shí)TCP/IP并不是一個(gè)單獨(dú)的協(xié)議,而是由一系列網(wǎng)絡(luò)協(xié)議所組成的協(xié)議集合(協(xié)議族),這個(gè)龐大的協(xié)議家族按照如圖1.37所示的分層結(jié)構(gòu)組織起來(lái)構(gòu)成的有機(jī)整體稱(chēng)為網(wǎng)絡(luò)協(xié)議棧。1.2.1 網(wǎng)絡(luò)協(xié)議1. 1. 應(yīng)用層(應(yīng)用層(Application LayerApplication Layer)。)。應(yīng)用層在TCP/IP協(xié)議棧的第4層,即最高層,它提供面向用戶(hù)的網(wǎng)絡(luò)服務(wù),如進(jìn)行文件的傳輸服務(wù)和遠(yuǎn)程登錄服務(wù)等。不同的用戶(hù)對(duì)應(yīng)用層服務(wù)的需求不同。因此,應(yīng)用層定義了許多面向用戶(hù)的,提供特定服務(wù)的協(xié)議。比較常用的有遠(yuǎn)程登錄協(xié)議(Telnet)、文件傳輸協(xié)議(

15、FTP)、超文本傳輸協(xié)議(HTTP)、域名系統(tǒng)(DNS)、簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(SNMP)、簡(jiǎn)單郵件傳輸協(xié)議(SMTP)、郵局協(xié)議(POP3)和即時(shí)通信協(xié)議(OICQ)等。2. 2. 傳輸層(傳輸層(Transport LayerTransport Layer)。)。在應(yīng)用層之下的是傳輸層,有的書(shū)中也稱(chēng)為“運(yùn)輸層”。在TCP/IP協(xié)議棧中,傳輸層處于第3層。傳輸層完成通常所說(shuō)的兩臺(tái)主機(jī)之間的通信,其實(shí)質(zhì)是兩臺(tái)主機(jī)上對(duì)應(yīng)的應(yīng)用進(jìn)程之間應(yīng)用進(jìn)程之間的通信,也稱(chēng)為端到端(End to End)通信。1.2.1 網(wǎng)絡(luò)協(xié)議3. 3. 網(wǎng)際層(網(wǎng)際層(Internet LayerInternet Layer)

16、。)。網(wǎng)際層在TCP/IP協(xié)議棧的第2層,也稱(chēng)為互聯(lián)網(wǎng)絡(luò)層(互聯(lián)層)或Internet層,因該層的主要協(xié)議是IP,所以也可簡(jiǎn)稱(chēng)為IP層。它是TCP/IP協(xié)議棧中最重要的一層,主要功能是將源主機(jī)上的分組根據(jù)需要發(fā)送到Internet中的任何一臺(tái)目標(biāo)主機(jī)上。4. 4. 網(wǎng)絡(luò)接口層(網(wǎng)絡(luò)接口層(Host-to-network LayerHost-to-network Layer)。)。網(wǎng)絡(luò)接口層處于TCP/IP協(xié)議棧的最低層,它負(fù)責(zé)將其之上的網(wǎng)絡(luò)層所要發(fā)送出去的數(shù)據(jù)(即IP數(shù)據(jù)報(bào))發(fā)送到其下面的物理網(wǎng)絡(luò),或接收由物理網(wǎng)絡(luò)發(fā)送到該目標(biāo)機(jī)的數(shù)據(jù)幀,并抽出IP數(shù)據(jù)報(bào)交給網(wǎng)際層。1.2.2 網(wǎng)絡(luò)應(yīng)用編程界面

17、平時(shí)上網(wǎng)的時(shí)候如果單擊桌面右下角任務(wù)欄上表示網(wǎng)絡(luò)連接的圖標(biāo),在彈出的網(wǎng)絡(luò)連接狀態(tài)對(duì)話(huà)框中單擊“屬性”按鈕,就可以在連接使用的項(xiàng)目列表中看到已經(jīng)內(nèi)置于操作系統(tǒng)之中的TCP/IP了,如圖1.38所示。1.2.2 網(wǎng)絡(luò)應(yīng)用編程界面學(xué)習(xí)網(wǎng)絡(luò)編程首先要清楚所做的是哪一個(gè)層次上的編程工作。目前,網(wǎng)絡(luò)的四層體系結(jié)構(gòu)中的三層已經(jīng)有了成熟可靠的實(shí)現(xiàn)實(shí)體,如圖1.39所示。編程界面有兩種形式,一種是由內(nèi)核直接提供的系統(tǒng)調(diào)用,在Windows下表現(xiàn)為Windows API函數(shù);另一種是以程序庫(kù)方式提供的各種函數(shù)和類(lèi)。1.2.2 網(wǎng)絡(luò)應(yīng)用編程界面TCP/IP網(wǎng)絡(luò)環(huán)境下的應(yīng)用程序是通過(guò)網(wǎng)絡(luò)應(yīng)用編程界面(Socket,即

18、套接字)實(shí)現(xiàn)的。(1)Windows Socket的概念。Windows Socket顧名思義,就是在Windows環(huán)境下使用的Socket,那么Socket又是什么呢?它是一套網(wǎng)絡(luò)編程機(jī)制(或規(guī)范),簡(jiǎn)稱(chēng)為Winsock。(2)Windows Socket的來(lái)源。Socket最早是UNIX操作系統(tǒng)下流行的一種網(wǎng)絡(luò)編程接口,于1983年在Berkeley(加州大學(xué)伯克利分校)4.2 BSD操作系統(tǒng)中被首先引入,因此被稱(chēng)為Berkeley Socket API。1.2.3 網(wǎng)絡(luò)程序工作機(jī)理通信時(shí),其中的一個(gè)網(wǎng)絡(luò)程序?qū)⒁獋鬏數(shù)囊欢涡畔?xiě)入它所在主機(jī)的Socket中,該Socket通過(guò)與網(wǎng)絡(luò)接口卡相連的傳輸介質(zhì)將這段信息發(fā)送到另外一臺(tái)主機(jī)的Socket中,使這段信息能夠傳送到其他程序中,如圖1.40所示。1.2.3 網(wǎng)絡(luò)程序工作機(jī)理為了滿(mǎn)足不同的通信程序?qū)νㄐ刨|(zhì)量和性能的要求,一般的網(wǎng)絡(luò)系統(tǒng)都提供了以下三種不同類(lèi)型的套接字,以供用戶(hù)在設(shè)計(jì)網(wǎng)絡(luò)程序時(shí)根據(jù)需要進(jìn)行選擇。 流式套接字(SOCK_STREAM)。它提供了一種可靠的、面向連接的雙向數(shù)據(jù)傳輸服務(wù)。實(shí)現(xiàn)了數(shù)據(jù)的無(wú)差錯(cuò)、無(wú)重復(fù)地發(fā)送,內(nèi)設(shè)流量控制,被傳輸?shù)臄?shù)據(jù)看作是無(wú)記錄邊界的字節(jié)流。 數(shù)據(jù)報(bào)套接字(SOCK_DGRAM)。它提供了一種無(wú)連接、不可靠的雙向數(shù)據(jù)傳輸服務(wù)。數(shù)據(jù)以獨(dú)立的包形式被發(fā)送,并且保留了記錄邊界,不提供可靠性保

溫馨提示

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

評(píng)論

0/150

提交評(píng)論