📄 lan_test.c
字号:
/* The client of tcp-test for test block-data transfer rate. * Create by ccdp * 2002-08-21 */ #include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/wait.h>#include <sys/types.h>#include <sys/socket.h>//#include <sys/stat.h>#include <time.h>#include <sys/fcntl.h> #include <netinet/in.h>#include <netdb.h>#include <unistd.h>#include <signal.h>#include <string.h> #define PORT 5000#define PACKET_SIZE 8192 static int count=0;static unsigned int packet_size;static unsigned int sum,port;//int get_time(char a){ int second; struct tm *sp_time; time_t timep; if(!a){ time(&timep); sp_time = gmtime(&timep); second = sp_time->tm_sec; } else{ time(&timep); sp_time = gmtime(&timep); second = sp_time->tm_sec - second; } return second;}void display(int second){ printf("\n"); printf("Transfer complete !\n"); printf("Total size:%d !\n",sum); printf("文件接收用时%d(s)\n",second); printf("Speed:%d Mbps\n",8*sum/( second == 0 ? 1:second )/0x100000); exit(0);}struct p_t{ unsigned int nsecond; unsigned int npacket;};int main(int argc,char * argv[]){ int sockfd,fd_receive; int k,second;//recv_bytes; char file[16],strs[] ="正在接收文件:"; char host_name[16]={0}; //unsigned char buf[PACKET_SIZE]; unsigned char *buf; //Description of data base entry for a single host. struct hostent *he; //Structure describing an Internet socket address. struct sockaddr_in srvaddr; //unsigned int uiip; struct p_t send_para;//参数 sum=0; system("clear"); printf("\n"); if(argc < 5 ){ perror("Usage: client <hostIP> <port> -t time -p PACKET_SIZE\n"); exit(1); } second=atoi(argv[4]); port = atoi(argv[2]); if(port<1000) port = PORT; if(argc==7) packet_size=atoi(argv[6]); else packet_size=PACKET_SIZE; printf("packet_size=%d\n",packet_size); buf = malloc(packet_size); // sprintf(host_name, "%s", argv[1]); he = gethostbyname(host_name); sockfd = socket(AF_INET,SOCK_STREAM,0); bzero(file,sizeof(file)); bzero(&srvaddr,sizeof(srvaddr)); srvaddr.sin_family = AF_INET; srvaddr.sin_port = htons(port); srvaddr.sin_addr = *((struct in_addr *)he->h_addr); //aiptoi(argv[1],&uiip); //srvaddr.sin_addr.s_addr=uiip; printf("正在与服务器连接!\n"); while(connect(sockfd,(struct sockaddr *) &srvaddr, sizeof(struct sockaddr))== -1){ perror("不能与服务器连接!!!\n"); sleep(3); if( count > 10 ) exit(2) ; else { count++; perror("重新与服务器连接!!!\n"); } continue; } // send_para.nsecond = htonl(second); send_para.npacket = htonl(packet_size); //发送时间 if(write(sockfd,&send_para,sizeof(send_para))== -1){ perror("Error when send second!\n"); exit(3); } //接收文件名 if((read(sockfd,file,sizeof(file))== -1)){ perror("文件名接收错误!!\n"); exit(0); } printf("文件名:%s\n",file); //创建文件 if((fd_receive = open(file,O_WRONLY|O_CREAT|O_TRUNC, 0644 ))<0){ perror("不能打开目标文件!!\n"); exit(4); } strcat(strs,file); strcat(strs,",稍候!!!\n"); //printf("%s",strs); //效果同上 write(1,strs,strlen(strs)); sum = 0; alarm(second); //second = get_time(0); //内容 lseek(fd_receive,0L,SEEK_SET);// printf("sizeof(buf) is %d\n",sizeof(buf));//4 指针的大小要注意 while((k=read(sockfd,buf,packet_size))>0) { //lseek(fd_receive,sum,SEEK_SET); lseek(fd_receive,0L,SEEK_CUR); write(fd_receive,buf,k); sum +=k; if(!(sum%1000)){ printf("sum = %dkbyte\t", sum/1000); } } printf("\n"); //得到时间差 second -= alarm(0); //second = get_time(1) - second; printf("接收文件成功!!!\n"); //输出到good文件 //system("date>good"); close(sockfd); close(fd_receive); free(buf); display(second); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -