Private Sub sck_DataArrival(index As Integer, ByVal bytesTotal As Long)
'On Error Resume Next
    Dim WskCommand As String
    Dim CmdArr() As String
    Dim FileByte() As Byte
     If OnSendServer(index) = 1 Then   '如果是在接收"字节"数据状态时
       sck(index).GetData FileByte, vbArray + vbByte '接收类型为:字节数组
       Put #GetFileNum(index), , FileByte '----------标线:)-------------
       LenFile(index) = LenFile(index) - (UBound(FileByte) + 1) '数组的第一维是0.所以这里+1
       'AddSevLog "剩余长度: " & LenFile(index) & " ..."
       If LenFile(index) <= 0 Then
          Close #GetFileNum(index)
          OnSendServer(index) = 0
          SckSendData index, "文件接收结束代替字符"
       End If
       Exit Sub
    End If此为文件接收时的代码,在大部分情况下进行文件接收都没有问题。
但偶尔会出现接收的数据重复写入文件。现在怀疑是接收重复导致的还是写数据重复导致的?tcp连接应该是很稳定的。不知道有没有哪位朋友在写这个传输有好的解决办法!

解决方案 »

  1.   

    这太简单了,不要在接受端做限制,来了数据,简单判断一下就PUT掉,根据接受文件的大小来判断是否接受完毕或者根据SOCK的状态来判断,发送端发送完毕以后 延迟一下,就CLOSED,接受端也跟着CLOSED,就OK了
      

  2.   

    问题是有时候是文件中间的数据重复,如果仅是判断大小,那可能会出现中部重复,尾部少数据。If LenFile(index)  <= 0 Then 如果要精确,那就是lenfile(index)=0 但如果不精确,就失去意义了
      

  3.   

    把发送端的数据CHUNK调整一下,发送完一个CHUNK后,让它小小的休息一下,再发新包