當前位置:編程學習大全網 - 源碼下載 - FTP網站源代碼

FTP網站源代碼

在PB中實現FTP傳輸

用PB開發時,經常需要用到ftp功能。最典型的應用是從數據窗口中的數據生成壹個txt文件,然後通過ftp將這個數據文件發送到遠程服務器。因為pb本身不提供任何ftp功能,所以如果要在pb中調用ftp,只能應用pb以外的資源。下面是筆者在pb開發中總結的幾種方法。

1,使用外部命令

這個方法就是在pb程序中運行Windows自帶的ftp命令。具體方法是在程序中生成壹個. bat文件,把要運行的ftp命令寫入這個文件,然後運行這個批處理文件。假設ftp服務器ip為202.114.67.2,用戶名為user,密碼為12345。現在需要將本地c:\temp\下的t00001.txt文件上傳到服務器的\txtdata\目錄下。pb代碼如下:

整數li_bat //文件名指針

Li _ bat = FileOpen(path _ FTP+' get _ file . bat ',

lineMode!,寫!洛克萊特。,替換!)

FileWrite(li_bat,' cd c:\temp\ ')

FileWrite(li_bat,' ftp 202.114.67.2 ')

FileWrite(li_bat,'用戶')

FileWrite(li_bat,' 12345 ')

FileWrite(li_bat,' put t00001.txt

\txtdata\t00001.txt ')

FileWrite(li_bat,'拜拜')

FileWrite(li_bat,' exit ')

文件關閉(li_bat)

運行(path_ftp+'get_file。'蝙蝠',最小化!)

Messagebox("消息","數據報告已完成")

這種方法的優點是簡單易行,不需要調用API函數,也不需要添加OLE。壹個缺點是運行外部命令,會打開壹個dos窗口,不夠和諧;二是數據傳輸成功與否無法判斷,編程時不易控制。

2.使用互聯網傳輸控制。

網絡傳輸控件是網絡編程中非常常見的控件。它支持互聯網上最廣泛使用的兩種協議,即Http和Ftp。在windows98中,它是系統自帶的。有關該控件的更多信息,請參見相關書籍。這裏我們只使用它的Ftp功能。在PB中添加壹個帶有這個控件的OLE,命名為ole_1,根據下面的數據設置這個控件的屬性(註意不是ole_1的屬性)。請為表中未列出的屬性使用默認值:

屬性值描述

協議2規定了Ftp協議。

遠程主機202.114.67.2

用戶名User1

密碼12345

互聯網傳輸控制支持兩種數據傳輸模式,即同步傳輸模式和異步傳輸模式。同步傳輸模式在數據傳輸時會阻塞程序,這個功能是通過調用控件的OpenUrl方法實現的;異步模式不阻塞程序,通過調用控件的Execute方法實現。同步方式雖然容易控制,但是只能下載文件,不能上傳文件,限制了它的實際應用。要上傳和下載數據,只能使用該控件的異步傳輸模式。要完成上述示例中的函數,請將以下語句添加到PB程序中:

Ole_1.object.execute(“,”put c:

\ temp \ t 00001 . txt \ txt data \ t 00001 . txt ")

同樣,如果要將文件從服務器下載到本地,請將immediate語句添加到程序中:

Ole_1。object.execute("," get \ txt data \ t 00001 . txt c:\ temp \ t 00001 . txt ")

Internet傳輸控制的功能非常強大,足以做壹個功能完善的FTP工具。而且是操作系統自帶的,編程時不需要註冊新的控件。但是根據筆者的經驗,這個控件也有兩個不可忽視的缺點。首先,它的數據上傳和下載是異步的,壹次只運行壹個ftp命令是很時髦的。如果壹次運行多個ftp命令,將會出現錯誤。比如我們想先進入服務器的\file目錄,然後上傳數據,那麽程序應該是這樣的:

ole _ 1 . object . execute(" " CD \ file \ ")

Ole_1.object.execute(" "," put

c:\ temp \ t 00001 . txt \ txt data \ t 00001 . txt ")

因為execute方法是異步執行的,所以它不等待第壹條語句完成就開始執行第二條語句,這可能會導致錯誤,因為服務器還沒有時間將當前目錄轉移到\file。

其次,筆者還發現了壹個令人費解的問題,就是使用這個控件上傳時,會將上傳到服務器的文件的文件名改為大寫。在上面的例子中,本地的t00001.txt上傳到服務器後,它的名字會變成T0001.txt,在NT上自然是壹樣的,但是在Unix機器上可能會帶來錯誤。

3.使用Mabry Internet FTP/X控件。

該控件是由Mabry軟件公司提供的Ftp控件。讀者可以去www.mabry.com下載這個控件(mftpx.ocx)。經過比較,筆者認為在ftp傳輸中使用該控件進行編程是最方便的。它可以完成大部分Ftp功能,在編程中可以輕松控制程序的運行。比如,要完成以上功能,我們先註冊控件,然後在PB程序中添加控件的壹個Ole,命名為Ole _ 1;使用單行編輯器Sle_1顯示相關信息;點擊按鈕Cb_1,執行Ftp操作。設置另壹個布爾實例變量,命名為is_con,並將其設置為false以指示網絡是否連通。按如下方式設置該控件的屬性:

屬性值描述

主機202.114.67.2

登錄名用戶

登錄密碼12345

超時10根據實際情況設置。

將以下代碼添加到Cb_1的clicked事件中:

Sle_1.text = "正在連接..."

setpointer(沙漏!)

ole_1.object.connect()

如果是_con,那麽

Sle_1.text = "開始傳輸..."

ole_1.object.putfile

(“c:\temp\t00001.txt”,“/txtdata/t00001.txt”)

Sle_1.text = "傳輸完成!"

如果…就會結束

setpointer(箭頭!)

is_con = false

在Ole_1的每個事件中添加相應的代碼:

關聯事件:

如果f連接,則

Sle_1.text = "連接成功!"

is_con = true

其他

Sle_1.text = "連接失敗!"

is_con = false

如果…就會結束

Externalexception事件:

Sle_1.text = "外部錯誤,可能是網絡故障"

action = ExceptionIgnore!

進度事件:

Sle_1.text = "transmitted "

+string(bytestransfered)+)+" bytes ... "

  • 上一篇:和平精英的敏感度最穩定。
  • 下一篇:為什麽現在買不到好的收音機?
  • copyright 2024編程學習大全網