#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PORT 5555
#define RECV_NO 250
//#defineRECV_TIMES 10
typedef struct sockaddr ADDR;
int main(int argc, char *argv[])
{
ssize_t n;
int serverfd,port;
int k=0;
struct sockaddr_in myaddr,peeraddr;
struct timeval tv;
struct timeval tvnow,tvnowb;
FILE * fp;
extern int errno;
char file[]="handle_delay_test1_send.txt"; /*需要各自修改*/
int on = 1;
char buf[124]= {};
struct Record
{
time_t sec;
suseconds_t usec;
};
struct Record record[RECV_NO+1];
if(argc < 1)
{
printf("the usage :%s",argv[0]);
exit(-1);
}
if((serverfd = socket(PF_INET,SOCK_DGRAM,0)) < 0)
{
perror("fail t socket");
exit(-1);
}
myaddr.sin_family = PF_INET;
myaddr.sin_port = htons(PORT);
myaddr.sin_addr.s_addr = inet_addr("10.42.0.255");
setsockopt(serverfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));
socklen_t peerlen = sizeof(peeraddr);
gettimeofday(&tvnow,NULL);
printf("nowtime %ld:%ld\n",tvnow.tv_sec,tvnow.tv_usec);
memset(buf,0,sizeof(buf));
k=0;
memset(buf,k,1);
while(k
{
gettimeofday(&tv, NULL);
if(tv.tv_sec==tvnow.tv_sec+1&&tv.tv_usec<100000)//每1s发送一次广播
{
sendto(serverfd,buf,sizeof(buf),0,(ADDR *)&myaddr,16);
gettimeofday(&tvnow,NULL);
printf(" %d send_after time %ld:%ld %d B\n",k+1,tvnow.tv_sec,tvnow.tv_usec,sizeof(buf));
record[k].sec=tvnow.tv_sec;
record[k++].usec=tvnow.tv_usec;
memset(buf,0,sizeof(buf));
memset(buf,k,1);//报文中包含序号
printf("buff=%s\n",buf);
}
}
close(serverfd);
fp=fopen(file,"a+"); //数据存储到文件中
if(fp==NULL)
{
printf("cant't open file %s.\n",file);
printf("errno:%d\n",errno);
printf("ERR :%s\n",strerror(errno));
return;
}
else
{
printf("%s was opened.\n",file);
}
for(k=0;k
{
fprintf(fp,"%d send_after time %ld:%ld \n",k+1,record[k].sec,record[k].usec);
}
fprintf(fp,"\n");//分开每组数据
printf("%d records was written into %s.\n",k,file);
fclose(fp);
return 0 ;
}
[代码] udp_receive.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define RECV_NO 250
typedef struct sockaddr ADDR;
int main(int argc, char *argv[])
{
ssize_t n;
char buf[2];
int k=0,serverfd,nread=0;
struct sockaddr_in myaddr,peeraddr;
struct timeval tv;
FILE * fp;
extern int errno;
char file[]="handle_delay_test1_recv.txt";
struct Record
{
time_t sec;
suseconds_t usec;
};
struct Record record[RECV_NO+1];
if(argc < 1)
{
printf("the usage :%s",argv[0]);
//printf("the usage :%s ip port",argv[0]);
exit(-1);
}
if((serverfd = socket(PF_INET,SOCK_DGRAM,0)) < 0)
{
perror("fail t socket");
exit(-1);
}
myaddr.sin_family = PF_INET;
myaddr.sin_port =htons(5555);//绑定端口监听
myaddr.sin_addr.s_addr = INADDR_ANY;//系统会自动填入本机IP地址。
if(bind(serverfd,(ADDR *)&myaddr ,sizeof(myaddr)) < 0)
{
perror("fail to bind");
exit(-1);
}
socklen_t peerlen = sizeof(peeraddr);
while(k
{//nread为输出字符的实际长度,buff是读缓冲。
if(0
{
gettimeofday(&tv,NULL);
printf(" %d time %ld:%ld\n",k+1,tv.tv_sec,tv.tv_usec);
record[k].sec=tv.tv_sec;
record[k++].usec=tv.tv_usec;
}
}
close(serverfd);
fp=fopen(file,"a+");
if(fp==NULL)
{
printf("cant't open file %s.\n",file);
printf("errno:%d\n",errno);
printf("ERR :%s\n",strerror(errno));
return;
}
else
{
printf("%s was opened.\n",file);
}
for(k=0;k
fprintf(fp,"%d time %ld:%ld\n",k+1,record[k].sec,record[k].usec);
fprintf(fp,"\n");//分开每组数据
printf("%d records was written into %s.\n",k,file);
fclose(fp);
return 0 ;
}