周超 劉傳琦
摘? ?要:文章設(shè)計(jì)了一款使用MFC作為類庫(kù)、前臺(tái)采用Visual C++進(jìn)行開(kāi)發(fā)的傳輸文件集成軟件。該軟件實(shí)現(xiàn)了以文本傳輸為核心,將互聯(lián)網(wǎng)傳輸、USB傳輸、串行口傳輸3種傳輸方式高度集成。具有適應(yīng)性強(qiáng)、能夠提高文件傳輸效率、加強(qiáng)文件傳輸?shù)谋C苄缘葍?yōu)點(diǎn)。
關(guān)鍵詞:Socket;微軟基礎(chǔ)類庫(kù);傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議
隨著信息技術(shù)的進(jìn)步,文件的傳輸功能發(fā)揮著越來(lái)越重要的作用。為了更加高效、安全地傳輸文件,本文設(shè)計(jì)了一款基于VC的傳輸文件集成軟件,并且對(duì)相關(guān)模塊進(jìn)行了編程實(shí)現(xiàn),最后對(duì)軟件進(jìn)行了測(cè)試,取得了良好的效果。
1? ? 軟件設(shè)計(jì)及實(shí)現(xiàn)
1.1? 窗口的設(shè)計(jì)
首先,創(chuàng)建微軟基礎(chǔ)類庫(kù)(Microsoft Foundation Classes,MFC)工程,其中,應(yīng)用程序類型選擇和MFC庫(kù)的選擇是兩個(gè)比較重要的步驟。對(duì)于應(yīng)用程序類型的選項(xiàng)有4類,分別是“單個(gè)文檔”“多個(gè)文檔”“基于對(duì)話框”“多個(gè)頂層文檔”。
其次,進(jìn)行MFC庫(kù)的選擇,該選項(xiàng)有兩類,分別是“在共享DLL中使用MFC”與“在靜態(tài)庫(kù)中使用MFC”。在開(kāi)發(fā)階段的程序中選擇“在靜態(tài)庫(kù)中使用MFC”,其大小以及效率都不用在意,編譯后的程序能直接容納調(diào)取MFC部分的庫(kù),通過(guò)選項(xiàng)生成的程序可執(zhí)行文件幾乎能在所有的窗口上執(zhí)行,運(yùn)行時(shí)不需要DLL[1]。
再次,進(jìn)行“控件的選擇”,這是根據(jù)軟件的需要來(lái)進(jìn)行篩選的,本軟件因需要選擇了5種控件,其名稱和功能分別如下:(1)Text Control:可以顯示文本。(2)Combo-box Control:提供下拉選項(xiàng)。(3)Group-box Control:把若干個(gè)控件包含在一個(gè)組里。(4)Edit Control:編輯文本框,用戶可填入信息。(5)Button Control:按鈕。給控件命名采用匈牙利命名法,控件名即是ID。
最后,進(jìn)行窗口應(yīng)用程序的設(shè)計(jì),其中,一個(gè)相當(dāng)重要的元素就是窗口,主窗口在一個(gè)Windows Application至少要有一個(gè),窗口顯示在屏幕上就是一塊矩形區(qū)域,是用戶與Windows Application交互的接口,接收用戶的輸入以及顯示輸出皆能通過(guò)Windows進(jìn)行。本設(shè)計(jì)具有菜單、光標(biāo)、圖標(biāo)、背景色等選項(xiàng)。在創(chuàng)建Windows時(shí)設(shè)定其類型和大小,在設(shè)計(jì)Windows Class時(shí)指定光標(biāo)、圖標(biāo)和背景。在窗口應(yīng)用程序設(shè)計(jì)中還包括字體設(shè)計(jì)、顏色設(shè)計(jì)、圖標(biāo)設(shè)計(jì)等。其中,字體設(shè)計(jì)中使用SetFont函數(shù)可以更改指定控件的字體,該函數(shù)實(shí)現(xiàn)把WM_SETFONT消息發(fā)送到與字體對(duì)象對(duì)應(yīng)的字體句柄的控件。顏色設(shè)計(jì)中,首先,調(diào)用GetClientRect,用此方法檢索控制客戶端區(qū)域的大小,然后調(diào)用參數(shù)lpRect,指定一個(gè)指向由RECT組成的指針。在圖標(biāo)設(shè)計(jì)中,使用了重要函數(shù)OnPaint,其是CWnd的類成員,也是WM_PAINT消息的一種消息處理函數(shù),用來(lái)負(fù)責(zé)響應(yīng)該消息。
1.2? 發(fā)送與接收功能的設(shè)計(jì)與實(shí)現(xiàn)
首先,實(shí)現(xiàn)CComPort類,可用于通過(guò)端口號(hào)來(lái)打開(kāi)端口、設(shè)置端口、發(fā)送數(shù)據(jù)、接收數(shù)據(jù)等。編寫(xiě)打開(kāi)端口邏輯程序時(shí),CreateFile函數(shù)功能多樣,可打開(kāi)普通文件、設(shè)備、串口。編寫(xiě)端口配置邏輯程序時(shí),相關(guān)重要函數(shù)功能如下:(1)SetupComm函數(shù),指定通信設(shè)備的通信參數(shù)能被其初始化。(2)PurgeComm函數(shù)的作用是清空緩沖區(qū)。編寫(xiě)關(guān)閉端口號(hào)邏輯程序時(shí),CloseHandle函數(shù)涵蓋了同步對(duì)象、文件、文件映射、線程、進(jìn)程以及安全等。編寫(xiě)接收數(shù)據(jù)邏輯程序時(shí),GetLastError函數(shù)返回的值,通過(guò)在應(yīng)用程序接口函數(shù)中調(diào)用SetLastError或SetLastErrorEx進(jìn)行設(shè)置。編寫(xiě)發(fā)送數(shù)據(jù)邏輯程序時(shí),應(yīng)用GetBuffer函數(shù),其功能是獲取指定緩沖區(qū)里的內(nèi)容大小的指針并進(jìn)行修改[2]。
本軟件可實(shí)現(xiàn)Socket,USB與ComRS232數(shù)據(jù)的發(fā)送與接收。第一步:確定發(fā)送方式,若錯(cuò)誤,則提示未選擇發(fā)送方式再退出;若正確,則跳轉(zhuǎn)到發(fā)送方式。第二步:選擇一種發(fā)送方式,例如選擇Socket,判斷參數(shù)是否存在,若否,則提示錯(cuò)誤再退出;若是,則建立線程,如圖1所示。
由于3種傳輸方式實(shí)現(xiàn)發(fā)送與接收的邏輯相似,以下將用Socket作例子進(jìn)行詳細(xì)敘述。Socket是一組接口,也是應(yīng)用層與TCP/IP族通信的中間軟件抽象層,在設(shè)計(jì)模式中起到門(mén)面作用,繁雜的互聯(lián)網(wǎng)協(xié)議被它隱藏在套接口之后,對(duì)用戶而言,一組簡(jiǎn)單的接口就是全部,為符合指定的協(xié)議,應(yīng)讓Socket去組織數(shù)據(jù)。首先,服務(wù)器端應(yīng)先初始化Socket,再與Port(端口)綁定;其次,對(duì)Port進(jìn)行監(jiān)聽(tīng);再次,調(diào)用accept阻塞;最后,等待與Client(客戶端)連接。若此時(shí)Client有初始化一個(gè)Socket并連接服務(wù)器,若連接成功,Client與服務(wù)器端成功建立連接。當(dāng)Client發(fā)送數(shù)據(jù)請(qǐng)求之后,服務(wù)器端則會(huì)接收到并處理該請(qǐng)求,再回應(yīng)數(shù)據(jù)發(fā)送給Client,然后會(huì)讀取該數(shù)據(jù),最后關(guān)閉連接,一次交互就此結(jié)束。對(duì)于本軟件,第一步:當(dāng)文件發(fā)送之后,發(fā)送端需要接收反饋信息,若沒(méi)有接收到反饋信息,則需要判斷是否達(dá)到發(fā)送上限,若沒(méi)有則重新打包發(fā)送,若有則退出。第二步:若接收到反饋信息,則需要判斷反饋信息是否正確,若錯(cuò)誤則退出。第三步:若正確則判斷發(fā)送次數(shù)是否達(dá)到3次,若達(dá)到3次則退出,若沒(méi)有則重新打包發(fā)送,如圖2所示。
2? ? 軟件功能測(cè)試
2.1? Socket功能測(cè)試
在進(jìn)行Socket傳輸功能調(diào)試時(shí),使用NetAssist應(yīng)用程序。在發(fā)送區(qū)和接收區(qū)均設(shè)置選擇“十六進(jìn)制顯示”,輸入發(fā)送內(nèi)容。更改協(xié)議類型后,進(jìn)行連接。
2.2? USB與串口功能測(cè)試
在進(jìn)行USB或者串口傳輸功能調(diào)試時(shí),使用UartAssist應(yīng)用程序。在發(fā)送和接收區(qū)設(shè)置選擇“十六進(jìn)制顯示”,輸入發(fā)送內(nèi)容,點(diǎn)發(fā)送即可,如圖3所示。
2.3? 軟件的圖形界面測(cè)試
在VS軟件里,打開(kāi)所編寫(xiě)保存的程序包,然后在【視圖】里找到【其他窗口】,打開(kāi)【資源視圖】,在FileTransport.rc文件夾里,找到Diolog文件打開(kāi),找到IDD_FILE_TRANSPORT_DIALOG打開(kāi),即可得到圖形化界面,如圖4所示。然后按F5進(jìn)行運(yùn)行即可??梢钥匆?jiàn)傳輸方式的下拉菜單有3種選項(xiàng),Send與Recv只讀,但可垂直滾動(dòng),其他控件功能皆完成,軟件成功實(shí)現(xiàn)運(yùn)行。
[參考文獻(xiàn)]
[1]吳焱.Visual C++程序設(shè)計(jì)基礎(chǔ)[M].重慶:重慶大學(xué)出版社,2004.
[2]丁展.Visual C++ 網(wǎng)絡(luò)通信編程實(shí)用案例精選[M].北京:人民郵電出版社,2004.
Design and implementation of transmission file integration software based on VC
Zhou Chao, Liu Chuanqi
(School of Electrical Engineering, Tongling University, Tongling 244061, China)
Abstract:This paper designs a transmission file integration software which uses MFC as class library and Visual C as foreground. The software takes text transmission as the core and integrates Internet transmission, USB transmission and serial port transmission. It has the advantages of strong adaptability, can improve the efficiency of file transfer, strengthen the confidentiality of file transfer and so on.
Key words:Socket; microsoft basic class library; transmission control protocol/internet protocol