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

请不要说用易语言什么什么的,我现在只会易语言,就不要说用别的语言解决的办法了。。

用的是 服务器 和 客户 这两个组件,当服务器的发送命令连续两条时,客户那边就会有粘包现象。。
比如:
服务器1.发送数据(IP,“01234”, )
服务器1.发送数据(IP,“56789”, )

客户端收到的数据就是 “012345678”,该如何解决?

应答的方法严重影响服务器的执行效率(要处理大量的数据),所以不用考虑。
不好意思。。客户端收到的数据是 “0123456789”,打错了。。

如果能帮我解决这个问题大大加分哦。。

在开发程序的时候 使用易语言的 服务端 与 客户端 控件时 ,一般不直接使用发送数据功能。

因为网络存在丢包的可能,所以易语言的服务端会自动的重发刚刚丢失的包,直到完全结束。

有很多新手朋友在使用易语言传送文件的老出现这个问题。

估计你的这个问题也是一样的原因照成的,丢包!

最简单有效的解决办法:

封装一个发包的方法,我这里已服务端给客户端发送消息举例,到时候你还需要同样在客户端上写相同的代码。

-------------------------------------------

.版本 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

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-11-09
试试客户的端口改成19800还是19300忘记了下次我用电脑上给你参考我的
第2个回答  2010-11-09
易语言的粘包是因为使用了客户端和服务器组件,这组件的弱点就是如此,包频率高的时候会粘,解决方法有2种,1换用其他组件比方说完成端口之类更高效的。2收到包后,用分包函数处理,具体方式参考官方论坛,简单地说是根据包结构人工分解。但是第二种方法效率较低
相似回答