九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
利用Winsock控件實現(xiàn)FTP編程

引言

       隨著計算機在鐵路各部門的普及,辦公無紙化逐漸成為一種趨勢,文件資料、報表等數(shù)據(jù)的傳送都通過計算機網(wǎng)絡來完成。FTP成為傳送這些數(shù)據(jù)的流行工具。為了更好地使用FTP,應該了解和掌握FTP編程。只有把FTP內(nèi)嵌到應用程序中去,FTP的應用才更靈活,才能滿足各種數(shù)據(jù)傳輸?shù)男枰1疚囊?/span>VB中的Winsock控件為工具,根據(jù)FTP的基本原理,闡明了FTP客戶端編程的一般方法。

 

FTP客戶端與服務器間的基本協(xié)作過程

              下面是FTP模型的基本原理圖:

 

 

服務器數(shù)據(jù)傳輸進程

客戶端數(shù)據(jù)傳輸進程

文件系統(tǒng)

服務器協(xié)議接口

客戶端協(xié)議接口

用戶界面

用戶

FTP命令

FTP響應

數(shù)據(jù)連接

文件系統(tǒng)

 

 

 

 

 

 

 

 

 

 

 

 


      

 

 

                   服務器FTP                                    客戶端FTP

 

 

1客戶端與服務器連接

                FTP是建立在TCP之上的連接,端口號使用21。若客戶端與服務器之間成功連接,服務器將返回字符串,如:

220 GMS Version 5.0

      前三個字符220表示客戶端與服務器成功連接,后面的字符會因服務器的不同而不同,但我們只關(guān)心前三個字符。

    2、用戶名和密碼認證

            客戶端發(fā)送用戶名給服務器,如:

                                     USER guo

         如果服務器找到用戶名guo,將返回字符串,如:

                            331 User name okay, need password.

        接著客戶端應發(fā)送密碼給服務器,如:

                                                                           PASS aaa

         密碼正確,返回如:

                               230 User logged in, proceed.

         如果用戶名或密碼認證沒通過,返回如:

530 Not logged in.

         用戶名也可以使用匿名,如:

                                  USER anonymous

         返回如:

                   331 Anonymous access allowed,send identity (e-mail name) as password.

3、建立數(shù)據(jù)連接

      FTP協(xié)議用兩個連接來達到客戶機與服務器之間交換數(shù)據(jù)的目的。剛才建立了第一個連接——控制連接,它用于傳送命令和響應。我們還要建立第二個連接——數(shù)據(jù)連接,用于數(shù)據(jù)傳輸。FTP提供了兩種方式來建立數(shù)據(jù)連接,一種用PORT命令,一種用PASV命令。我們使用后者。客戶端發(fā)送PASV命令給服務器,服務器返回IP地址和端口號,用來提供給客戶端進行數(shù)據(jù)連接。如:

227 Entering Passive Mode (10,175,125,49,9,17)

          括號里6個數(shù)字中前4個數(shù)字表示IP地址10.175.125.49,后2個數(shù)字表示端口號,這2個數(shù)字按如下公式計算端口號:

                               9*256+17=2321

          這樣,客戶端就可用IP地址10.175.125.49和端口號2321連接服務器,建立數(shù)據(jù)連接。

     4、其它相關(guān)的命令及響應

        LIST命令

    該命令用于獲取FTP服務器的目錄列表,服務器操作成功后返回:

150 Opening ASCII mode data connection for /bin/ls.

目錄列表要通過數(shù)據(jù)連接進行傳輸,若數(shù)據(jù)連接沒有準備好,則返回:

             425 Can’t open data connection.

目錄列表傳到客戶端后,返回:

              226 Transfer complete.

        CWD命令

該命令用于改變服務器的工作目錄。如:

CWD BOOKS

服務器操作成功返回:

       250 Directory changed to /c:/BOOKS.

若沒有找到該目錄,返回:

550 /c:/BOOK: No such file or directory.

        RETR命令

            該命令用于文件下載。如

                            RETR a.txt

    服務器返回:

                   150 Opening ASCII mode data connection for a.txt (124 bytes).

226 Transfer complete.

        STOR命令

該命令用于上傳文件。如:

       STOR b.txt

服務器返回:

     150 Opening ASCII mode data connection for b.txt.

      以上闡明了客戶端與服務器間的基本協(xié)作過程,完整的FTP協(xié)議請參閱RFC 959文檔。

 

程序?qū)嵗?/span>

   根據(jù)上述FTP的基本原理,利用VBWinsock控件提供的TCP連接功能,下面舉一簡單的實例。該例子只實現(xiàn)從服務器(IP地址為10.175.125.49C\b目錄下載文本文件a.txt到客戶端C\a目錄,從客戶端C\a目錄上傳文本文件b.txt到服務器C\b目錄。設(shè)服務器用戶名為aaa,密碼為aaa。

    建立VB工程,添加兩個Winsock控件:Winsock1Winsock2,Winsock1用于命令連接,Winsock2用于數(shù)據(jù)連接。添加兩個命令按扭:downloaduploaddownload 用于下載,upload用于上傳。

   程序代碼具體如下:

 

Dim downorup As String

 

Private Sub Form_Load()

Winsock1.Connect "10.175.125.49", 21   建立命令連接

End Sub

 

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim strData As String

Winsock1.GetData strData

If Left(strData, 3) = "220" Then    若命令連接成功

                Login   登錄

End If

If Left(strData, 3) = "227" Then    若成功進入PASV方式

               MakeDataConnection strData      建立數(shù)據(jù)連接

End If

End Sub

 

Private Sub Login()

Winsock1.SendData "USER aaa" & vbCrLf     發(fā)送用戶名

Winsock1.SendData "PASS aaa" & vbCrLf      發(fā)送密碼

End Sub

 

Private Sub Setpasv()

Winsock1.SendData "PASV" & vbCrLf            設(shè)置PASV方式

End Sub

 

Private Sub download_Click()

ChDir "c:\a"      改變客戶端工作目錄

Winsock1.SendData "CWD b" & vbCrLf      改變服務器工作目錄

Setpasv

Winsock1.SendData "RETR a.txt" & vbCrLf       下載

End Sub

 

Private Sub upload_Click()

    downorup = "up"

    Setpasv

End Sub

 

Private Sub Winsock2_Connect()

If downorup = "up" Then         上傳文件,數(shù)據(jù)連接建立后發(fā)送數(shù)據(jù)

                Dim a As String

               Dim MyString As String

               ChDir "c:\a"

               Open "b.txt" For Binary As #1

Do While Not EOF(1)

                Line Input #1, a

                    MyString = MyString + a + Chr(13) + Chr(10)

               Loop

               Close #1

               Winsock2.SendData MyString & vbCrLf

End If

End Sub

 

Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)

Dim strData As String       服務器從數(shù)據(jù)連接傳來下載文件的數(shù)據(jù)時,保存到本地文件系統(tǒng)中

Winsock2.GetData strData

ChDir "c:\a"

Open "a.txt" For Output As #1

Print #1, strData

Close #1

End Sub

 

Private Sub MakeDataConnection(sData As String)

    Dim iPos As Integer, iPos2 As Integer

    Dim strDataAddress

    iPos = InStr(1, sData, "(") + 1       獲取IP地址

    For i = 1 To 4

        iPos2 = InStr(iPos, sData, ",")

        strDataAddress = strDataAddress & Mid(sData, iPos, iPos2 - iPos) & "."

        iPos = iPos2 + 1

    Next

    strDataAddress = Left(strDataAddress, Len(strDataAddress) - 1)

    Dim i1 As Single, i2 As Single, inPort As Single     計算端口號

    iPos = iPos2 + 1

    iPos2 = InStr(iPos, sData, ",")

    i1 = CSng(Mid(sData, iPos, iPos2 - iPos))

    iPos = iPos2 + 1

    iPos2 = InStr(iPos, sData, ")")

    i2 = CSng(Mid(sData, iPos, iPos2 - iPos))

    inPort = i1 * 256 + i2

If Not Winsock2.State = sckConnected Then

               Winsock2.Close

End If

               Winsock2.Connect strDataAddress, inPort

End Sub

 

Private Sub Winsock2_SendComplete()

ChDir "c:\a"       上傳文件數(shù)據(jù)通過數(shù)據(jù)連接發(fā)送完后,通知服務器接收并保存到其文件系統(tǒng)中

Winsock1.SendData "CWD b" & vbCrLf

Winsock1.SendData "TYPE ASCII" & vbCrLf

Winsock1.SendData "STRU record-structure" & vbCrLf

Winsock1.SendData "STOR b.txt" & vbCrLf

End Sub

 

         該程序在Windown 98下通過Micosoft Visual Basic 5.0編譯執(zhí)行成功,服務器是運行在Windown 98下的Seuver-U FTP軟件。對其他不同文件系統(tǒng)間的FTP,應根據(jù)RFC 959文檔對程序進行適當?shù)男薷模@里不再敘述。

 

結(jié)束語

   在鐵路各信息系統(tǒng)中,數(shù)據(jù)的傳輸是其中重要的一部分。有些系統(tǒng)在總體設(shè)計和編程時沒有充分考慮數(shù)據(jù)傳輸部分,通過安裝FTP軟件用手工方式進行數(shù)據(jù)傳輸,不但降低了效率,還會出現(xiàn)數(shù)據(jù)漏傳,丟失等現(xiàn)象。在總體設(shè)計充分考慮數(shù)據(jù)傳輸部分,并在編程時將FTP內(nèi)嵌到應用程序中,這樣可以提高傳輸效率和質(zhì)量。

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
用VB實現(xiàn)客戶——服務器(TCP/IP)編程實例 — 編程愛好者 programfan.c...
VB Socket編程 框架
用Visual Basic也可以實現(xiàn)“P2P”
利用VB Winsock1如何發(fā)送十六制數(shù)據(jù)
VB6 通過winsock控件數(shù)組實現(xiàn)客戶端和服務器多對一通信
基于UDP的select函數(shù)用法
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服