// udp_server_packet_test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include
#include
//#include
//#include
#include
#include
#include"struct.h"
#include
#include
using namespace std;
#pragma comment(lib,"ws2_32.lib")
const int BUF_SIZE = 1024;
#define MAX_BUF_SIZE 1500
struct timev {
long long tv_sec;
long long tv_usec;
};
int gettimeofday(struct timev *tp, void *tzp)
{
// time_t clock;
long long clock;
struct tm tm;
SYSTEMTIME wtm;
GetLocalTime(&wtm);
tm.tm_year = wtm.wYear - 1900;
tm.tm_mon = wtm.wMonth - 1;
tm.tm_mday = wtm.wDay;
tm.tm_hour = wtm.wHour;
tm.tm_min = wtm.wMinute;
tm.tm_sec = wtm.wSecond;
tm.tm_isdst = -1;
clock = mktime(&tm);
tp->tv_sec = clock;
tp->tv_usec = wtm.wMilliseconds * 1000;
return (0);
}
void ErrorHandling(char *message) {
fputs(message, stderr);
fputc('\n', stderr);
}
int main(int argc, char* argv[])
{
WSADATA wsaData;
int sockfd;
long long localtime, count;
FILE *fp;
struct sockaddr_in localaddr, remoteaddr;
struct timev recvtime;
char recvbuf[MAX_BUF_SIZE];
struct udp_packet udp_data;
count = 0;
if (argc != 2)
{
printf("./%s portnumber", argv[0]);
exit(1);
}
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
ErrorHandling("WSAStartup() error!");
if ((sockfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) <
0)
{
printf("Create socket failed !\n");
exit(1);
}
else
printf("Create socket success !\n");
memset(&localaddr, 0x00, sizeof(struct
sockaddr_in));
localaddr.sin_family = AF_INET;
localaddr.sin_port = htons(atoi(argv[1]));
localaddr.sin_addr.s_addr = htonl(INADDR_ANY);//本机IP
if ((bind(sockfd, (struct sockaddr*)&localaddr,
sizeof(localaddr))) < 0)
{
printf("Bind port failed !\n");
exit(1);
}
else
printf("Bind port success !\n");
if ((fp = fopen("G:\\recvdata.txt", "w+")) == NULL)
{
perror("fopen error");
exit(1);
}
else {
fprintf(fp, "序列号 接受时间 发送时间 收到的包数量\n");//输出到txt文件方便统计
printf("Success to create the receive file!\n");
}
int remoteaddr_len = sizeof(struct sockaddr);
while (1)
{
if (recvfrom(sockfd, recvbuf, 48, 0, (struct
sockaddr*)&remoteaddr, &remoteaddr_len) <
0)//MAX_BUF_SIZE
{
printf("Fail to receive data!\n");
}
else
{
count++;
printf("receiving... \n");
struct udp_packet* t_data = (struct udp_packet*)recvbuf;
gettimeofday(&recvtime, 0);
localtime = 1000000 * recvtime.tv_sec +
recvtime.tv_usec;
fprintf(fp, "%lld %lld %lld %lld\n", t_data->seq, localtime, t_data->sendtime,
count);//输出到txt文件方便统计
}
}
fclose(fp);
closesocket(sockfd);
WSACleanup();
return(0);
}