资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 软件开发 >
Advertisement
文章正文

为什么发送的数据会连在一起?

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   

我写了一个Server和一个Client,但我从Server发送消息到Client,只要发送的间隔非常短  
  时,数据会粘贴在一起。比如  
  我想分别发送“Hello1”,“hello2”这两条信息,在Client端却收到“Hello1hello2”这么一条  
  数据,为什么,有什么方法避免呢?

网友回答:

发表者:WallesCai

加控制符,自己定义几个控制符,发送的时候加进去,接收的时候分析。  
  比如发送的字符加上“\n”,接收的时候就换行。

发表者:tztz520

两个信息发送的间隔很短的话,是会连在一起的.你可以延迟一下再发.  
   
   
  Winsock1.SendData   "aa"  
  Delay   500  
  Winsock1.SendData   "bb"  
   
  Public   Sub   Delay(PauseTime   As   Single)  
  Dim   Start   As   Single  
  Start   =   Timer  
  Do   While   Timer   <   Start   +   PauseTime  
              DoEvents  
  Loop  
  End   Sub

发表者:kkkksunday

建议自定义包头包尾    
  另外从定时器中用数组发送也可以,不过这个方法不太好

发表者:zyg0

就这里吧很简单,在每一个字符串后面+上1个固定的标示,要特殊  
  然后再接受的时候做字符串才分  
  比如要发  
  aaaaa  
  就"aaaaa"   &   "!~!@#$%^*&*((_)"    
  然后接受的时候先split(str,"!~!@#$%^*&*((_)")  
  然后用循环作,就解决了  
  在说多线程   其实他发送的时候本身就是多线程,因为用的是控件苏组,每个苏组都是1个实例,有自己单独的事件,方法   接受的时候也没有必要作到多线程

发表者:zyg0

因为网络的状况你不能控制,winsocket的senddate并不意味着网卡的发送命令,而是你把你要提交的发送信息提交给网卡(具体什么层我没记住),反正就是缓冲区,然后网卡在根据系统空闲时间发送,接收的getdate也是一样的  
  这就是为什么要每次发送用doevents,也是出现并发的原因,  
  网卡还没有发消息,你就给缓冲区输入的新的资料,资料就冲掉了以前的资料,发送就少了1次  
  或者和以前的资料一起发送,或者1起接受就产生了并发  
   
  我表达能力不怎么强,这些都是我看网上的资料明白的,要是不清楚就慢慢看吧,要是不对最好给我指出,我好学习


 

 
热门推荐笔记本: IBM笔记本
相关文章:
笔记本相关:
IT技术文章:
webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
©2007 popbb.net All Rights Reserved