winsock 文件传输不完整,麻烦高手指教
查看客户机,字节又发送完成了,请高手指教一下那里出了错!(以下代码连接省略)客户机代码:
Private Sub Command3_Click()
A = "F:\smi3257新.bmp"
Dim 文件路径 As String, 文件名称 As String, 所在模块 As Long, 大小 As Long, 文件类型 As String, 保存时间 As String, CRC As String, 备注 As String
Dim sData As String
Dim m_CRC As New clsCRC
文件路径 = StrReverse(Mid(StrReverse(A), InStr(StrReverse(A), "\") + 1))
文件名称 = StrReverse(Mid(StrReverse(A), 1, InStr(StrReverse(A), "\") - 1))
所在模块 = 1001
大小 = FileLen(文件路径 & "\" & 文件名称)
文件类型 = StrReverse(Mid(StrReverse(文件名称), 1, InStr(StrReverse(文件名称), ".") - 1))
保存时间 = Date & " " & Time
CRC = Hex(m_CRC.CalculateFile(文件路径 & "\" & 文件名称))
备注 = ""
sData = "25|" & 文件名称 & "Ω" & 所在模块 & "Ω" & 大小 & "Ω" & 文件类型 & "Ω" & 保存时间 & "Ω" & CRC & "Ω" & 备注 & "|" & UserXX
'MsgBox sData
Winsock1.SendData sData
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim sData As String
Winsock1.GetData sData
if sData="11" then
Dim FileData() As Byte
Open A For Binary As #1 '把文件读到内存
ReDim FileData(LOF(1) - 1)
Get #1, , FileData
Close #1
办公.Winsock1.SendData FileData
end If
End Sub
Private Sub Winsock1_SendProgress(ByVal bytesSent As Long, ByVal bytesRemaining As Long)
C = C + bytesSent '客户机查看发送字节,又发现是发送完毕了的
End Sub
服务器代码:
Private Sub ServerNet_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim sData As String, sFile() As Byte,, A As Boolean
if A=False then
ServerNet(Index).GetData sData
''''此处有数据判断 暂时省略 需要请说明
FileNumber = FreeFile
储存文件大小 = 大小
ServerNet(Index).GetData "11"
Open 储存路径 & 储存文件名 For Binary As FileNumber
A=True
else
ServerNet(Index).GetData sFile, vbByte
Put FileNumber, LOF(1) + 1, sFile
If 储存文件大小 = LOF(1) Then '就是此处的判断 接收的数据大小始终不等于,感觉是没有接收完成,有时候点一下客户机的Command3按钮,服务器却可以继续接收!
Close FileNumber
A=False
EndIf
EndIf
WINSOCK 文件传输 完整性 --------------------编程问答-------------------- 没有人回复么 我自己顶 --------------------编程问答-------------------- 感觉有些乱.
建议你把收到的文件用WINHEX之类的十六进制编辑器打开,与原文件比较一下字节有些什么区别.
另外我这里有一个传输的例子可以拿去参考一下:
尝试做了一个利用WINSOCK控件的自动分包发送机制的东东(VB6.0) --------------------编程问答-------------------- 感谢老马,我写的这个文件传输 就是根据之前下载的你的例子改编而成的,现在我找到问题了,就是在客户机Winsock1.SendData sData 后面加了个 Debug.Print " Send = FileData()" 就可以了。
但是很奇怪,Debug.Print的意思是输出或者显示,和数据传输没有半点关系,在学习你的例子的时候,我还去查了它的意思的,所有之前就没有加上这句,才出现的时而正常,时而不正常。
加了之后就没有这个问题了,
老马 能解释一下么 这是为什么吗? --------------------编程问答-------------------- 看我的博客 里面有demo --------------------编程问答-------------------- ServerNet(Index).GetData sFile, vbByte
前面应该加一句
ReDim sFile(bytesTotal-1)
吧
补充:VB , 网络编程