我在客户端建了一个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);
}
发现服务端不能完全接受所有数据(也做了一个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);
}
第二个方案我不能控制发送时间。不然结果就不准确了
非常简单,在连续两次发送之间,加一个延迟,如,
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要保证绝对不丢那时不可能的。