我只需要下载一个http文件,能取消,这样写好像接受了几K就不写入文件了,为什么?
Option Explicit
Dim strCommand As String
Dim strWebPage As StringPrivate Sub Command1_Click()Winsock1.RemoteHost = "http://wsdlyf.myetang.com" '返回或设置远程计算机,控件向它发送数据或从它那里接收数据。既可提供主机名,比如 "FTP://ftp.microsoft.com",也可提供点格式下的 IP 地址字符串,比如 "100.0.1.1"。
Winsock1.RemotePort = 80 '返回或设置要连接的远程端口号
Winsock1.Connect '返回与远程计算机的连接。
End SubPrivate Sub Command2_Click()
    Dim fso As Object
    Set fso = CreateObject("scripting.filesystemobject")
    fso.Copyfile "http://wsdlyf.myetang.com/ToolsDownload/icon01.rar", "E:\a.rar"
End SubPrivate Sub Winsock1_Connect() '当一个 Connect 操作完成时发生。
On Error Resume Next
strWebPage = "http://wsdlyf.myetang.com/ToolsDownload/icon01.rar"
strCommand = "GET " + strWebPage + " HTTP/1.0" + vbCrLf 'GET 为FTP命令
'strCommand = strCommand + "Accept: */*" + vbCrLf      '这句可以不要
'strCommand = strCommand + "Accept: text/html" + vbCrLf '这句可以不要
strCommand = strCommand + vbCrLf      '记住一定要加上vbCrLfDebug.Print strCommandWinsock1.SendData strCommand  ''给远程计算机发送数据End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long) '当新数据到达时产生该事件
On Error Resume Next   '在错误处理程序结束后,恢复原有的运行Dim byt() As Byte
Winsock1.GetData byt(), vbByte + vbArray '检取当前的数据块
Open "E:\Downloads\tmp\0048826\a.rar" For Binary As #1
Put #1, , byt()
Close #1
End Sub

解决方案 »

  1.   

    有人帮我?
    (上面command2没有用的)
      

  2.   

    第一次Winsock1_DataArrival事件
    接受的数据是
    下载文件信息
    所以要跳过第一个
    从第二个开始写入文件
    而且文件长要分多次写入文件
    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
       On Error Resume Next
       Dim WebData() As Byte, sPara As String
       Static iPos As Long
       If Not FlagSave Then
          Winsock1.GetData sPara, vbString    '检取当前的数据块
          FlagSave = True
          iPos = 1
             FileLen = '获得文件长度
       Else
          Winsock1.GetData WebData(), vbByte    '检取当前的数据块
          Put #fileNum, iPos, WebData()
          iPos = iPos + bytesTotal
          If iPos = FileLen + 1 Then
             Close #fileNum
          End If
       End If
    End Sub
      

  3.   

    RemoteHost不要加HTTP
    Winsock1.RemoteHost="wsdlyf.myetang.com"
    另外在DataArrival事件中
    取得的数据并不全是所要文件的,因为里面实际上有一个文件头。这个文件头以vbCrLf & vbCrLf结束。所以应该从这个标志之后的数据才写入目标文件。可以用Instr(strConv(byt,vbUnicode),vbCrLf & vbCrLf)取得这个位置.
    建意先保存在一个Stream对象中,下载完成后再写入文件。下载完成会触发Close事件。
      

  4.   

    http://www.bhdata.com/bbs/title.asp?title_id=28