Option Explicit '下载文件长度 Private mFlen As Long Dim timeA As Long Dim ReceiveBytes As LongPrivate Sub Command1_Click() If Winsock1.State <> sckClosed Then '如果Winsock1当前状态非关闭 Winsock1.Close '关闭连接 End If Winsock1.RemoteHost = "61.159.186.139" '服务器地址 Winsock1.RemotePort = 80 '服务器端口 Winsock1.Connect '连接 'Text2.Text = "开始联接..." & vbCrLf 'Timer1.Enabled = True End SubPrivate Sub Form_Unload(Cancel As Integer) Winsock1.Close '关闭连接 End SubPrivate Sub Winsock1_Close() Winsock1.Close '关闭连接 Label3 = "关闭了" End SubPrivate Sub Winsock1_Connect() '当一个 Connect 操作完成时发生 Dim strWebPage As StringstrWebPage = "/download2/少林传奇/少林传奇wz.exe" '要下载的文件 'http://61.159.186.139/download2/少林传奇/少林传奇wz.exe strWebPage = "GET " + strWebPage + " HTTP/1.0" + vbCrLf ' 'GET 为FTP命令 取得文件 'Getstr = Getstr & "Range: bytes=" & ReceiveBytes & "-" & vbCrLf strWebPage = strWebPage + vbCrLf '记住一定要加上vbCrLf Winsock1.SendData strWebPage '给远程计算机发送数据 End Sub Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim TheFile() As Byte '接受数据的数组 ReDim TheFile(bytesTotal) '重定义数组下界 Static YNLen As Boolean '是否接收了文件长度 '接收到的下载数据(字符串类型) Dim ReceiveData As String Dim i As Long Dim StartPos As Long Winsock1.GetData TheFile '将接收的数据保存到数组If Not YNLen Then ReceiveData = ReceiveData & StrConv(TheFile, vbUnicode) Debug.Print ReceiveData If (InStr(1, ReceiveData, "HTTP/1.0 200 OK") Or InStr(1, ReceiveData, "HTTP/1.1 200 OK")) Then '表示请求下载文件成功 Debug.Print "接联成功..." ElseIf (InStr(1, ReceiveData, "HTTP/1.0 404 ") Or InStr(1, ReceiveData, "HTTP/1.1 404")) Then '表示服务器未找到请求的资源 Debug.Print "没有找到相关文件..." Exit Sub Else '请求错误 MsgBox "出错了" Exit Sub End If '如果服务器响应的字符串有指定文件大小的标题字段,取得文件大小 If InStr(1, ReceiveData, "Content-Length:") > 0 And mFlen = 0 Then Dim pos1 As Long, pos2 As Long pos1 = InStr(1, ReceiveData, "Content-Length:") pos2 = InStr(pos1 + 16, ReceiveData, vbCrLf) If pos2 > pos1 Then mFlen = Mid(ReceiveData, pos1 + 16, pos2 - pos1 - 16)
YNLen = True 'Open "d:\1.ini" For Binary As #1 '打开文件 Open "c:\ddd.exe" For Binary Lock Write As #1 Debug.Print "开始接收数据..." Debug.Print "文件大小:" & mFlen End If For i = 0 To UBound(TheFile) - 3 If TheFile(i) = 13 And TheFile(i + 1) = 10 And TheFile(i + 2) = 13 And TheFile(i + 3) = 10 Then StartPos = i + 4 Exit For End If Next i For i = StartPos To UBound(TheFile()) Put #1, , TheFile(i) Next i ReceiveBytes = Seek(1) End If
ProgressBar1.Max = mFlen + 1 '设置进度条最大值 ProgressBar1.Min = 0 '设置进度条最小值 Label5 = Format$(mFlen / 1024 / 1024, "0.00") Else ReceiveBytes = ReceiveBytes + bytesTotal Put #1, , TheFile '将接收的数据包写入该文件 ProgressBar1.Value = ReceiveBytes '接收文件进度 If ReceiveBytes >= mFlen Then Close #1: MsgBox "下载完成..." End If Label3 = bytesTotal Label4 = Format$(ReceiveBytes / 1024 / 1024, "0.00")End Sub Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) MsgBox Description, vbInformation, "错误号:" & Number '出错提示 Winsock1.Close '关闭连接 End Sub源程序
'下载文件长度
Private mFlen As Long
Dim timeA As Long
Dim ReceiveBytes As LongPrivate Sub Command1_Click()
If Winsock1.State <> sckClosed Then '如果Winsock1当前状态非关闭
Winsock1.Close '关闭连接
End If
Winsock1.RemoteHost = "61.159.186.139" '服务器地址
Winsock1.RemotePort = 80 '服务器端口
Winsock1.Connect '连接
'Text2.Text = "开始联接..." & vbCrLf
'Timer1.Enabled = True
End SubPrivate Sub Form_Unload(Cancel As Integer)
Winsock1.Close '关闭连接
End SubPrivate Sub Winsock1_Close()
Winsock1.Close '关闭连接
Label3 = "关闭了"
End SubPrivate Sub Winsock1_Connect() '当一个 Connect 操作完成时发生
Dim strWebPage As StringstrWebPage = "/download2/少林传奇/少林传奇wz.exe" '要下载的文件 'http://61.159.186.139/download2/少林传奇/少林传奇wz.exe
strWebPage = "GET " + strWebPage + " HTTP/1.0" + vbCrLf ' 'GET 为FTP命令 取得文件
'Getstr = Getstr & "Range: bytes=" & ReceiveBytes & "-" & vbCrLf
strWebPage = strWebPage + vbCrLf '记住一定要加上vbCrLf
Winsock1.SendData strWebPage '给远程计算机发送数据
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim TheFile() As Byte '接受数据的数组
ReDim TheFile(bytesTotal) '重定义数组下界
Static YNLen As Boolean '是否接收了文件长度
'接收到的下载数据(字符串类型)
Dim ReceiveData As String
Dim i As Long
Dim StartPos As Long
Winsock1.GetData TheFile '将接收的数据保存到数组If Not YNLen Then
ReceiveData = ReceiveData & StrConv(TheFile, vbUnicode)
Debug.Print ReceiveData
If (InStr(1, ReceiveData, "HTTP/1.0 200 OK") Or InStr(1, ReceiveData, "HTTP/1.1 200 OK")) Then '表示请求下载文件成功
Debug.Print "接联成功..."
ElseIf (InStr(1, ReceiveData, "HTTP/1.0 404 ") Or InStr(1, ReceiveData, "HTTP/1.1 404")) Then '表示服务器未找到请求的资源
Debug.Print "没有找到相关文件..."
Exit Sub
Else '请求错误
MsgBox "出错了"
Exit Sub
End If
'如果服务器响应的字符串有指定文件大小的标题字段,取得文件大小
If InStr(1, ReceiveData, "Content-Length:") > 0 And mFlen = 0 Then
Dim pos1 As Long, pos2 As Long
pos1 = InStr(1, ReceiveData, "Content-Length:")
pos2 = InStr(pos1 + 16, ReceiveData, vbCrLf)
If pos2 > pos1 Then
mFlen = Mid(ReceiveData, pos1 + 16, pos2 - pos1 - 16)
YNLen = True
'Open "d:\1.ini" For Binary As #1 '打开文件
Open "c:\ddd.exe" For Binary Lock Write As #1
Debug.Print "开始接收数据..."
Debug.Print "文件大小:" & mFlen
End If
For i = 0 To UBound(TheFile) - 3
If TheFile(i) = 13 And TheFile(i + 1) = 10 And TheFile(i + 2) = 13 And TheFile(i + 3) = 10 Then
StartPos = i + 4
Exit For
End If
Next i
For i = StartPos To UBound(TheFile())
Put #1, , TheFile(i)
Next i
ReceiveBytes = Seek(1)
End If
ProgressBar1.Max = mFlen + 1 '设置进度条最大值
ProgressBar1.Min = 0 '设置进度条最小值
Label5 = Format$(mFlen / 1024 / 1024, "0.00")
Else
ReceiveBytes = ReceiveBytes + bytesTotal
Put #1, , TheFile '将接收的数据包写入该文件
ProgressBar1.Value = ReceiveBytes '接收文件进度
If ReceiveBytes >= mFlen Then Close #1: MsgBox "下载完成..."
End If
Label3 = bytesTotal
Label4 = Format$(ReceiveBytes / 1024 / 1024, "0.00")End Sub
Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
MsgBox Description, vbInformation, "错误号:" & Number '出错提示
Winsock1.Close '关闭连接
End Sub源程序