普通用户
组件客户发送问题 [复制链接]
sunriseshu 发表于 2026-05-09 54 1

1、按钮点击事件,服务器接收正常,点击一次发一段

事件 按钮_1.被单击(来源对象 为 视图)
变量 数据 为 字节型[]={0,0,0,0,0,6,1,1,12,0,0,30}
客户1.发送数据(数据)

结束 事件


2、用线程或者定时器执行,服务器一瞬间会接收到2段甚至3段指令,如下图

是否可以通过内部绑定按钮事件正常发送代码,或者通过其他方式,让服务器在一瞬间只接收到一段

官方技术组 2026-05-10

您好,客户组件底层发送数据的协议为socket - tcp 协议,当前您遇到的问题直接原因为:TCP 粘包 问题,诱因:高频循环发送、多线程写。
解决方式:在发送前设置长度前缀或分隔符,在接收端根据长度依次读取数据流,或增大发送间隔时间。
方式一:发送数据长度保持不变,后端收到数据后每次只读取12个字节。
方式二:增大时间间隔,例如每隔5秒(能缓解但不能根治粘包)
方式三:关闭Socket对象的 Nagle 算法(能缓解但不能根治粘包):

客户1.socket.setTcpNoDelay()

关于是否可以通过内部绑定按钮事件正常发送代码,或者通过其他方式,让服务器在一瞬间只接收到一段?
答案:不能。
除非您能精确根据您的数据长度,测试出让每次发送之间的间隔达到足够长的时间(比如 20 秒以上),并且保证同一时刻只有一个线程在调用发送。但这只是“碰运气”,网络波动时还是会粘包。
TCP 本身就是流式协议,它把您的多次发送当成一个连续的字节流,服务器在一瞬间收到多段是正常现象,叫粘包。这不是 bug,是 TCP 的设计。
因此最有效的方式是您在后端接收数据时,根据您前端发送的标记前缀解析并读取数据,或单次仅获取指定长度的数据。

回复
 作者信息
sunriseshu
普通用户 云验证
专业开发指导服务

响应时间:5分钟

服务方式:官方1对1服务

工作时间:工作日 9:00 - 18:30

专业团队 · 开发指导 · 极速响应


官网 | 基础视频教程 | 在线文档 下载 VcnStudio IDE

© VcnStudio Inc All Rights Reserved

蜀ICP备17024229号