CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  网络编程

winsock 接收二进制数组后组合的问题

楼主gddd(gddd)2006-03-15 16:48:13 在 VB / 网络编程 提问

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"  
  问题点数:50、回复次数:10Top

1 楼Modest(塞北雪貂)·(偶最欣赏楼主的分)回复于 2006-03-15 16:55:35 得分 0

看看ReDim语句和CopyMemory   API函数。Top

2 楼ZOU_SEAFARER(颓废程序员^_^)回复于 2006-03-15 16:57:20 得分 0

如果是字符传可以直接连起来!如果是integer的话,就需要还原后再使用  
    要不以后不方便Top

3 楼gddd(gddd)回复于 2006-03-17 13:59:04 得分 0

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去掉即可.Top

4 楼gddd(gddd)回复于 2006-03-19 17:24:38 得分 0

或者用这段.更简单点.  
  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   +   bytesTotalTop

5 楼province_(雍昊)回复于 2006-03-19 18:23:20 得分 0

所以说数组哪能用&来做连接的呢。用COPYMEMORY的话,你的循环也可以省了。Top

6 楼gddd(gddd)回复于 2006-03-19 19:08:16 得分 0

嘻.不用会.迟些查下API手册先.  
  原理上来说COPYMEMORY会比循环节省很多资源.Top

7 楼BookSirSwordsMan(书生剑客)回复于 2006-03-19 19:34:12 得分 0

呵呵,我不觉得放在内存中是件好事,我以前也有做过一个C/S的网络通讯程序,本来想直接放在内存中,等接收完后再组合成文件放到硬盘上,发送小文件还可以,大文件呢,有1-N G的文件,你有G级以上的内存吗???把内存作为中转站吧,这样做更适合,我是这样觉得。  
   
   
  在此想请教高手们,为什么我发送文件过去,有的EXE文件可以用有的不能用,但其它类型的就是能用,真是郁闷,如我发送一个安装程序,等接收完的时候,安装程序进度条走了一会儿,就告诉我安装包有错误???Top

8 楼gddd(gddd)回复于 2006-03-19 19:45:14 得分 0

接收组合数据数组的时候出错了.  
  如果你接收的数据不需要存到内存上的话,就直接边收边把数据保存到硬盘上,这样就不会出错了.连上面的那些接收组合的代码都省了.呵,我是想数据安全,才放到内存中,毕竟硬盘上的东西,一搜索就出来了,偷硬盘的数据比偷内存的数据简单多了.Top

9 楼Freshmen007_Bug()回复于 2006-03-20 10:03:35 得分 0

 
  试试这个:  
   
  abfile   =constrv(constrv(abfile,vbunicode)   &   constrv(wskclientstrs,vbunicode),vbfromunicode)Top

10 楼homezj(小吉)回复于 2006-03-20 13:29:47 得分 50

二进制数据一般不能用strconv,因为进行unicode与ANSI的转换,会改变Byte数组中的数据!  
   
  其实VB是可以直接连接Byte数组的,可用下面方法:  
   
  abfile   =   CStr(abfile)   &   CStr(wskclientstrs)  
   
  至于这种方法的效率吗,可测试看看,绝不算慢!Top

相关问题

  • 请赐教!!!如何接收winsock发送的二进制字符数组文件???
  • 用MSCOMM控件接收二进制数组
  • delphi下用mscomm接收二进制数组的问题
  • 二进制数组合并的问题
  • 用什么命令取得二进制数组的指针?
  • 菜鸟的问题,关于用数组保存二进制数!
  • 怎样将两个二进制数组合并成一个数组?
  • 请教:怎样将数据库中的二进制数据赋值给二进制数组?
  • ****200分大放送!(肯定给)解决applet与二进制数组问题****
  • 请问如何将byte数组写到二进制字段中去

关键词

  • 二进制
  • 数据
  • 内存
  • 组合
  • 文件
  • 硬盘
  • 客户
  • abfile
  • lalreadytran
  • picbits

得分解答快速导航

  • 帖主:gddd
  • homezj

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo