c语言程序代码测网络,C语言写的socket通信代码, 很简单的代码, 用来测试网络带宽的...

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define SERV_PORT    46420  /* server UDP port */

#define MAX_MSG_LEN  1500   /* max size of any msg */

#define TEST_TIME    500    /* test time for average,测试次数 */

#define DIVIATION_MAX  1 /*大于1s忽略*/

//#define IP_ADDRESS "149.171.37.222"     /* UNSW-Based Serv */

//#define IP_ADDRESS "54.206.16.120"      /* External Serv */

//函数:实现读取字符串转换成int类型功能

double timeConvert(char *revMsg)

{

long tmp,usec,sec;

double retUsec;

memcpy(&sec,revMsg,4);

memcpy(&usec,revMsg+4,4);

retUsec = ntohl(sec)+ntohl(usec)*0.000001;//转换成usec【公式不知道对否】

return(retUsec);

}

int main()

{

int sock, e, inMsgLen,addrLen;

struct sockaddr_in servAddr, cliAddr;

char inMsg[MAX_MSG_LEN];

char sendMsg[MAX_MSG_LEN]="getmybw";

int i,j,falg,avgNum=0;

double firTimer,secTimer,timeDiff;

double avg=0,bandWidth;

struct timeval timeRecv;

/* open socket */

sock = socket(AF_INET, SOCK_DGRAM, 0);

if (sock < 0) {

printf("socket creation failed errno=%d\n", errno);

exit(0);

}

memset( &servAddr,0,sizeof(servAddr) );

servAddr.sin_family = AF_INET;

servAddr.sin_addr.s_addr = inet_addr( "54.206.16.120");

servAddr.sin_port = htons(SERV_PORT);

/*  设置接受超时时间  */

timeRecv.tv_sec = 1;

timeRecv.tv_usec = 0;

setsockopt(sock,SOL_SOCKET,SO_RCVTIMEO,&timeRecv, sizeof(timeRecv));

for(i=0;i

/**************************/

e = sendto(sock, sendMsg, sizeof(sendMsg), 0,(struct sockaddr*)&servAddr, sizeof(servAddr));

if (e < 0) {

printf("sendto() failure errno=%d\n", errno);

}

e = sendto(sock, sendMsg, sizeof(sendMsg), 0,(struct sockaddr*)&servAddr, sizeof(servAddr));

if (e < 0) {

printf("sendto() failure errno=%d\n", errno);

}

/**********************/

inMsgLen = recvfrom(sock, inMsg, MAX_MSG_LEN, 0,(struct sockaddr *)&cliAddr, (socklen_t*)&addrLen);

//printf("receive Message:==%s==\n",inMsg);

firTimer = timeConvert(inMsg);

inMsgLen = recvfrom(sock, inMsg, MAX_MSG_LEN, 0,(struct sockaddr *)&cliAddr, (socklen_t*)&addrLen);

//printf("receive Message:==%s==\n",inMsg);

secTimer = timeConvert(inMsg);

timeDiff = secTimer-firTimer;

/*if( timeDiff > DIVIATION_MAX ){//放弃超出误差范围的结果

printf(" (%f)out of scope\n",timeDiff);

continue;

}*/

bandWidth = sizeof(inMsg)*8/timeDiff/1000000;

avg += (bandWidth-avg)/(avgNum+1);//求平均值

avgNum++;

printf("%d---%.11f--\n",avgNum,avg);//%.11f: 显示小数点后11位

}

printf("END: average=%.11f,the number of tests: %d \n",avg,avgNum);

close(sock);

return 0;

}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值