仪器社区

易语言写通讯软件,遇到粘包麻烦,希望高手相助!

yemen208 2010-11-08
请不要说用易语言什么什么的,我现在只会易语言,就不要说用别的语言解决的办法了。。用的是服务器和客户这两个组件,当服务器的发送命令连续两条时,客户那边就会有粘包现象。。比如... 请不要说用易语言什么什么的,我现在只会易语言,就不要说用别的语言解决的办法了。。 用的是 服务器 和 客户 这两个组件,当服务器的发送命令连续两条时,客户那边就会有粘包现象。。 比如: 服务器1.发送数据(IP,“01234”, ) 服务器1.发送数据(IP,“56789”, ) 客户端收到的数据就是 “012345678”,该如何解决? 应答的方法严重影响服务器的执行效率(要处理大量的数据),所以不用考虑。 不好意思。。客户端收到的数据是 “0123456789”,打错了。。 如果能帮我解决这个问题大大加分哦。。
评论
全部评论
762488155
在开发程序的时候 使用易语言的 服务端 与 客户端 控件时 ,一般不直接使用发送数据功能。因为网络存在丢包的可能,所以易语言的服务端会自动的重发刚刚丢失的包,直到完全结束。有很多新手朋友在使用易语言传送文件的老出现这个问题。估计你的这个问题也是一样的原因照成的,丢包!Z简单有效的解决办法:封装一个发包的方法,我这里已服务端给客户端发送消息举例,到时候你还需要同样在客户端上写相同的代码。-------------------------------------------.版本 2.程序集 窗口程序集1.程序集变量 temp数据包尾部, 文本型.子程序 __启动窗口_创建完毕temp数据包尾部 = “{【结尾】[over]}”.子程序 封装的发送方法.参数 客户IP, 文本型.参数 data, 字节集服务器1.发送数据 (客户IP, data + 到字节集 (temp数据包尾部), ).子程序 _服务器1_数据到达接收到的数据进行处理 (服务器1.取回数据 ()).子程序 接收到的数据进行处理.参数 data, 字节集.局部变量 oldData, 字节集, 静态, , 注意,这是一个静态的变量,如果理解不到静态的意思就请使用全局变量oldData = oldData + oldData' 判断如果 该数据包的尾部不等于.如果 (取字节集右边 (oldData, 取字节集长度 (oldData) - 取文本长度 (temp数据包尾部)) ≠ 到字节集 (temp数据包尾部))    ' 如果说不相同就说明 数据还没有完全的过来,所以这里不做任何处理.否则    处理完整传递的数据 (oldData)  ' 如果相等了,就说明数据已经完全的过来了,我们就调用数据传递后的方法    oldData = {  }  ' 这里记住,调用完毕后就必须置空字节集.如果结束.子程序 处理完整传递的数据.参数 data, 字节集' 在这里就可以写你的处理方法了,' by : 炫e小锋 QQ:251708339
19 0 2010-11-13 0条评论 回复
幸运草lwn
易语言的粘包是因为使用了客户端和服务器组件,这组件的弱点就是如此,包频率高的时候会粘,解决方法有2种,1换用其他组件比方说完成端口之类更GX的。2收到包后,用分包函数处理,具体方式参考官方论坛,简单地说是根据包结构人工分解。但是第二种方法效率较低
15 0 2010-11-09 0条评论 回复
的绵
试试客户的端口改成19800还是19300忘记了下次我用电脑上给你参考我的
13 0 2010-11-09 0条评论 回复
您可能感兴趣的社区主题
加载中...
发布 评论