VB中使用WinSock控件传送文件
来源:优易学  2011-9-13 8:33:35   【优易学:中国教育考试门户网】   资料下载   IT书店

  传送文件对于网络编程来说是基本的功能,比如远程控制软件。这些程序提供的传文件功能根本就不能用。传文本还可以,传二进制文件根本就不行。因此,作为一个基本的功能模块,有必要单独介绍一下。
  在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

[1] [2] [3] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训