c# 用socket tcp接收收据,如何去判断接收数据的长度 c# 用socket tcp接收收据,如何去判断接收数据的长度 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 分包的情况下 你收到的byte [] 是多长 那么就是多长..判断没有意义..所以你得设计你自己的通讯协议. 包含头尾长度功能校验这些..而不是单纯的从"长度"去下手 为什么要判断长度?如果你是怕包丢失的话,那么你在写程序发包的时候就可以进行定义,比如说你要发的包原本是字符串类型,长度是25,那么你可以在发包的时候将字符串在前面增加字段变成,25|str,其中25是字符串长度,|是分隔符,自己随便定义,str是本身的字符串,然后收到数据后将其转化成string,用分隔符分开成a[0],a[1],然后判断a[1].length是否等于Integer.Parse(a[0])。如果你是在单纯想知道接收数据后存到byte数组的长度,用length就行了啊,byte还不是数组。 Socket.Receive();https://docs.microsoft.com/zh-cn/dotnet/api/system.net.sockets.socket.receive?redirectedfrom=MSDN&view=netframework-4.8方法的返回值,就是实际接收到的字节数。 这种 TCP Socket 的坑总是填不完!注意:TCP Socket 并没有定义“如何收完对方发来的数据包”,这种判断必须由业务层自己解决!由于TCP 存在粘包、分包问题,难以一次收完所有发过来的包,比较简单的方法是在发送的数据包前面加上一个头(比如8字节),在头信息里填写后续数据长度。收包时先收包头(直到收够8字节),算出后续长度,再循环收,累计收到的字节数达到包头中定义的长度,才算收完。 C# 去掉标题栏后,这样用鼠标移动窗体? DataGridView右点出现菜单 WPF下怎样使用字体文件?不嵌入不安装到系统中。 如何重新登录系统 求图片裁剪方法??? 安装xp sp2后,水晶报表打印问题! 局域网接连SQL server库为什么不通呀 如何做一个随系统运行的程序 怎么清空gsm模块的缓存? 打听一下,运行C#的基本条件。(C#我一无所知) 寻求WPF显示3D点云的方法? wpf获取DataGridCheckBoxColumn选中为true的行数
https://docs.microsoft.com/zh-cn/dotnet/api/system.net.sockets.socket.receive?redirectedfrom=MSDN&view=netframework-4.8方法的返回值,就是实际接收到的字节数。
注意:TCP Socket 并没有定义“如何收完对方发来的数据包”,这种判断必须由业务层自己解决!由于TCP 存在粘包、分包问题,难以一次收完所有发过来的包,比较简单的方法是在发送的数据包前面加上一个头(比如8字节),在头信息里填写后续数据长度。收包时先收包头(直到收够8字节),算出后续长度,再循环收,累计收到的字节数达到包头中定义的长度,才算收完。