⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lan_test.c

📁 学习arm2410 linux 下tcp ip 编程
💻 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 + -