tftpd
#include <myhead.h>
#define SER_IP "192.168.125.243" //服务器IP地址
#define SER_PORT 69 //服务器端口号
#define CLI_IP "192.168.125.244" //客户端IP地址
#define CLI_PORT 8889 //客户端端口号
int main(int argc, const char *argv[])
{
//创建用于通信的套接字文件描述符
int cfd = socket(AF_INET, SOCK_DGRAM, 0);
if(cfd == -1)
{
perror("socket error");
return -1;
}
printf("socket success sfd = %d\n", cfd);
//绑定IP地址和端口号
struct sockaddr_in cin;
cin.sin_family = AF_INET;
cin.sin_port = htons(CLI_PORT);
cin.sin_addr.s_addr = inet_addr(CLI_IP);
if(bind(cfd, (struct sockaddr*)&cin, sizeof(cin)) == -1)
{
perror("bind error");
return -1;
}
printf("bind success\n");
//服务端信息结构体
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(SER_PORT);
sin.sin_addr.s_addr = inet_addr(SER_IP);
//接收文件
char data[516] = {0};
short *p1=data;
*p1=htons(1);
char *p2=data+2;
strcpy(p2,"5.png");
char *p4=p2+strlen(p2)+1;
strcpy(p4,"octet");
int req_size=4+strlen(p2)+strlen(p4);
sendto(cfd,data,req_size,0,(struct sockaddr*)&sin,sizeof(sin));
int fd=open("./5.png",O_WRONLY|O_CREAT|O_TRUNC,0777);
if(fd==-1)
{
perror("open err");
return -1;
}
while(1)
{
bzero(data,sizeof(data));
recv(cfd,data,sizeof(data),0);
short *b=data+2;
char ack[4]={0};
short *q1=ack;
*q1=htons(4);
short *q2=ack+2;
*q2=*b;
sendto(cfd,ack,4,0,(struct sockaddr*)&sin,sizeof(sin));
write(fd,data,sizeof(data));
int len=strlen(data);
if(len<515)
break;
}
close(fd);
close(cfd);
return 0;
}