1、按钮点击事件,服务器接收正常,点击一次发一段
事件 按钮_1.被单击(来源对象 为 视图)
变量 数据 为 字节型[]={0,0,0,0,0,6,1,1,12,0,0,30}
客户1.发送数据(数据)
结束 事件
2、用线程或者定时器执行,服务器一瞬间会接收到2段甚至3段指令,如下图

是否可以通过内部绑定按钮事件正常发送代码,或者通过其他方式,让服务器在一瞬间只接收到一段
您好,客户组件底层发送数据的协议为socket - tcp 协议,当前您遇到的问题直接原因为:TCP 粘包 问题,诱因:高频循环发送、多线程写。
解决方式:在发送前设置长度前缀或分隔符,在接收端根据长度依次读取数据流,或增大发送间隔时间。
方式一:发送数据长度保持不变,后端收到数据后每次只读取12个字节。
方式二:增大时间间隔,例如每隔5秒(能缓解但不能根治粘包)
方式三:关闭Socket对象的 Nagle 算法(能缓解但不能根治粘包):
客户1.socket.setTcpNoDelay(真)关于是否可以通过内部绑定按钮事件正常发送代码,或者通过其他方式,让服务器在一瞬间只接收到一段?
答案:不能。
除非您能精确根据您的数据长度,测试出让每次发送之间的间隔达到足够长的时间(比如 20 秒以上),并且保证同一时刻只有一个线程在调用发送。但这只是“碰运气”,网络波动时还是会粘包。
TCP 本身就是流式协议,它把您的多次发送当成一个连续的字节流,服务器在一瞬间收到多段是正常现象,叫粘包。这不是 bug,是 TCP 的设计。
因此最有效的方式是您在后端接收数据时,根据您前端发送的标记前缀解析并读取数据,或单次仅获取指定长度的数据。