我在客户端建了一个UDP的套接字。做了一个for循环往服务端发送100M的内存数据,
发现服务端不能完全接受所有数据(也做了一个for循环来接受)。每个包我定为1024Bytes. 该如何解决?
客户端的发送:
for(i=0;i<testbuff;i++)
{
   ret=sendto(m_hSocket,test+i*1024,1024,0,(LPSOCKADDR)&m_addr,sizeof(m_addr));
}
服务端的接受:
for(i=0;i<lngsize;i++)
{
memset(buffer,0,1024*1024);
ret=recvfrom(m_hSocket,buffer,1024*1024,0,(LPSOCKADDR)&m_addr,&addlen);
}

解决方案 »

  1.   

    方案一:改成TCP方案二:自行设计重传、超时机制。
      

  2.   

    第一个方案不可接受,因为我要测试UDP收包的时间
    第二个方案我不能控制发送时间。不然结果就不准确了
      

  3.   

    呵呵,要想让UDP绝对不丢包是不可能的,看起来要达到你的要求有些两难啊
      

  4.   

    我有个办法,我用过,是不错的,不知道对你有没有用?
    非常简单,在连续两次发送之间,加一个延迟,如,
    for(i=0;i<testbuff;i++)
    {
       ret=sendto(m_hSocket,test+i*1024,1024,0,(LPSOCKADDR)     &m_addr,sizeof(m_addr));
        Sleep(500);//延迟500ms
    }
    延迟的时间你可以看情况而定。
    这个办法我用过,不错的。基本上不会丢数据的。但是当然UDP要保证绝对不丢那时不可能的。