#include <header.h>
#define CLI_PORT 8888
#define CLI_IP "192.168.125.101"
#define SER_PORT 69
int run1();
int run2();
int main(int argc, const char *argv[])
{
while(1)
{
printf("****************\n");
printf("****************\n");
printf("*****1:下载*****\n");
printf("*****2:上传*****\n");
printf("*****3:退出*****\n");
printf("****************\n");
printf("****************\n");
printf("请输入功能:");
int c;
scanf("%d",&c);
getchar();
switch(c)
{
case 1:
run1();
printf("请输入任意字符进行清屏·:");
getchar();
system("clear");
break;
case 2:
run2();
printf("请输入任意字符进行清屏:");
getchar();
system("clear");
;
break;
case 3:
return 0;
break;
}
}
return 0;
}
int run1()
{
char buf2[128];
printf("请输入你想要下载的文件名字:");
fgets(buf2,128,stdin);
buf2[strlen(buf2)-1]='\0';
int cfd=socket(AF_INET,SOCK_DGRAM,0);
if(cfd==-1)
{
perror("socket");
return 1;
}
//printf("socket success\n");
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");
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("192.168.125.94");
char buf[516];
char rbuf[516];
short *p1=(short *)buf;
*p1=htons(1);
char *p2=buf+2;
strcpy(p2,buf2);
char *p3=p2+strlen(p2)+1;
strcpy(p3,"octet");
int size=2+strlen(p2)+strlen(p3)+2;
sendto(cfd,buf,size,0,(struct sockaddr*)&sin,sizeof(sin));
char ack[4]="";
int fd=-1;
fd=open(buf2,O_CREAT|O_WRONLY|O_TRUNC,0666);
struct sockaddr_in ssin; //临时端口
socklen_t addrlen =sizeof(ssin);
while(1)
{
memset(rbuf,0,sizeof(rbuf));
int ret_val=recvfrom(cfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&ssin,&addrlen);
short *p6=(short *)rbuf;
if(ntohs(*p6)==5)
{
char *p7=rbuf+4;
printf("%s\n",p7);
return 0;
}
char *p4=rbuf+4;
//int size1=strlen(p4);
write(fd,rbuf+4,512);
short *p5=(short *)rbuf;
*p5=htons(4);
sendto(cfd,rbuf,4,0,(struct sockaddr*)&ssin,sizeof(ssin));
if(ret_val<516)
{
break;
}
}
short *p8=(short *)rbuf;
if(ntohs(*p8)==4)
{
printf("下载成功\n");
}
close(fd);
close(cfd);
}
int run2()
{
char buf3[128];
printf("请输入上传文件的路径:");
fgets(buf3,128,stdin);
buf3[strlen(buf3)-1]='\0';
int cfd=socket(AF_INET,SOCK_DGRAM,0);
if(cfd==-1)
{
perror("socket");
return 1;
}
printf("socket success\n");
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");
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("192.168.125.94");
char buf[516];
char wbuf[516];
short *p1=(short *)buf;
*p1=htons(2);
char *p2=buf+2;
strcpy(p2,buf3);
char *p3=p2+strlen(p2)+1;
strcpy(p3,"octet");
int size=2+strlen(p2)+strlen(p3)+2;
sendto(cfd,buf,size,0,(struct sockaddr*)&sin,sizeof(sin));
char ack[4]="";
int fd=-1;
fd=open(buf3,O_RDONLY);
struct sockaddr_in ssin; //临时端口
socklen_t addrlen =sizeof(ssin);
int i=1;
while(1)
{
memset(wbuf,0,sizeof(wbuf));
recvfrom(cfd,wbuf,4,0,(struct sockaddr*)&ssin,&addrlen);
char *p4=wbuf+4;
int ret_val=read(fd,wbuf+4,512);
short *p5=(short *)wbuf;
*p5=htons(3);
short *p6=(short *)(wbuf+2);
*p6=htons(ntohs(*p6)+1);
sendto(cfd,wbuf,sizeof(wbuf),0,(struct sockaddr*)&ssin,sizeof(ssin));
if(ret_val<512)
{
memset(wbuf,0,sizeof(wbuf));
break;
}
}
recvfrom(cfd,wbuf,4,0,(struct sockaddr*)&ssin,&addrlen);
short *p5=(short *)wbuf;
*p5=htons(3);
short *p6=(short *)(wbuf+2);
*p6=htons(ntohs(*p6));
printf("上传成功\n");
close(fd);
close(cfd);
}
5.21作业
最新推荐文章于 2024-09-27 12:05:02 发布