c# 用socket tcp接收收据,如何去判断接收数据的长度

解决方案 »

  1.   

    分包的情况下  你收到的byte []  是多长 那么就是多长..判断没有意义..所以你得设计你自己的通讯协议. 包含头尾长度功能校验这些..而不是单纯的从"长度"去下手
      

  2.   

    为什么要判断长度?如果你是怕包丢失的话,那么你在写程序发包的时候就可以进行定义,比如说你要发的包原本是字符串类型,长度是25,那么你可以在发包的时候将字符串在前面增加字段变成,25|str,其中25是字符串长度,|是分隔符,自己随便定义,str是本身的字符串,然后收到数据后将其转化成string,用分隔符分开成a[0],a[1],然后判断a[1].length是否等于Integer.Parse(a[0])。如果你是在单纯想知道接收数据后存到byte数组的长度,用length就行了啊,byte还不是数组。
      

  3.   

    Socket.Receive();
    https://docs.microsoft.com/zh-cn/dotnet/api/system.net.sockets.socket.receive?redirectedfrom=MSDN&view=netframework-4.8方法的返回值,就是实际接收到的字节数。
      

  4.   

    这种 TCP Socket 的坑总是填不完!
    注意:TCP Socket 并没有定义“如何收完对方发来的数据包”,这种判断必须由业务层自己解决!由于TCP 存在粘包、分包问题,难以一次收完所有发过来的包,比较简单的方法是在发送的数据包前面加上一个头(比如8字节),在头信息里填写后续数据长度。收包时先收包头(直到收够8字节),算出后续长度,再循环收,累计收到的字节数达到包头中定义的长度,才算收完。