echo的传输时间问题
最近在做ipv6下面的数据传输测试
自己弄了个程序,但是具体传输时间一直不知道怎么解决
这个是服务器端的
#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys/types.h>#include <stdlib.h>#include <stdio.h>#include <netdb.h>#include <string.h>#include <signal.h>static int listen_fd = -1;void exit_handler(int no){ close(listen_fd); exit(0);}int main(int argc,char * argv[]){ unsigned short port = 10002; char buffer[1024000]; int len,i; signal(SIGTERM,exit_handler); signal(SIGINT,exit_handler); /* ipv 6 地址 */ struct sockaddr_in6 server_addr; struct sockaddr_in6 client_addr; socklen_t sockaddr_len = sizeof(struct sockaddr_in6); if(argc > 1) port = (unsigned short)atoi(argv[1]); /* 第一步:创建TCP 侦听SOCKET*/ listen_fd = socket(PF_INET6,SOCK_STREAM,0); if(listen_fd == -1) { perror("socket"); } /* 第二步:设置侦听端口 */ memset((void *)&server_addr,0,sizeof(server_addr)); server_addr.sin6_family = AF_INET6 ; /* ipv6 */ server_addr.sin6_port = htons(port); server_addr.sin6_addr = in6addr_any; if(bind(listen_fd,(struct sockaddr *)&server_addr,sockaddr_len)!=0) { perror("bind"); exit_handler(0); } /* 第三步:通知内核开始侦听 ,这里是非阻塞 */ if(listen(listen_fd,20)!= 0) { perror("listen"); exit_handler(0); } fprintf(stdout,"TCP echo server ,listen on %d\n",port); /* 第四步:开始用等待客户端的联接 */ while(1) { int new_fd ; memset((void *)&client_addr,0,sizeof(client_addr)); sockaddr_len = sizeof(client_addr); /* 没有客户端联接,将会这里阻塞*/ new_fd = accept(listen_fd,(struct sockaddr *)&client_addr,&sockaddr_len); if(new_fd == -1) continue; fprintf(stdout,"client connect: ip %s,port %d\n",inet_ntop(AF_INET6, (void *)&(client_addr.sin6_addr),buffer, sockaddr_len),ntohs(client_addr.sin6_port)); /* 做ECHO操作*/ len = recv(new_fd,buffer,sizeof(buffer),0); if(len <=0) continue; if(strncmp("exit",buffer,4)!=0) send(new_fd,buffer,len,0); close(new_fd); } fprintf(stdout,"close TCP server\n%d"); exit_handler(0);}#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys/types.h>#include <stdlib.h>#include <stdio.h>#include <netdb.h>#include <string.h>#include <signal.h>#include <time.h>#include <sys/time.h>static int tcp_fd = -1;void exit_handler(int no){ close(tcp_fd); exit(0);}int main(int argc,char * argv[]){ unsigned short port = 10002; unsigned char ip[512] = "fe80::230:1bff:fe3e:a3c6"; char buffer[10240000]; ssize_t len; int a; int tv44; int Datasize; struct timeval tv; struct timeval tv1; struct timeval tv2; signal(SIGTERM,exit_handler); signal(SIGINT,exit_handler); struct sockaddr_in6 server_addr; socklen_t sockaddr_len = sizeof(struct sockaddr_in6); if(argc > 1) //port = (unsigned short)atoi(argv[1]); Datasize =(unsigned short)atoi(argv[1]); for(a=0;a<atoi(argv[1]);a++) buffer[a]='1'; if(argc > 2) strncpy(ip,argv[2],sizeof(ip)-1); /* 第一步:创建TCP 侦听SOCKET*/ tcp_fd = socket(PF_INET6,SOCK_STREAM,0); if(tcp_fd == -1) { perror("socket"); } /* 第二步:可选操作bind,如果没有bind,TCP协议栈自动选一个端口 */ /* 第三步:联接服务器 */ memset((void *)&server_addr,0,sizeof(server_addr)); server_addr.sin6_family = AF_INET6 ; /* ipv4 */ server_addr.sin6_port = htons(port); len =inet_pton(AF_INET6, ip, (void *)&(server_addr.sin6_addr)); printf("len=%d\n",len);/* success = 1 */ #if 0 if(len != 0) { perror("inet_pton"); exit_handler(0); }#endif fprintf(stdout,"connect TCP echo server %s:%d\n",ip,(int)port); if(connect(tcp_fd,(struct sockaddr *)&server_addr,sockaddr_len) != 0) { perror("connect"); exit_handler(0); } while(1) { //gettimeofday(&tv,NULL); //接受发送时间 /* if(fgets(buffer,sizeof(buffer)-1,stdin)== NULL) { perror("fgets"); continue; } if(strncmp(buffer,"exit",4) == 0) { send(tcp_fd,"exit",5,0); exit_handler(0); break; }*/ len = strlen(buffer)+1;gettimeofday(&tv,NULL); //接受发送时间 if((len = send(tcp_fd,buffer,len,0))<= 0) { perror("send"); continue; }//gettimeofday(&tv1,NULL); //收受回复时间 len = recv(tcp_fd,buffer,len,0); if(len <= 0) { perror("recv"); continue; } gettimeofday(&tv1,NULL); //收受回复时间 tv44=tv1.tv_usec-tv.tv_usec; fprintf(stdout,"server > %s\n%ums\n",buffer,tv44); } } /* main */