vb的winsock如何实现多次传输与接收
我编了一个程序将数据从文件读取到数组S中,需要利用VB中winsock将其传输到另一台电脑中以下是部分发送程序,该如何修改?发送:Fori=1Tos(s为数据总数)Win...
我编了一个程序将数据从文件读取到数组S中,需要利用VB中winsock将其传输到另一台电脑中以下是部分发送程序,该如何修改?发送:For i = 1 To s(s为数据总数)
Winsock1.SendData s(i)
Next i接收Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
DoEvents
Dim l As Double
Winsock1.GetData l
kk = kk + 1
ReDim Preserve c(kk)
c(kk) = lEnd Sub也就是将数组中的元素一个一个传,然后接收端一个一个存入c数组中。上述代码该如何改? 展开
Winsock1.SendData s(i)
Next i接收Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
DoEvents
Dim l As Double
Winsock1.GetData l
kk = kk + 1
ReDim Preserve c(kk)
c(kk) = lEnd Sub也就是将数组中的元素一个一个传,然后接收端一个一个存入c数组中。上述代码该如何改? 展开
1个回答
推荐于2017-12-15
展开全部
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
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
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询