- 论坛徽章:
- 0
|
本帖最后由 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数据的数据,速率应该不会比我的快才对阿。
请高手指教! |
|