/*************************************************************************
* Filename: tftpclient.c
* Description:
* Version: 1.0
* Created: 2011年05月06日 09时48分38秒
* Revision: none
* Compiler: gcc
* Author: wenhao (wh), hnrain1004@gmail.com
* Company: sunplusapp
* ************************************************************************/#include#include#include#include#include#include#includeintmain(intargc,char*argv[])
{structsockaddr_in addr;charbuf[516]="";intaddrlen=sizeof(addr);intsockfd;intbuflen;intfd;charcommand;charserial=0;if(argc<3)
{
printf("input error!\n");
exit(0);
}
addr.sin_family=AF_INET;
addr.sin_port=htons(69);
addr.sin_addr.s_addr=inet_addr(argv[1]);
sockfd=socket(AF_INET,SOCK_DGRAM,0);
buflen=sprintf(buf,"%c%c%s%c%s%c",0,1,argv[2],0,"octet",0);
sendto(sockfd,buf,buflen,0,(structsockaddr*)&addr,sizeof(addr));
fd=open(argv[2],O_WRONLY|O_CREAT,0666);if(fd==-1)
{
perror("open");
exit(1);
}do{
buflen=recvfrom(sockfd,buf,516,0,(structsockaddr*)&addr,&addrlen);if(buflen==-1)
{
perror("recvfrom");
}
command=buf[1];if(command==3)
{if(serial
{
serial=buf[3];
write(fd,buf+4,buflen-4);
}
buf[1]=4;
sendto(sockfd,buf,4,0,(structsockaddr*)&addr,sizeof(addr));
}elseif(command==5)
{
close(fd);
close(sockfd);
unlink(argv[2]);
printf("recv error serial!\n");
}
}while(buflen==516);
close(fd);
close(sockfd);return0;
}