VB中使用WinSock控件傳送文件

字號:

傳送文件對于網(wǎng)絡(luò)編程來說是基本的功能,比如遠程控制軟件。這些程序提供的傳文件功能根本就不能用。傳文本還可以,傳二進制文件根本就不行。因此,作為一個基本的功能模塊,有必要單獨介紹一下。
    在VB中要傳送字符串:
    Dim strData As String
    strData = \"Test\"
    Winsock1.SendData strData
    但是如果你傳送的二進制文件,你還能用String變量來存放嗎?從理論上分析是不行的。文件雖然可以傳,但是接受的文件和發(fā)送的不一樣,原因可能是二進制文件里可以有任何\"字符\",但是不是所有的字符都可以放在String變量里。
    除了String類型的變量,VB中其他類型的變量都只有幾個字節(jié)長,難道一次只能發(fā)幾個字節(jié)嗎?那樣豈不是要累死機器了!其實,情況沒有那么悲觀,我們完全可以使用數(shù)組來解決這個問題,就是使用byte數(shù)組。把要傳送的文件都讀到數(shù)組里,然后發(fā)送出去。程序如下:
    FileName 為要傳送的文件名,WinS為發(fā)送文件的WinSock控件。這是一個發(fā)送端的程序。
    Public Sub SendFile(FileName As String, WinS As Winsock)
    Dim FreeF As Integer \’空閑的文件號
    Dim LenFile As Long \’文件的長度
    Dim bytData() As Byte \’存放數(shù)據(jù)的數(shù)組
    FreeF = FreeFile \’獲得空閑的文件號
    Open FileName For Binary As #FreeFile \’打開文件
    DoEvents
    LenFile = LOF(FreeFile) \’獲得文件長度
    ReDim bytData(1 To LenFile) \’根據(jù)文件長度重新定義數(shù)組大小
    Get #FreeFile, , bytData \’把文件讀入到數(shù)組里
    Close #FreeFile \’關(guān)閉文件
    WinS.SendData bytData \’發(fā)送數(shù)據(jù)
    End Sub
    接受端的程序如下:
    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim bytData() As Byte
    Dim f
    f = FreeFile
    Open strFileName For Binary As #f
    ReDim bytData(1 To bytesTotal)
    Winsock1.GetData bytData
    Put #f, i, bytData
    i = i + bytesTotal \’保證每次寫都是在文件的末尾, i是個全局變量
    Close #f
    End Sub