
C#基于Tcp协议的socket通信,知道服务端发送数据长度、帧头和发送频率,如何在客户端取得完整一帧数据?
服务端无法改变,但是知道实际发送数据长度为608字节,且分为16段,每段38个字节,每段的开头第一个字节为16进制“FF”,第二个字节为“C0”、“C1”等等,我接收的时...
服务端无法改变,但是知道实际发送数据长度为608字节,且分为16段,每段38个字节,每段的开头第一个字节为16进制“FF”,第二个字节为“C0”、“C1”等等,我接收的时候,用的byte[4000]这个数组来接收的,并判断“FFC0”的位置,然后把从这个位置开始的608个字节拿出来作为完整一帧的数据,实际上并不是这样的,底层接收数据不知道如何完成的,想问问有什么好方法?
展开
2个回答
展开全部
当然不能这么搞,TCP发送时都是分包的,也就是说你一次接收的数据很可能不是一个完整的数据包,这种东西在TCP里叫粘包和拆包,网上解决方法已经很多了,你可以搜索下
TCP粘包,拆包现象及解决方案
C#粘包和分包问题及解决方法
注:正常情况下,你的接收和数据处理应该是两个单独的线程,这样才不会相互干扰。
TCP粘包,拆包现象及解决方案
C#粘包和分包问题及解决方法
注:正常情况下,你的接收和数据处理应该是两个单独的线程,这样才不会相互干扰。
追问
谢谢,初学C#,不懂的很多,多谢了

2025-01-03 广告
协议一般要包含:起始符、数据、校验码、结束符,5个部分的定义。 其中 起始符、结束符,不能与其他数据重码。 如只要传输字母与数字,可以看下ASCII码表,使用非数字和字母的符号做起始结束符即可,如{}; 数据长度码即表示此串数据包的数据长度...
点击进入详情页
本回答由迪凯特科技(北京)有限公司_提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询