本帖最后由 VisualEleven 于 2011-05-04 13:34:22 编辑

解决方案 »

  1.   

    但是,有可能出现下面的情况:
    c接收a发送过来的数据,存入到了bufRcvOBU中,然后处理数据,当数据还没有处理完的时候,c又接收到了b发送过来的数据,这时候如果存入bufRcvOBU的话,会出现错误吧
      

  2.   

    我用10台机器同时向一台机器发数据,接收都是正常的。
    发送频率为每100ms一次,一次发送4096字节。
    10台机器加起来相当于每10ms发送4096字节。
    接收端很正常,没有掉帧,没有串数据!不知楼主为啥有这样的情况?
      

  3.   

    byte* bufRcvOBU = new byte[1024];
    recvfrom(sockSrv,(char *)bufRcvOBU,1024,0,(SOCKADDR*)&addrClient,&len)run a thread to process and free the buffer 
      

  4.   


    我启动了一个线程专门接收,接收部分的代码如下
    while(TRUE)
    {
    //bufRcv是1024大小的char数组
    n=recvfrom(sockSrv,(char *)bufRcv,1024,0,(SOCKADDR*)&addrClient,&len);
    //接收正确,解析
    if (n != SOCKET_ERROR)
    {
    DataResolvingFromOBU();
    }
    }如果都向一个机器发送的时候,在解析bufRcv的过程中可能又接收到了数据,把上次接收的bufRcv的数据给冲掉了
      

  5.   


    你接收到数据后,把bufRcv中的数据插入链表
    处理的时候直接从链表读出并处理
    这样就不存在覆盖的问题啦