周亞文 河南大學(xué)
就TCP/IP協(xié)議來(lái)講,它是一個(gè)開(kāi)放的網(wǎng)絡(luò)協(xié)議體系,在利用TCP/IP 協(xié)議的網(wǎng)絡(luò)操作系統(tǒng)中,不同的應(yīng)用程序可以通過(guò)網(wǎng)絡(luò)編程接口套接字( Socket)與其下層核心協(xié)議通信。而大部分Windows應(yīng)用程序框架來(lái)源于MFC,定義了應(yīng)用程序的結(jié)構(gòu),實(shí)現(xiàn)了應(yīng)用程序的公共部分,封裝了大部分的Windws API 函數(shù),降低了編程難度,大大地提高了應(yīng)用程序的開(kāi)發(fā)速度和質(zhì)量。本文討論的客戶端服務(wù)器通信的設(shè)計(jì)與實(shí)現(xiàn)方法很好地詮釋了Socket通信的原理。
MFC是一個(gè)編程框架。
MFC應(yīng)用程序框架,簡(jiǎn)稱MFC框架,是由MFC(Microsoft Foundation Class Library)中的各種類結(jié)合起來(lái)構(gòu)成的。MFC框架從總體上定義了應(yīng)用程序的輪廓,并提供了用戶接口的標(biāo)準(zhǔn)實(shí)現(xiàn)方法,程序員只須通過(guò)預(yù)定義的接口把具體應(yīng)用程序特有的東西填入這個(gè)輪廓,就能建立Windows下的應(yīng)用程序。MFC 中所有的類都來(lái)源于一個(gè)基類:CObject。
選定WINDOWS平臺(tái)開(kāi)發(fā)網(wǎng)絡(luò)通信程序,可以選擇WINDOWS的SOCKETS編 程 接 口,Windows Sockets是 一套開(kāi)放的、支持多種協(xié)議的Windows下的網(wǎng)絡(luò)編程接口。現(xiàn)在的Winsock已經(jīng)基本上實(shí)現(xiàn)了與協(xié)議無(wú)關(guān),可以使用Winsock來(lái)調(diào)用多種協(xié)議的功能,但較常使用的是TCP/IP協(xié)議。
C/S結(jié)構(gòu)軟件分為客戶機(jī)和服務(wù)器兩層,客戶機(jī)不是毫無(wú)運(yùn)算能力的輸入、輸出設(shè)備,而是具有了一定的數(shù)據(jù)處理和數(shù)據(jù)存儲(chǔ)能力,通過(guò)把應(yīng)用軟件的計(jì)算和數(shù)據(jù)合理地分配在客戶機(jī)和服務(wù)器兩端,可以有效地降低網(wǎng)絡(luò)通信量和服務(wù)器運(yùn)算量。
C/S結(jié)構(gòu)的優(yōu)點(diǎn)是能充分發(fā)揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給服務(wù)器。對(duì)應(yīng)的優(yōu)點(diǎn)就是客戶端響應(yīng)速度快。
3.1.1 服務(wù)器端應(yīng)用程序的創(chuàng)建:
(1)使用MFC AppWizard創(chuàng)建服務(wù)器端應(yīng)用程序框架。
創(chuàng)建一個(gè)工程名為Server,選擇 Dialog based 的應(yīng)用程序類型,選擇中文(中國(guó)),選擇Windows Sockets支持,其他接受系統(tǒng)默認(rèn)值。所創(chuàng)建的程序?qū)⒆詣?dòng)創(chuàng)建兩個(gè)類,應(yīng)用程序類ServerApp,對(duì)應(yīng)的文件是Server.cpp 和 Server.h;對(duì)話框類 ServerDlg,對(duì)應(yīng)的文件是ServerDlg.cpp 和 ServerDlg.h。
(2)為對(duì)話框界面添加控件對(duì)象
在創(chuàng)建了應(yīng)用程序框架之后,可以布置程序的主對(duì)話框。在Visual Studio 的“SolutionExplorer(解決方案資源管理器)”(可通過(guò) View-SolutionExplorer 調(diào)出)中選擇“ResourceFiles”并通過(guò)單擊展開(kāi),雙擊后綴為.rc 的文件,在出現(xiàn)的界面中展開(kāi) Dialog,雙擊其中的 IDD_DIALOG,便會(huì)出現(xiàn)圖形界面的可視化設(shè)計(jì)窗口以及圖形界面控件面板,利用控件面板可以方便地在程序的主對(duì)話框界面中添加相應(yīng)的可視控件對(duì)象。添加相應(yīng)的控件對(duì)象。
(3)為對(duì)話框中的控件對(duì)象定義相應(yīng)的成員變量
在窗口菜單中選擇“Project(項(xiàng)目)”/“Class Wizard(類向?qū)В泵睿M(jìn)入“MFC ClassWizard”(類向?qū)В?duì)話框,將Class name通過(guò)下拉列表勾選為ServerDlg,然后選擇“Member Variables”(成員變量)選項(xiàng)卡,用類向?qū)閷?duì)話框中的控件對(duì)象定義相應(yīng)的成員變量。在左邊的列表框中選擇一個(gè)控件,然后單擊“Add Variable”(添加變量)按鈕,會(huì)彈出“Add Member Variable”(添加成員變量)對(duì)話框,根據(jù)需要進(jìn)行定義。
打開(kāi)服務(wù)器, 輸入端口號(hào)(1000),點(diǎn)擊“OPEN”按鈕開(kāi)啟服務(wù)器。這時(shí)服務(wù)器對(duì)話框中顯示“服務(wù)已經(jīng)開(kāi)啟!”;接著打開(kāi)客戶端,輸入IP(192.168.43.204)和相應(yīng)的端口號(hào)(1000),該端口號(hào)必須和服務(wù)器端口號(hào)一致,否則無(wú)法連接服務(wù)器,在客戶端對(duì)話框中輸入所要發(fā)送的消息,最后點(diǎn)擊“send”按鈕,在服務(wù)器對(duì)話框中就可以看到客戶端發(fā)送的文本消息。