main.c
#include"head.h"
#define SER_IP "192.168.8.101"
int main(int argc, const char *argv[])
{
int ucfd =socket(AF_INET,SOCK_DGRAM,0);
if(ucfd<0)
{
ERR_MSG("socket");
return -1;
}
struct sockaddr_in ucin;
ucin.sin_family = AF_INET;
ucin.sin_port = htons(69);
ucin.sin_addr.s_addr = inet_addr(SER_IP);
struct sockaddr_in usin;
socklen_t rlen=sizeof(usin),slen=sizeof(ucin);
char buf[516];
short *pa=(short*)buf;
*pa=htons(1);
char *pb=buf+2;
strcpy(pb,argv[1]);
char *pc=buf+2+strlen(pb)+1;
strcpy(pc,"octet");
size_t buf_len =2+strlen(pb)+1+strlen(pc)+1;
sendto(ucfd,buf,buf_len,0,(struct sockaddr*)&ucin,slen);
char back_val[516]={0};
recvfrom(ucfd,back_val,sizeof(back_val),0,(struct sockaddr*)&usin,&rlen);
if(connect(ucfd,(struct sockaddr*)&usin,rlen)<0)
{
ERR_MSG("connect");
return -1;
}
short make_code,c_code;
make_code = *(short*)back_val;
c_code =*(short*)(back_val+2);
int fd = open(argv[1],O_RDWR|O_CREAT|O_TRUNC,0777);
write(fd,back_val+4,512);
char back_codes[4];
size_t res;
while(1)
{
short *ba=(short*)back_codes;
*ba= htons(4);
short *bb=(short*)(back_codes+2);
*bb= *(short*)(back_val+2);
bzero(back_val,516);
send(ucfd,back_codes,sizeof(back_codes),0);
res = recv(ucfd,back_val,sizeof(back_val),0);
write(fd,back_val+4,512);
bzero(back_codes,4);
if(res<516)
{
printf("success\n");
break;
}
}
close(fd);
close(ucfd);
return 0;
}