#include <stdio.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#define PORT 69
#define IP "192.168.8.242"
int main(int argc, const char *argv[])
{
int sfd=socket(AF_INET,SOCK_DGRAM,0);
struct sockaddr_in sin;
struct sockaddr_cin sin;
sin.sin_family=AF_INET;
sin.sin_port=htons(PORT);
sin.sin_addr.s_addr=inet_addr(IP);
char buf[516]={0};
char filename[10]=argv[1];
short* p1=(short*)buf;
*p1=htons(1);
char* p2=buf+2;
strcpy(p2,filename);
char* p3=p2+strlen(filename);
*p3=0;
char* p4=p3+1;
strcpy(p4,"octet");
char* p5=p4+strlen("octet");
*p5=0;
int size=2+strlen(p2)+1+strlen(p4)+1;
sendto(sfd,buf,size,0,(struct sockaddr*)&sin,sizeof(sin));
printf("sendto success\n");
int fd=open("./1.png",O_WRONLY|O_CREAT|O_TRUNC,0777);
socklen_t addrlen=sizeof(cin);
ssize_t res=0;
short ack[2]={0};
ack[0]=htons(4);
while(1){
bzero(buf,sizeof(buf));
res=recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,&addrlen);
write(fd,buf+4,strlen(buf)-4);
ack[1]=*((short *)(buf+2));
sendto(sfd,ack,sizeof(ack),0,(struct sockaddr*)&cin,addrlen);
if(res-4<512){
printf("下载完毕\n");
break;
}
//sleep(1);
}
return 0;
}
12-30
147

08-11
455

11-24
406

11-17
333

06-10
2697

04-11
190
