我需要分析单个的数据包,但通过socket连接服务器后,从服务器非发送的多个数据包用socket.Receive接收时总是一股脑全存放在一个byte[]中了,难道非得自己断句吗?如果是动态分析那可就难办了,该怎样解决呢?socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)这是我的socket创建句柄,是在这里改吗?请高手帮忙看一下....

解决方案 »

  1.   

    难道非得自己断句吗?如果是动态分析那可就难办了,该怎样解决呢?
    ____________________________________________________________是的,就是需要自己判断,做Socket最麻烦的就是这个. 通常的手法是把每次得到的byte[] 放到一个缓存里,比如一个List<byte>, 然后靠每个包的头把各个包拆出来.
      

  2.   

    是的,就是需要自己判断,做Socket最麻烦的就是这个. 通常的手法是把每次得到的byte[] 放到一个缓存里,比如一个List<byte>, 然后靠每个包的头把各个包拆出来.
    ---------------------------------------------------------------------
    读一次,就保存下来啥,
    然后在组合起来***************************************************************************
    事实上我就读了一次就把服务器端发的几个包全收下了,还怎么分开啊?我的byte[]定义的大小是1024,难不成弄成大小为1一个字节一个字节读取和分析?两位的意思是按字节读取,然后立即放入List中分析吗?那不是和放byte[]中一样?不太理解这是我用的读取语句 byte [] bytes=new byte[1024];
    socket.Receive(tmpByte,1024,0);
      

  3.   

    你服务器上发过来的包应该有头的,也就是说一个包的开始几个Byte应该把它所在的这个包的大小和起始终了都描述清楚. 如果没有这个头,包之间就很难分开了.