我用Winscock接收数据对方发送的数据
一个数据包可能包含一个或多个数据帧,
每个数据帧是可变长度的自已定义的数据有什么算法可以比较高效的从接收的数据将 单个数据帧 找出来,比如数据帧格式是包头->包尾长度(2Byte: 为整个数据帧的长度) + 数据帧类型(2byte) + (N字节内容,可变长度) + 校验和(1Byte)谢谢
讨论一下
谁能给个比较好的算法
散分100

解决方案 »

  1.   

    长度(2Byte: 为整个数据帧的长度) + 数据帧类型(2byte) + (N字节内容,可变长度) + 校验和(1Byte)
    定义一个数据结构吧:
    type Sock
       Lenth as integer
       Type as integer
       Datas as string
       Ecc as byte
    end type
      

  2.   

    建议检验和放在(N字节内容,可变长度)前(看IP报文的头结构你就明白了),利用结构:
    type DataHdr
       Lenth as integer
       Type as integer
       Ecc as byte
    end typedim bydata(Buffsize) as byte
    dim hdr as DataHdrhdr.length = len(hdr)+yourdataLen
    CopyMemory bydata(0), DataHdr, len(hdr)然后把你的数据从bydata(len(hdr))处写上即可
    CopyMemory bydata(len(hdr)), yourData, yourDataLen接收时
    CopyMemory DataHdr, byData(0), len(hdr)
    然后把你的数据从bydata(len(hdr))处取出即可
    CopyMemory yourBuffer, bydata(len(hdr)), hdr.length-len(hdr)
    大概也就如此。
      

  3.   

    定义一个数据结构吧:
    type Sock
       Lenth as integer
       Type as integer
       Datas as string
       Ecc as byte
    end type
    发送接受我都是定义数据结构
    不过好象不能直接发送这个结构,不然长度对直接要求长度多两个字节,因为  Datas as string 原因,我用动态数据也是多两个字节,要单独处理,因为对方的系统是C语言编写的.
      

  4.   

    顺便问一下回复人: wolong98(Wangyang) ( ) 信誉:95  2004-08-09 10:12:00  得分: 0  信誉是指什么??我现在对CSDN还不是很熟悉,谢谢
      

  5.   

    单个数据帧发送可能要简单些。Winsock每次发送字节数最多8K,如果多个数据帧大于8K,就会变的复杂。而且实际操作中会有很多意想不到的,很棘手的就是多线程的问题。