类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
我写了一个Server和一个Client,但我从Server发送消息到Client,只要发送的间隔非常短
时,数据会粘贴在一起。比如
我想分别发送“Hello1”,“hello2”这两条信息,在Client端却收到“Hello1hello2”这么一条
数据,为什么,有什么方法避免呢?
网友回答:
加控制符,自己定义几个控制符,发送的时候加进去,接收的时候分析。
比如发送的字符加上“\n”,接收的时候就换行。
两个信息发送的间隔很短的话,是会连在一起的.你可以延迟一下再发.
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
建议自定义包头包尾
另外从定时器中用数组发送也可以,不过这个方法不太好
就这里吧很简单,在每一个字符串后面+上1个固定的标示,要特殊
然后再接受的时候做字符串才分
比如要发
aaaaa
就"aaaaa" & "!~!@#$%^*&*((_)"
然后接受的时候先split(str,"!~!@#$%^*&*((_)")
然后用循环作,就解决了
在说多线程 其实他发送的时候本身就是多线程,因为用的是控件苏组,每个苏组都是1个实例,有自己单独的事件,方法 接受的时候也没有必要作到多线程
因为网络的状况你不能控制,winsocket的senddate并不意味着网卡的发送命令,而是你把你要提交的发送信息提交给网卡(具体什么层我没记住),反正就是缓冲区,然后网卡在根据系统空闲时间发送,接收的getdate也是一样的
这就是为什么要每次发送用doevents,也是出现并发的原因,
网卡还没有发消息,你就给缓冲区输入的新的资料,资料就冲掉了以前的资料,发送就少了1次
或者和以前的资料一起发送,或者1起接受就产生了并发
我表达能力不怎么强,这些都是我看网上的资料明白的,要是不清楚就慢慢看吧,要是不对最好给我指出,我好学习