请不要说用易语言什么什么的,我现在只会易语言,就不要说用别的语言解决的办法了。。用的是服务器和客户这两个组件,当服务器的发送命令连续两条时,客户那边就会有粘包现象。。比如... 请不要说用易语言什么什么的,我现在只会易语言,就不要说用别的语言解决的办法了。。
用的是 服务器 和 客户 这两个组件,当服务器的发送命令连续两条时,客户那边就会有粘包现象。。
比如:
服务器1.发送数据(IP,“01234”, )
服务器1.发送数据(IP,“56789”, )
客户端收到的数据就是 “012345678”,该如何解决?
应答的方法严重影响服务器的执行效率(要处理大量的数据),所以不用考虑。
不好意思。。客户端收到的数据是 “0123456789”,打错了。。
如果能帮我解决这个问题大大加分哦。。
在开发程序的时候 使用易语言的 服务端 与 客户端 控件时 ,一般不直接使用发送数据功能。因为网络存在丢包的可能,所以易语言的服务端会自动的重发刚刚丢失的包,直到完全结束。有很多新手朋友在使用易语言传送文件的老出现这个问题。估计你的这个问题也是一样的原因照成的,丢包!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