dim abfile() as byte
Private Sub wskclient_DataArrival(ByVal bytesTotal As Long) '客户端一收到数据
Dim wskclientstrs() As Byte
??????
End Sub
客户端收到的二进制数据,会被累加保存到abfile中,试过用
wskclient.GetData wskclientstrs
abfile = abfile &(或+) & wskclientstrs
但提示为出错.(如将ABFILE写入以二进制写入一个临时的文件,则没问题,但考虑到加密安全,只想让ABFILE保存到内存中.
希望达到效果:
接收到数据前abfile="",接收数据时abfile=abfile&收到的数据,接收完全数据时提示msgbox "ok"
看看ReDim语句和CopyMemory API函数。
如果是字符传可以直接连起来!如果是integer的话,就需要还原后再使用
要不以后不方便
Private Sub wskclient_DataArrival(ByVal bytesTotal As Long) '客户端一收到数据
Dim i As Long
Dim j As Long
Dim dummy() As Byte
ReDim buff(bytesTotal) As Byte
wskclient.GetData buff, vbbytes, bytesTotal
ReDim dummy(lAlreadyTran) As Byte
For j = 1 To lAlreadyTran
dummy(j) = PicBits(j)
Next
ReDim PicBits(lAlreadyTran + bytesTotal)
'MsgBox (PicBits)
For j = 1 To lAlreadyTran
'MsgBox dummy(j)
PicBits(j) = dummy(j)
Next
ReDim dummy(0) As Byte
For i = 1 To bytesTotal
PicBits(lAlreadyTran + i) = buff(i - 1)
Next
lAlreadyTran = lAlreadyTran + bytesTotal
实现了.所有数据存储在全局变量PicBits中.不过最开头的地方会多个0字节,再用一次REDIM去掉即可.
或者用这段.更简单点.
Dim i As Long
Dim j As Long
Dim dummy() As Byte
ReDim buff(bytesTotal) As Byte
wskclient.GetData buff, vbbytes, bytesTotal
ReDim dummy(lAlreadyTran) As Byte
If et = "" Then
PicBits = buff
et = "ok"
Else
ReDim Preserve PicBits(UBound(PicBits) + bytesTotal)
For i = 0 To bytesTotal - 1
PicBits(i + lAlreadyTran) = buff(i)
Next
End If
lAlreadyTran = lAlreadyTran + bytesTotal
所以说数组哪能用&来做连接的呢。用COPYMEMORY的话,你的循环也可以省了。
嘻.不用会.迟些查下API手册先.
原理上来说COPYMEMORY会比循环节省很多资源.
呵呵,我不觉得放在内存中是件好事,我以前也有做过一个C/S的网络通讯程序,本来想直接放在内存中,等接收完后再组合成文件放到硬盘上,发送小文件还可以,大文件呢,有1-N G的文件,你有G级以上的内存吗???把内存作为中转站吧,这样做更适合,我是这样觉得。
在此想请教高手们,为什么我发送文件过去,有的EXE文件可以用有的不能用,但其它类型的就是能用,真是郁闷,如我发送一个安装程序,等接收完的时候,安装程序进度条走了一会儿,就告诉我安装包有错误???
接收组合数据数组的时候出错了.
如果你接收的数据不需要存到内存上的话,就直接边收边把数据保存到硬盘上,这样就不会出错了.连上面的那些接收组合的代码都省了.呵,我是想数据安全,才放到内存中,毕竟硬盘上的东西,一搜索就出来了,偷硬盘的数据比偷内存的数据简单多了.
试试这个:
abfile =constrv(constrv(abfile,vbunicode) & constrv(wskclientstrs,vbunicode),vbfromunicode)
二进制数据一般不能用strconv,因为进行unicode与ANSI的转换,会改变Byte数组中的数据!
其实VB是可以直接连接Byte数组的,可用下面方法:
abfile = CStr(abfile) & CStr(wskclientstrs)
至于这种方法的效率吗,可测试看看,绝不算慢!