傳送文件對于網(wǎng)絡(luò)編程來說是基本的功能,比如遠(yuǎn)程控制軟件。這些程序提供的傳文件功能根本就不能用。傳文本還可以,傳二進制文件根本就不行。因此,作為一個基本的功能模塊,有必要單獨介紹一下。
在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
在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