vb的winsock如何实现多次传输与接收

2024-11-16 06:05:46
推荐回答(1个)
回答1:

vb的Winsock是使用异步传输的,也就是说你的发送端For i = 1 To s(s为数据总数)
Winsock1.SendData s(i)
Next i看似是分开S次发送了,但可能VB会合并成一次性发完;又或者你某个s数组里的内容太长,VB又会将它分开几次传输。所以在传输前要先做好每个数据段的控制,通常的做法就是在每次发送数据前先发送数据的长度给接收端,然后再发送数据。你的发送端可改为如下:For i = 1 To s(s为数据总数)
Winsock1.SendData len(s(i)) & chr(0) & s(i) '先发送数据长度,中间使用chr(0)分隔,接收时反处理就是了
Next 接收端代码:先定义一个全局变量s,用来保存你接收到的数据,dim sPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim l,k,strLen As DoubleDim s1 as String
Winsock1.GetData s1,vbstring s=s & s1 k=instr(s,chr(0)) '分离长度控制数据 if k>0 then strLen=Left(s, InStr(s, Chr(0)) - 1) '得到本次接收数据的长度 if len(s)>strLen-len(strLen) then '是否接收合并足够的数据 s1=mid(s,len(strLen)+2,strLen) .................s1就是这次接收到的完整数据,咋样处理s1你就看着办啦! s=mid(s,len(strLen)+2+strLen) '将本次的数据段从s里删除,继续处理下一段 end if end ifEnd Sub