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