公司机房到阿里云的数据传输有时候会出现丢包,所以需要程序来进行查询和排查,公司前辈写了一个程序来进行机器之间的丢包统计。
服务器:pong.cpp
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define MAXLINE 1500
#define SERV_PORT 2019 //服务器端口号
void do_echo(int sockfd, struct sockaddr *pcliaddr, socklen_t clilen)
{
int n, jzq_num = 0;
socklen_t len;
char mesg[MAXLINE];
int i ;
for(;;)
{
len = clilen;
/* waiting for receive data */
n = recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len);
mesg[n]=0;
printf("recvfrom data:%d %d\n",n, ++jzq_num);
printf("%s\n",mesg);
/* sent data back to client */
sendto(sockfd, mesg, n, 0, pcliaddr, len);
}
}
int main(int argc,char *argv[])
{
int sockfd;
int m_port = SERV_PORT;
int result, buf_len;
int len = sizeof (buf_len);
struct sockaddr_in servaddr, cliaddr;
if (argc >=2) sscanf(argv[1],"%d",&m_port);
sockfd = socket(AF_INET, SOCK_DGRAM, 0); /* create a socket */
/* init servaddr */
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(m_port);
printf("port:%d\n", m_port);
result = getsockopt((unsigned int)sockfd, SOL_SOCKET, SO_RCVBUF, (char *)&buf_len, (socklen_t *)&len);
printf ("one:getsock_recvbuf-> result:%s buf_len:%d\n", result?"NO":"YES", buf_len);