当前位置:编程学习 > VB >>

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 ,  网络编程
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,