📄 sender.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 + -