Chinaunix
标题:
自己编写的网络通信程序为何速率只有5Mbps?
[打印本页]
作者:
whyliyi
时间:
2011-01-13 17:11
标题:
自己编写的网络通信程序为何速率只有5Mbps?
本帖最后由 whyliyi 于 2011-01-13 17:13 编辑
自己编写了通信程序,基本的通信程序如下:
/*服务器*/
while(1)
{
FD_SET(fdListen, &fdset);
for(i=0; i<MAX_NODE; i++)
{
FD_SET(fdRecv[i], &fdset);
max_fd = max_fd>fdRecv[i] ? max_fd : fdRecv[i];
}
overtime.tv_sec = 2;
overtime.tv_usec = 0;
ret = select(max_fd+1, &fdset, NULL, NULL, &overtime);
if( 0 == ret )
{
printf("ret = 0\n");
continue;
}
else if( -1 == ret )
{
printf("Something Unexpected happened!...\n");
break;
}
if( SOCK_STREAM == fdType && index <= MAX_NODE && FD_ISSET(fdListen, &fdset) )
{
for( i=0; i<MAX_NODE; i++ )
{
if( 0 == fdRecv[i] &&(fdRecv[i] = AcceptSock(&fdListen, &serAddr)) )
{
FD_SET(fdRecv[i], &fdset);
max_fd = max_fd>fdRecv[i] ? max_fd : fdRecv[i];
index++;
break;
}
}
}
else
{
for( i=0; i<MAX_NODE; i++ )
{
//printf("\\\\");
if( FD_ISSET(fdRecv[i], &fdset) )
{
//printf("????");
len = -1;
cliLen = sizeof(cliAddr);
len = RecvMsg(&fdRecv[i], msgRecv, sizeof(msgRecv), 0, (SA*)&cliAddr);
if( len < 0 ) //如果<0则认为连接已经断开
{
FD_CLR(fdRecv[i], &fdset);
fdRecv[i] = 0;
index --;
gettimeofday(&end, NULL);
timeuse = 1000000 * (end.tv_sec - start.tv_sec) + end.tv_usec - start.tv_usec;
timeuse /= 1000000;
printf("Time:%f, Total Bits:%f, %fkbps\n", timeuse, total_bits, total_bits/(1000*timeuse));
break;
}
total_packets++;
if( 1 == total_packets )
{
gettimeofday(&start, NULL);
}
total_bits += 8*strlen(msgRecv);
break;
}
}
}
}
复制代码
客户端数据不间断发送,采用TCP连接。
两台PC通过11G网卡连接。在客户端发送了60000包长度为1000字节的数据,结果为:
Time:83.566383, Total Bits:480014432.000000, 5744.109206kbps
表示所用时间为83.566383秒,总共发送的bit数为480014432bits,平均速率为5744.109206kbps。
但是,用同样的网卡、同样的距离,用飞鸽传书传送一个文件的速率为2MB/s,即2*8=16Mbps,这是为何?
按理说,飞鸽是一个协议,数据的接收发送都需要解包,而我的发的纯char数据的数据,速率应该不会比我的快才对阿。
请高手指教!
作者:
Cyberman.Wu
时间:
2011-02-01 23:43
你的代码小毛病不少,为什么做个附件的压缩包把它发全了,还遮遮掩掩的?速率的问题有时候不是一眼就能看出来的,首先你有没有测试过功能,确保你收到的数据就是你发的?
你的接收Buffer是多大?socket读数据会返回数据长度,你为什么还用strlen来得一遍长度?就算你发的是字符串,你是不是把后面的0一定发了?而且TCP不是你发的长度每次是1000字节,接收方每一次recv()就返回一次发送,你的接收用的函数是如何封装的?
作者:
xhfx
时间:
2011-02-11 09:04
新年快乐
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2