c#下多线程的tcp粘包问题,请高手指点思路。

wwwww112233 wwwww112233 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
服务器端需要不断的向客户发送不同类型的数据,比如学生信息,老师信息,成绩信息等等不同的数据。因为信息比较多比较大,客户端收到几种不同数据,很难拆包....
现在服务端使用 beginSend发送,但是这个异步发送,无法保证顺序;更关键的时候,当一个学生信息分为10个包发送的时候,这10个包还没有发送到,已经有另外5个学生的信息(假如是5个包)又在beginSend发送。

这样,客户端收到的信息产生如下问题:
收到的信息次序混乱,因为不知道收到的包属于哪个类型,这个包是什么顺序等等。
都是类型一样的包(学生),客户端如果保证能正常处理这些包。

我现在的处理方法:
服务端发送数据的时候,使用了一个byte位作为标记类型,使用了4个byte位标记数据长度,使用了8个byte标记数据的唯一id,再使用一个byte标记包的数量。
这样我收到包的时候,先判断他的类型,然后找到他的唯一id,把唯一id的作为索引,继续接收同一个id 同一个类型的包,知道接收所有的包,然后合并。

但是现在我担心的问题是:
数据那边我使用了14个byte位来做标记 ,也就是byte[14]。但是在发送数据过程中,万一这14个byte字节被切断了,比如某一次只收到5个字节,但是后面的包有黏在一起,那怎么办?
或者是否有更好的解决方案?

问题有点复杂,谢谢!!!!!
...全文

相关推荐

评论 26
收藏 已收藏
分享
返回顶部
wwwww112233
C# 111,128 成员 642,537 内容