思维导图

半成品代码
#include <myhead.h>
#define SER_PORT 69
#define SER_IP "192.168.125.90"
char buf[516]="";
int size;
void send_download(int cfd,struct sockaddr_in sin){
short* p1=(short*)buf;
*p1=htons(1);
char* p2=buf+2;
strcpy(p2,"5.png");
char* p3=p2+strlen(p2)+1;
strcpy(p3,"octet");
size=2+strlen(p2)+2+strlen(p3);
sendto(cfd,buf,size,0,(struct sockaddr*)&sin,sizeof(sin));
}
int main(int argc, const char *argv[])
{
int cfd=socket(AF_INET,SOCK_DGRAM,0);
if(cfd==-1){
perror("socket error");
return -1;
}
printf("cfd=%d\n",cfd);
/*struct sockaddr_in sin;
sin.sin_family=AF_INET;
sin.sin_port=htons(SER_PORT);
sin.sin_addr.s_addr=inet_addr(SER_IP);
if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-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);
//首先需要先发送一个请求连接包,在循环中接受服务器发送来的包
//数据包的缓冲区
send_download(cfd,sin);//向tftp服务器发送下载请求包
int fd=open("./5.png",O_WRONLY | O_CREAT,0666);
while(1){
bzero(buf,sizeof(buf));
read(cfd,buf,sizeof(buf));
//recvfrom(cfd,buf,sizeof(buf),0,NULL,NULL);
short* p01=buf;
if(ntohs(*p01)==3){
short* p02=buf+4;
short* p03=buf+2;
printf("%s\n",buf);
write(fd,p02,strlen(p02));
*p01=htons(4);
sendto(cfd,buf,4,0,(struct sockaddr*)&sin,sizeof(sin));
printf("%s\n",buf);
}
}
close(cfd);
return 0;
}

被折叠的 条评论
为什么被折叠?



