client

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <assert.h>
#include <errno.h>
#include <sys/sendfile.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int CreatSock(){
int sockfd=socket(AF_INET,SOCK_STREAM,0);
assert(sockfd!=-1);
struct sockaddr_in addr;

addr.sin_family=AF_INET;
addr.sin_port=htons(20021);
addr.sin_addr.s_addr=inet_addr("192.168.192.128");

//     addr.sin_addr = *((struct in_addr *)host->h_addr);


int res=connect(sockfd,(struct sockaddr*)&addr,sizeof(addr));
assert(res!=-1);
//	printf("连接成功\n");
return sockfd;

}
void DoList(int sockfd){
char command[128]={0};
fgets(command,128,stdin);
int length=strlen(command);
send(sockfd,&length,4,0);//向服务端发送命令长度
command[strlen(command)-1]=0;
send(sockfd,command,128,0);//向服务端发送 命令get filename
char buff[1024]={0};
recv(sockfd,buff,1024,0);
printf(“命令的执行结果是:\n%s”,buff);

}

int getfile(int sockfd){
char command[128]={0};
fgets(command,128,stdin);
if(strncmp(command,"get ",4)!=0 ){
printf(“请按照get filename格式输入命令\n”);
return -1;

}


int length=strlen(command);
send(sockfd,&length,4,0);//向服务端发送命令长度


command[strlen(command)-1]=0;
send(sockfd,command,128,0);//向服务端发送 命令get  filename

char p[1024]={0};
recv(sockfd,p,20,0);
printf("%s\n",p);
   // printf("bucunzi \n");
if(strcmp(p,"file does not exist")==0){
	printf("文件不存在,请重新输入\n"); 
	return 0;

}	
memset(p,0,sizeof(p));

char *name=strtok(command," ");
int n=0;
recv(sockfd,&n,4,0);

// printf(“wen jian da xaio\n”);
printf(“文件的大小:%d\n”,n);

name=strtok(NULL," ");//切割函数,name就是要下载的  filename
int fd=open(name,O_CREAT|O_WRONLY,0777);//打开或创建  name
printf("new file:  %s\n",name);
int count=n%1024;
int num=count+1;	
while(count!=num){


	num=recv(sockfd,p,1024,0);//接收服务端的  file文件数据

	int f=write(fd,p,num);//像客户端的 文件描述符  写数据

	printf("写文件: %d\n",f);
}
//close(sockfd);

return 1;	

}
int main(){
int sockfd=CreatSock();
int choice=0;
while(1){
printf("-------------------\n");
printf("1 服务器文件查询\n ");
printf(“2 get file\n”);
printf(“3 退出\n”);

	printf("输入对应选项的序号\n");
	scanf("%d",&choice);
	getchar();
	switch(choice){
		case 1:
			DoList(sockfd);
			break;
		case 2:

			getfile(sockfd);
			break;

		case 3:
			printf("客户端关闭\n");
			close(sockfd);			

			exit(1);

	}

}
close(sockfd);
printf("客户端关闭\n");
return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值