传送文件对于网络编程来说是基本的功能,比如远程控制软件。这些程序提供的传文件功能根本就不能用。传文本还可以,传二进制文件根本就不行。因此,作为一个基本的功能模块,有必要单独介绍一下。
在VB中要传送字符串:
Dim strData As String
strData = \"Test\"
Winsock1.SendData strData
但是如果你传送的二进制文件,你还能用String变量来存放吗?从理论上分析是不行的。文件虽然可以传,但是接受的文件和发送的不一样,原因可能是二进制文件里可以有任何\"字符\",但是不是所有的字符都可以放在String变量里。
除了String类型的变量,VB中其他类型的变量都只有几个字节长,难道一次只能发几个字节吗?那样岂不是要累死机器了!其实,情况没有那么悲观,我们完全可以使用数组来解决这个问题,就是使用byte数组。把要传送的文件都读到数组里,然后发送出去。程序如下:
FileName 为要传送的文件名,WinS为发送文件的WinSock控件。这是一个发送端的程序。
Public Sub SendFile(FileName As String, WinS As Winsock)
Dim FreeF As Integer \’空闲的文件号
Dim LenFile As Long \’文件的长度
Dim bytData() As Byte \’存放数据的数组
FreeF = FreeFile \’获得空闲的文件号
Open FileName For Binary As #FreeFile \’打开文件
DoEvents
LenFile = LOF(FreeFile) \’获得文件长度
ReDim bytData(1 To LenFile) \’根据文件长度重新定义数组大小
Get #FreeFile, , bytData \’把文件读入到数组里
Close #FreeFile \’关闭文件
WinS.SendData bytData \’发送数据
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
责任编辑:小草