Private Sub winsock1_Connect()
Dim strCommand As String
On Error Resume Next
If Not Unix Then
strCommand = "GET " + URL + " HTTP/1.0" + vbCrLf
Else
strCommand = "GET " + "/" + Filename + " HTTP/1.0" + vbCrLf
End If
strCommand = strCommand + vbCrLf
Winsock1.SendData strCommand
End Sub
Private Sub winsock1_DataArrival(ByVal bytesTotal As Long)
Dim bytData() As Byte
ReDim bytData(bytesTotal)
Dim DATA As String
Dim tmpData() As Byte '保存第一次发送来的数据去掉头部信息后的数据
Winsock1.GetData bytData
DATA = StrConv(bytData, vbUnicode)
If InStr(DATA, "Content-Type:") Then
If RESUMEFILE = True Then
If InStr(DATA, "HTTP/1.1 206 Partial Content") = 0 Then
MsgBox "运行时错误.", vbCritical, "运行时错误"
Exit Sub
Reset
CloseSocket
End If
End If
If InStr(DATA, "404 Not Found") > 0 Then
If Not Unix Then
Unix = True
Reset
CloseSocket
Winsock1.Connect strSvrURL, 80
Exit Sub
End If
'Unix = False
Unix = True
MsgBox "没有找到此文件.", vbCritical, "文件未找到"
Reset
CloseSocket
Exit Sub
End If
Dim Pos%, LENGTH%, HEAD$
Pos = InStr(DATA, vbCrLf & vbCrLf)
LENGTH = Len(DATA)
HEAD = Left(DATA, Pos - 1)
Header = Header & HEAD
DATA = Right(DATA, LENGTH - Pos - 3)
'得到当前文件大小
bytesRemaining = GETDATAHEAD(Header, "Content-Length:")
tmpData = StrConv(DATA, vbFromUnicode) '字符串转为二进制
'第一次写文件(去掉头后的数据写入指定文件中)
Open FilePathName For Binary As #1
Put #1, BytesAlreadySent+1, tmpData()
BytesAlreadySent = Seek(1)
Close #1
Exit Sub
End If
Open FilePathName For Binary As #1
Put #1, BytesAlreadySent+1, bytData
BytesAlreadySent = Seek(1)
Close #1
End Sub
这是小弟用winsock写的一个文件接收程序,但一直有问题:就是接收到的文件一直比实际文件大,一直找不到问题的方法与答案...请各位指教.
Dim strCommand As String
On Error Resume Next
If Not Unix Then
strCommand = "GET " + URL + " HTTP/1.0" + vbCrLf
Else
strCommand = "GET " + "/" + Filename + " HTTP/1.0" + vbCrLf
End If
strCommand = strCommand + vbCrLf
Winsock1.SendData strCommand
End Sub
Private Sub winsock1_DataArrival(ByVal bytesTotal As Long)
Dim bytData() As Byte
ReDim bytData(bytesTotal)
Dim DATA As String
Dim tmpData() As Byte '保存第一次发送来的数据去掉头部信息后的数据
Winsock1.GetData bytData
DATA = StrConv(bytData, vbUnicode)
If InStr(DATA, "Content-Type:") Then
If RESUMEFILE = True Then
If InStr(DATA, "HTTP/1.1 206 Partial Content") = 0 Then
MsgBox "运行时错误.", vbCritical, "运行时错误"
Exit Sub
Reset
CloseSocket
End If
End If
If InStr(DATA, "404 Not Found") > 0 Then
If Not Unix Then
Unix = True
Reset
CloseSocket
Winsock1.Connect strSvrURL, 80
Exit Sub
End If
'Unix = False
Unix = True
MsgBox "没有找到此文件.", vbCritical, "文件未找到"
Reset
CloseSocket
Exit Sub
End If
Dim Pos%, LENGTH%, HEAD$
Pos = InStr(DATA, vbCrLf & vbCrLf)
LENGTH = Len(DATA)
HEAD = Left(DATA, Pos - 1)
Header = Header & HEAD
DATA = Right(DATA, LENGTH - Pos - 3)
'得到当前文件大小
bytesRemaining = GETDATAHEAD(Header, "Content-Length:")
tmpData = StrConv(DATA, vbFromUnicode) '字符串转为二进制
'第一次写文件(去掉头后的数据写入指定文件中)
Open FilePathName For Binary As #1
Put #1, BytesAlreadySent+1, tmpData()
BytesAlreadySent = Seek(1)
Close #1
Exit Sub
End If
Open FilePathName For Binary As #1
Put #1, BytesAlreadySent+1, bytData
BytesAlreadySent = Seek(1)
Close #1
End Sub
这是小弟用winsock写的一个文件接收程序,但一直有问题:就是接收到的文件一直比实际文件大,一直找不到问题的方法与答案...请各位指教.
解决方案 »
- winsck局域网关机
- vb6下winsock编程时跳出来说实时错误40020是怎么回事?
- 问个比较菜的问题,关于将表中一个字段的值累加后显示在TEXT控件中.
- 请问在VB6.0中如何获得已知行和列中存放的数值?
- 文件夹下图片怎么打印?
- 请问: 用 For Each ........Next 读取所有文件时,系统根据什么条件排定文件的先后取出顺序?(carl__yao)
- VB如何读取.dat文件中的数据
- 有谁知道哪里可以讨论InstallShield和软件安装技术的地方?
- 为什么软驱总说软盘没有格式化?
- 请问怎么做出那种像美萍锁窗效果啊,就是按任何键或动鼠标都会出现密码登录窗口?
- 如何在XP下屏蔽热键??高手帮帮忙。。谢谢。。。
- 几个小问题,帮帮忙!
http://expert.csdn.net/Expert/topic/2907/2907058.xml?temp=2.712649E-02
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=155909
对于二进制串,你最好用纯BYE数组进行分析和截取,你可能会用到CopyMemory这数据进行操作。