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

📄 sender.c

📁 adhoc 下网络带宽测试代码 linux下C源码
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/shm.h>#include <sys/time.h>#include <sys/select.h>#include <sys/param.h>#include <sys/types.h>#include <sys/socket.h>#include <assert.h>#include <netinet/in.h>#include <arpa/inet.h>#include <netdb.h>#include <signal.h>#include <time.h>#define PORT_F 15000#define PORT_B 15000#define MAXBUFLEN 100000// IP: 20 bytes  UDP: 8 bytes#define HEADER_SIZE 28    __inline__ unsigned long long rdtsc(){            unsigned long long int x;                 __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));                      return x;    }struct sockaddr_in addr_f; // connector's address informationint main(int argc, char *argv[]) {char *addr = NULL;int port = -1;int send_socket;struct hostent *he;int i;int *DATA;int PACKET_SIZE;int numbytes;int sn = 0;unsigned long long CPU_HZ = 0;struct timespec req, rem;	req.tv_sec = 0;	req.tv_nsec = 1000000 * 200;  // 200 ms        if (argc != 3) {            fprintf(stderr,"usage: %s hostname PACKET_SIZE(bytes)\n", argv[0]);            exit(1);        }        if ((he=gethostbyname(argv[1])) == NULL) {  // get the host info            perror("gethostbyname");            exit(1);        }        PACKET_SIZE = atol(argv[2]);        PACKET_SIZE -= HEADER_SIZE;//        PACKET_DELAY = atol(argv[2]);//        TEST_TIME = atol(argv[3]);        if ((send_socket = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {            perror("socket");            exit(1);        }        addr_f.sin_family = AF_INET;     // host byte order        addr_f.sin_port = htons(PORT_F); // short, network byte order        addr_f.sin_addr = *((struct in_addr *)he->h_addr);        memset(&(addr_f.sin_zero), '\0', 8); // zero the rest of the struct{//--------------------------------//  read /proc/cpuinfo information//FILE *Proc;char buf[300];char buf2[300];Proc = fopen("/proc/cpuinfo","r");while(fgets(buf,255,Proc)){	if (strstr(buf,"cpu MHz")){		buf[strlen(buf)-1]='\0';		CPU_HZ = atof(buf+11)*1000000;		break;	}}fclose(Proc);//--------------------------------}	while(1){		double t;		double *dd;		sn++;		sn %= 10000;                DATA = (int *)malloc(PACKET_SIZE);                memset(DATA,'0',PACKET_SIZE);                DATA[0] = sn*2-1;		dd = DATA + 1;		t = rdtsc()/(double)CPU_HZ;                dd[0] = t;                //(double *)(DATA[1]) = t;                if ((numbytes=sendto(send_socket, DATA, PACKET_SIZE, 0, (struct sockaddr *)&addr_f, sizeof(struct sockaddr))) == -1) {                        printf("Err: send sn=%d\n",sn*2-1);                        free(DATA);//                        exit(1);                }                free(DATA);                DATA = (int *)malloc(PACKET_SIZE);                memset(DATA,'0',PACKET_SIZE);                DATA[0] = sn*2;		dd = DATA + 1;                dd[0] = t;                if ((numbytes=sendto(send_socket, DATA, PACKET_SIZE, 0, (struct sockaddr *)&addr_f, sizeof(struct sockaddr))) == -1) {                        printf("Err: send sn=%d\n",sn*2);                        free(DATA);//                        exit(1);                }                free(DATA);		nanosleep(&req, &rem);	}        exit(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -