winsock DoEvents 问题求解
我的服务器端用winsock的控件数组同时和N个客户端连接,服务器端会根据不同的需求发送不同的数据给客户端处理,但由于有时需要发送大于8K的数据,这是我就只能分包发送,我把byte数组的数据分成6K左右用循环发送,而且为了能让客户端知道发来数据是属于哪种类型的,所以我在每个数据前都会加几个特定的字符串进去,现在的问题是由于服务器端发送分包数据时很快,客户端处理数据的速度赶不上服务器端发送的速度,所以会导致客户端接收到的数据总是有误,俺在网上搜了一通有人说用DoEvents可以释放控制权,我在服务器端的Winsock1.SendData的前后都加了DoEvents都没用,如果我用调试模式一次一次慢慢的执行服务器端的发送部分的代码,这时客户端就可以正常接收,但如果编译好以后任其自己发送就会出问题,请问各位高手这个问题该如何解决?代码如下:
服务器端
For i = 1 To DataSendCount arrHead = (i - 1) * 6000 arrTail = IIf(i <> DataSendCount, i * 6000 - 1, DataSendLength - 1) arrLen = arrTail - arrHead + 1 ReDim arrByteMiddle(arrLen - 1) RtlMoveMemory ByVal VarPtr(arrByteMiddle(0)), ByVal VarPtr(arrHistory(arrHead)), arrLen 'str = arrByte 'str = RegSetData(SER_SEND_HISTORY, str) 'Debug.Print str '将数组头、中间、尾部相结合 ReDim Preserve arrByte(UBound(arrByteMiddle, 1) + 34) arrByteHead = "<T>" & SER_SEND_HISTORY & "</T><D>" arrByteTail = "</D>" arrLen = UBound(arrByteHead, 1) + 1 RtlMoveMemory ByVal VarPtr(arrByte(0)), ByVal VarPtr(arrByteHead(0)), arrLen '头 arrLen = UBound(arrByteMiddle, 1) + 1 ub = arrLen RtlMoveMemory ByVal VarPtr(arrByte(26)), ByVal VarPtr(arrByteMiddle(0)), arrLen '中间 arrLen = UBound(arrByteTail, 1) + 1 RtlMoveMemory ByVal VarPtr(arrByte(26 + ub)), ByVal VarPtr(arrByteTail(0)), arrLen '尾 str = arrByte 'Debug.Print str DoEvents frmMain.Sock(Index).SendData arrByte DoEvents Next i