简单的使用UDP测试网络丢包及收发效率,发现一个奇怪的现象,如果网络测试仪加Linux下测试程序测试则丢包很少,提高网络速度丢包的现象也不是很明显。
但使用网络测试仪加Windows下的测试程序发现在网速不是很快的情况下丢包不多,效率还可以。但提高网速后,发现丢包现象较之Linux多了非常多。不解。各位有熟悉情况的吗?给出帮助立即揭帖。附简单的测试代码
struct sockaddr_in local;
struct sockaddr_in from;
int recvlength;
int fromlen =sizeof(from);
local.sin_family=AF_INET;
local.sin_port=htons(5000);             ///¼àÌý¶Ë¿Ú
local.sin_addr.s_addr=INADDR_ANY;       ///±¾»ú socket1=socket(AF_INET,SOCK_DGRAM,0); bind(socket1,(struct sockaddr*)&local,sizeof(local)); while (1)
{
char buffer[2000]="\0";
if ((recvlength=recvfrom(socket1,buffer,2000,0,(struct sockaddr*)&from,&fromlen))!=-1)
{
sendto(socket1,buffer,recvlength,0,(struct sockaddr*)&from,fromlen); }
else
;//printf("Data lost");
} closesocket(socket1);

解决方案 »

  1.   

    用UDP必须有校验,因为UDP是不可靠协议,如果发送速度快,就会丢包,必须进行流量控制,建议有接收方驱动,或发送方一直发送,有接收方进行校验,有错误才通知接收方重发.
    不然你就用TCP吧
      

  2.   

    Linux/Windows TCP/IP 协议栈有区别
      

  3.   

    kingzai(stevenzhu):
    只是做性能测试,就是为了看速度快时会丢失多少包,做校验还有什么作用?
     
     gdy119(夜风微凉):
    这样说来Linux的协议栈效率比Windows要高很多了?
      

  4.   

    最开始的socket通信开发,TCP/IP协议等都是在unix/linux上的,可能比windows更有优势些