【文章內(nèi)容簡(jiǎn)介】
L EI D C _ S T O R E F I L EI D C _ L O A D F I L EI D C _ Q U I TI D C _ U P D A T E圖 部分控件及關(guān)聯(lián)的變量 ? 為類定義兩個(gè)公有的成員變量,如下: 連接和登陸驗(yàn)證 ? 用戶需要通過(guò)客戶端來(lái)連接服務(wù)器,然后登錄。這樣才能對(duì)服務(wù)器上的文件進(jìn)行操作。 .實(shí)現(xiàn)連接和登陸驗(yàn)證 ? 添加“連接服務(wù)器”按鈕的消息響應(yīng)函數(shù) (),代碼如下: ? 用戶使用該軟件時(shí)首先應(yīng)該填寫主機(jī)、端口、用戶名和密碼信息,便于與指定的服務(wù)器連接,然后完成登陸驗(yàn)證。連接和登陸的驗(yàn)證過(guò)程如圖所示。 圖 連接和登陸驗(yàn)證過(guò)程示意圖 ? 響應(yīng)函數(shù) ()用到了中的類的對(duì)象,它的大部分功能繼承自類,實(shí)際上代碼中對(duì)象調(diào)用的函數(shù)都繼承自。 客 戶 端 發(fā)送 的 命 令服 務(wù) 器 端返 回 響 應(yīng)? 功能實(shí)現(xiàn)過(guò)程: ? ()調(diào)用成員函數(shù) ()創(chuàng)建了,用于向服務(wù)器發(fā)送命令和接收來(lái)自服務(wù)器的響應(yīng)。 ? ()調(diào)用成員函數(shù) ()連接服務(wù)器,需要向函數(shù)提供服務(wù)器的和端口號(hào)。 ? ()調(diào)用我們自己將要封裝的個(gè)函數(shù) ()和 (),發(fā)送用戶名和密碼,并接收來(lái)自服務(wù)器的響應(yīng)。 ? ()禁用相關(guān)的文本編輯框和按鈕,防止用戶再做修改困擾我們的程序。 .封裝發(fā)送命令函數(shù) ? 為類添加公有成員函數(shù) (),用于發(fā)送命令信息,代碼如下: ? 函數(shù) ()以發(fā)送的命令為參數(shù),功能包括:調(diào)用類的成員函數(shù) ()發(fā)送命令;添加命令到上,方便用戶知道程序做了什么,這里用到了類的成員函數(shù) ()。 .封裝接收響應(yīng)函數(shù) ? 為類添加公有成員函數(shù) (),用于接收來(lái)自服務(wù)器的響應(yīng)消息,代碼如下: ? 函數(shù) ()沒有參數(shù),功能包括:調(diào)用類的成員函數(shù) ()接收來(lái)自服務(wù)器的響應(yīng)消息;添加響應(yīng)消息到上,方便用戶知道服務(wù)器的應(yīng)答。 ? 程序連接服務(wù)器的運(yùn)行效果如圖所示。 圖 程序連接服務(wù)器的運(yùn)行效果 首 先 填 寫 基 本 信 息 ,然 后 連 接 F T P 服 務(wù) 器連 接 并 且 登 錄后 禁 用 的 控 件同 時(shí) 由 列 表 框顯 示 客 戶 端 和服 務(wù) 器 的 動(dòng) 態(tài) 更新文件列表 ? 客戶端可以發(fā)送命令到服務(wù)器,服務(wù)器會(huì)告知客戶端:用戶的根目錄下到底有哪些文件。文件的信息是通過(guò)客戶端與服務(wù)器端建立的數(shù)據(jù)連接傳送的,傳完連接會(huì)被關(guān)閉。 .讓服務(wù)器進(jìn)入被動(dòng)模式() ? 在主動(dòng)模式()下, 的客戶端只是告訴服務(wù)器自己的端口號(hào),讓服務(wù)器來(lái)連接客戶端指定的端口。對(duì)于客戶端的防火墻來(lái)說(shuō),這是從外部到內(nèi)部的連接,可能會(huì)被阻塞。 ? 為了解決服務(wù)器發(fā)起到客戶的連接問(wèn)題,有了另一種 連接方式,即被動(dòng)方式。命令連接和數(shù)據(jù)連接都由客戶端發(fā)起,這樣就解決了從服務(wù)器到客戶端的數(shù)據(jù)端口的連接被防火墻過(guò)濾的問(wèn)題。 ? 下面我們要在類中添加公有的成員函數(shù)(),用來(lái)實(shí)現(xiàn)這一功能,函數(shù)封裝如下: ? 雖然代碼看起來(lái)有些多(至少我這么認(rèn)為),但客戶端和服務(wù)器端的交互還是很簡(jiǎn)單的,如圖所示。 圖 客戶端和服務(wù)器端的交互 ? 但函數(shù) ()實(shí)現(xiàn)的功能還是比較簡(jiǎn)單的: ? ()發(fā)送命令讓服務(wù)器進(jìn)入被動(dòng)模式(),服務(wù)器會(huì)新開一個(gè)端口號(hào)等待客戶端的連接。 ? ()從服務(wù)器返回的響應(yīng)中取出數(shù)據(jù),然后計(jì)算端口號(hào)。 ? ()客戶端創(chuàng)建一個(gè)臨時(shí)的套接字連接服務(wù)器新開的端口。 .更新列表 ? 添加“更新文件列表”按鈕的消息響應(yīng)函數(shù) (),代碼如下: ? 響應(yīng)函數(shù) ()功能的實(shí)現(xiàn)過(guò)程:調(diào)用我們之前封裝的函數(shù)使服務(wù)器進(jìn)入被動(dòng)模式,再向服務(wù)器發(fā)送命令,用新建立的連接接收文件信息數(shù)據(jù)(封裝在了函數(shù) ()中),接收到的數(shù)據(jù)信息如圖所示。最后關(guān)閉數(shù)據(jù)連接。 圖 由數(shù)據(jù)連接接收的文件信息 ? 在類中添加公有的成員函數(shù) (),實(shí)現(xiàn)解析文件信息,獲取文件列表的功能,代碼如下: ? 函數(shù) ()功能的實(shí)現(xiàn)過(guò)程:用臨時(shí)的數(shù)據(jù)連接接收數(shù)據(jù)(文件信息)