📄 rcv.c
字号:
#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <time.h>#include <signal.h>#define MS 1000#define PORT 8000#define PKT_SIZE 256#define PKT_MAX 1int pktcnt=0;void receive_proc(int sd){ time_t last, curr, start; char buf[PKT_SIZE*2]; int rcvlen; int lpktcnt=0; struct sockaddr_in from; int fromlen = sizeof(from); last = start = time(0); pktcnt = 0; while(1) { rcvlen = recvfrom(sd, buf, sizeof(buf), 0, (struct sockaddr *)&from, &fromlen); if(rcvlen<0){ perror("recvfrom()"); exit(1); } pktcnt++; curr = time(0); if(curr - last >= 10) { printf("recieve: %d pkt, %lf pps\n", pktcnt, 1.0*(pktcnt-lpktcnt)/(curr-last)); last = curr; lpktcnt = pktcnt; } } }int create_sock(void){ int sd; struct sockaddr_in sin; sd = socket(AF_INET, SOCK_DGRAM, 0); if(sd<0) { perror("socket()"); return -1; } bzero(&sin, sizeof(sin)); sin.sin_family = AF_INET;/* sin.sin_len = sizeof(sin); */ sin.sin_port = htons(PORT); if(bind(sd, (struct sockaddr *)&sin, sizeof(sin))<0) { perror("bind()"); return -1; } return sd;}void sigint(int sig){ printf("count = %d\n", pktcnt); exit(0);}int main(int argc, char **argv){ pid_t pid; int sd = create_sock(); signal(SIGINT, sigint); if(sd<0) exit(1); receive_proc(sd); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -