#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<head.h>
#define PORT 69
#define IP "192.168.112.17"
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[128]="";
ssize_t res=0;
struct sockaddr_in cin;
socklen_t addrlen=sizeof(cin);
char a[516]="";
char *ptr=a;
unsigned short*p1=(unsigned short*)ptr;
*p1=htons(1);
char *p2=ptr+2;
strcpy(p2,"5.png");
char *p3=p2+(strlen("5.png"));
*p3='\0';
char *p4=p3+1;
strcpy(p4,"octet");
char *p5=p4+strlen("octet");
*p5='\0';
if(sendto(sfd,a,2+strlen(p2)+1+strlen(p4)+1,0,(struct sockaddr*)&sin,sizeof(sin))<0)
{
ERR_MSG("sendto");
return -1;
}
printf("请求成功\n");
int fd=open("./shuju.txt",O_WRONLY|O_TRUNC|O_CREAT,0777);
if(fd<0)
{
ERR_MSG("open");
return -1;
}
printf("open success\n");
while(1)
{ bzero(a,sizeof(a));
res=recvfrom(sfd,a,sizeof(a),0,(struct sockaddr*)&cin,&addrlen);
if(res<0)
{
ERR_MSG("recvfrom");
return -1;
}
printf("%ld\n",res);
unsigned short*q1=(unsigned short*)ptr+1;
short k=*q1;//块编号
char *q2=ptr+4;
char shu[513]="";
strcpy(shu,q2);
write(fd,shu,res-4);
bzero(a,sizeof(a));
unsigned short*w1=(unsigned short*)ptr;
*w1=htons(4);
unsigned short*w2=w1+1;
*w2=k;
if(sendto(sfd,a,4,0,(struct sockaddr*)&cin,sizeof(cin))<0)
{
ERR_MSG("sendto");
return -1;
}
printf("发送ACK成功\n");
if(res-4<512)
break;
}
close(sfd);
return 0;
}
8.10作业
最新推荐文章于 2025-05-04 22:46:35 发布