#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include<head.h>
#define PORT 69
#define IP "10.102.145.165"
int main(int argc, const char *argv[])
{
int sfd=socket(AF_INET,SOCK_DGRAM,0);
if(sfd<0)
{
ERR_MSG("socket");
return -1;
}
printf("sfd=%d\n",sfd);
struct sockaddr_in sin;
sin.sin_family=AF_INET;
sin.sin_port=htons(PORT);
sin.sin_addr.s_addr=inet_addr(IP);
char buf[516]="";
char c[20]="";
printf("请输入要下载的文件名:");
scanf("%s",c);
unsigned short *p1=(unsigned short*)buf;
*p1=htons(1);
char* p2=buf+2;
strcpy(p2,c);
char* p3=p2+strlen(p2)+1;
strcpy(p3,"octet");
int len=2+strlen(c)+1+strlen("octet")+1;
printf("%d\n",len);
if(sendto(sfd,buf,len,0,(struct sockaddr*)&sin,sizeof(sin))<0)
{
ERR_MSG("sendto");
return -1;
}
socklen_t addrlen = sizeof(sin);
ssize_t res = 0;
unsigned short num =0;
int fd=open("2.png",O_WRONLY|O_CREAT|O_TRUNC,0664);
if(fd<0)
{
ERR_MSG("open");
return -1;
}
while(1)
{
bzero(buf,sizeof(buf));
res=recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,&addrlen);
if(res<0)
{
ERR_MSG("recvfrom");
printf("%d\n",buf[1]);
break;
}
printf("%d\n",buf[1]);
printf("res=%ld\n",res);
if(write(fd,buf+4,res-4)<0)
{
ERR_MSG("write");
break;
}
buf[1]=4;
if(sendto(sfd,buf,4,0,(struct sockaddr*)&sin,sizeof(sin))<0)
{
ERR_MSG("sendto");
break;
}
if(res-4<512)
{
printf("文件下载完毕");
break;
}
}
close(sfd);
return 0;
}
基于UDP的TFTP文件传输
最新推荐文章于 2024-06-18 14:11:29 发布