我要从winsock中接收大量数据进行写盘Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long)
    Dim strFilename As String
    Dim bytData() As Byte
    Dim iLenFile As Long
    Dim iFreeFile As Integer
    
    ReDim bytData(1 To bytesTotal)
    Me.tcpClient.GetData bytData
    
    strFilename = "c:\test.rar"
    iFreeFile = FreeFile    Open strFilename For Binary As #iFreeFile
    iLenFile = LOF(iFreeFile)
    If iLenFile = 0 Then
        Put #iFreeFile, 1, bytData
    Else
        Put #iFreeFile, iLenFile + 1, bytData
    End If
    Close #iFreeFile
End Sub可是这个过程会导致系统象死机一样,请问doEvents 应该放在什么地方才好?

解决方案 »

  1.   

    我明白了,事实上在发送大量的数据的时候是发生了很多次DataArrival事件的,你加个计数器就知道,直接就在里面加一行doEvents就可以了,随便什么地方。
      

  2.   

    可是从 FreeFile 得知,最多只能打开 255 个文件,而且,得到的数据还要按顺序,就是说上一次写盘没有完成的话不能进行下一次写盘,不知道该怎么处理才好呀~~~~~~
      

  3.   

    我认为应该放到需要耗cpu的地方,比如数据量操作大的地方,Put #iFreeFile... 后面
    socket.senddata 后,
    呵呵,我也遇到类似问题,开始我用字符串,发现打开文件后老是多了几个字节(过几天研究)
    后来改用bytes,在本机上传文件累试不爽,最大文件传过600M,正常,但是一到局域网里就不对了
    发现是数据发送的顺序和接受的顺序可能不一样,只好阻塞了。这样在每次发4k以下数据时正常,
    超过就不对,比如 redim bytesData(1 to 8192),但用get 打开文件读数据时实际上只有4379个字节(我是用 “mod” 和 “/” 来得到次数和块大小来循环读数据的,不想用eof来判断)。我从数据库里读也有同样的问题(field.getchunk(8192))
    请大家指教!
      

  4.   

    winsock sendprogress和sendcomplete