网络文件传输工具 具有五大功能(list cd mkdir put get(TCP/UDP)传输)

14 篇文章 0 订阅
4 篇文章 0 订阅

客户端

#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <getch.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>


int tcp();
int udp();
int ls();
int madir();
int udp_do();

int main()
{
	while(1)
	{
	char buf;
	printf("服务器创建socket...\n");
	int sockfd = socket(AF_INET,SOCK_STREAM,0);
	if(0 > sockfd)
	{
		perror("socket");
		return -1;
	}

	printf("准备地址...\n");
	struct sockaddr_in addr = {};
	addr.sin_family = AF_INET;
	addr.sin_port = htons(7922);
	addr.sin_addr.s_addr = inet_addr("10.0.2.15");
	socklen_t len = sizeof(addr);

	printf("连接服务器...\n");
	if(connect(sockfd,(struct sockaddr*)&addr,len))
	{
		perror("connect");
		return -1;
	}	
	for(;;)
	{
	printf("选择功能:1、TCP上传 2、UDP上传 3、ls 4、mkdir 5、DUP下载\n");
	scanf("%c",&buf);
	write(sockfd,&buf,2);
	switch (buf)
	{
		case '1' : tcp();break;
		case '2' : udp();break;
		case '3' : ls();break;
		case '4' : madir();break;
		case '5' :udp_do();break;
	}
	}
	close(sockfd);
	printf("关闭套接字\n");
	}
}

int udp()
{
	
	char buf[1024] ={};
	char file[30]={};
	int k;
	int sockfd=socket(AF_INET,SOCK_DGRAM,0);
	printf("创建成功\n");

	struct sockaddr_in addr={};
	addr.sin_family = AF_INET;
	addr.sin_port = htons(7798);
	addr.sin_addr.s_addr = inet_addr("10.0.2.15");
		int len = sizeof(struct sockaddr_in);
		struct sockaddr_in dest={};	
				printf("输入文件名称\n");
				scanf("%s",file);
				sendto(sockfd,file,strlen(file)+1,0,(struct sockaddr*)&addr,len);
				int fd = open(file,O_RDONLY);
				if(fd<0)
				{
					printf("创建失败");
					return -1;
				}
				k = lseek(fd,0,SEEK_END);
				printf("%d",k);
			lseek(fd,0,SEEK_SET);
				read(fd,buf,k);
				sendto(sockfd,buf,strlen(buf)+1,0,(struct sockaddr*)&addr,len);
			printf("传输成功");
		
		close(fd);
		
		close(sockfd);
	
}

int tcp()
{
	
	char buf[4096] ={};
	char file[30]={};
	int k;
	int sockfd=socket(AF_INET,SOCK_STREAM,0);
	printf("创建成功\n");

	struct sockaddr_in add={};
	add.sin_family = AF_INET;
	add.sin_port = htons(9899);
	add.sin_addr.s_addr = inet_addr("10.0.2.15");
	int len = sizeof(struct sockaddr_in);	
	if(connect(sockfd,(struct sockaddr*)&add,len))
		{
			perror("bind");
			return -1;
		}

		struct sockaddr_in dest ={};
				printf("输入文件名称\n");
				scanf("%s",file);
				send(sockfd,file,strlen(file)+1,0);
				int fd = open(file,O_RDONLY);
				if(fd<0)
				{
					printf("创建失败");
					return -1;
				}
				k = lseek(fd,0,SEEK_END);
				printf("%d",k);
				lseek(fd,0,SEEK_SET);
				read(fd,buf,k);
				send(sockfd,buf,strlen(buf)+1,0);
				printf("传输成功");
		close(fd);
		close(sockfd);
	
}

int ls()
{
	
	char buf[4096] ={};
	char file[30]={};
	int sockfd=socket(AF_INET,SOCK_DGRAM,0);
	printf("创建成功\n");
	struct sockaddr_in addr={};
	addr.sin_family = AF_INET;
	addr.sin_port = htons(7941);
	addr.sin_addr.s_addr = inet_addr("10.0.2.15");
		int len = sizeof(struct sockaddr_in);
		struct sockaddr_in dest={};
		printf("输入命令\n");
		printf("ls  显示目录\n");
		printf("cd   返回上一层\n");
		printf("vi   进入目录\n");
		scanf("%s",file);
		if(0 == strcmp("vi",file))
		{
			sendto(sockfd,file,strlen(file)+1,0,(struct sockaddr*)&addr,len);
			printf("请输入你要进入的文件夹~\n");
			scanf("%s",buf);
			sendto(sockfd,buf,strlen(buf)+1,0,(struct sockaddr*)&addr,len);
			printf("等待~\n");
			sleep(2);
			goto loop;
		}
		sendto(sockfd,file,strlen(file)+1,0,(struct sockaddr*)&addr,len);
		recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&dest,&len);
		puts(buf);
loop:
		printf("完毕\n");
		close(sockfd);	
}


int udp_do()
{
	
	char file[30]={};
	int sockfd=socket(AF_INET,SOCK_DGRAM,0);
	printf("创建成功\n");

	struct sockaddr_in addr={};
	addr.sin_family = AF_INET;
	addr.sin_port = htons(8765);
	addr.sin_addr.s_addr = inet_addr("10.0.2.15");
		int len = sizeof(struct sockaddr_in);
		struct sockaddr_in dest={};	
				printf("请输入要下载的文件\n");
				scanf("%s",file);
				sendto(sockfd,file,strlen(file)+1,0,(struct sockaddr*)&addr,len);
				int fd = open(file,O_RDWR|O_CREAT,0644);
				
				if(fd<0)
				{
					printf("创建失败");
					return -1;
				}

		char buf[4096] ={};
		int k = recvfrom(sockfd,buf,sizeof(buf)-1,0,(struct sockaddr*)&dest,&len);
		printf("%d\n",k);
		write(fd,buf,k);
		printf("传输成功\n");
			close(fd);
		close(sockfd);
	
}

int madir()
{
	char buf[30]={};
	printf("服务器创建socket...\n");
	int sockfd = socket(AF_INET,SOCK_STREAM,0);
	if(0 > sockfd)
	{
		perror("socket");
		return -1;
	}

	printf("准备地址...\n");
	struct sockaddr_in addr = {};
	addr.sin_family = AF_INET;
	addr.sin_port = htons(7346);
	addr.sin_addr.s_addr = inet_addr("10.0.2.15");
	socklen_t len = sizeof(addr);

	printf("连接服务器...\n");
	if(connect(sockfd,(struct sockaddr*)&addr,len))
	{
		perror("connect");
		return -1;
	}
	printf("请输入你要创建的文件名\n");
	scanf("%s",buf);
	write(sockfd,buf,strlen(buf)+1);
	printf("发送成功\n");
}

服务端

#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <getch.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <time.h>

int tcp();
int udp();
int ls();
int madir();
int udp_do();

int main()
{
	while(1)
	{
	char buf;
	printf("服务器创建socket...\n");
	int sockfd = socket(AF_INET,SOCK_STREAM,0);
	if(0 > sockfd)
	{
		perror("socket");
		return -1;
	}

	printf("准备地址...\n");
	struct sockaddr_in addr = {};
	addr.sin_family = AF_INET;
	addr.sin_port = htons(7922);
	addr.sin_addr.s_addr = inet_addr("10.0.2.15");
	socklen_t len = sizeof(addr);

	printf("绑定socket与地址...\n");
	if(bind(sockfd,(struct sockaddr*)&addr,len))
	{
		perror("bind");
		return -1;
	}
	printf("设置监听...\n");
	if(listen(sockfd,1))
	{
		perror("listen");
		return -1;
	}

	printf("等待客户端连接...\n");
		struct sockaddr_in addrcli = {};
		int clifd = accept(sockfd,(struct sockaddr*)&addrcli,&len);
		if(0 > clifd)
		{
			perror("accept");
			continue;
		}
	for(;;)
	{
	read(clifd,&buf,sizeof(buf));


//	printf("选择传输协议:1、TCP 2、UDP 3、ls 4、madir 5、UDP上传\n");
	switch (buf)
	{
		case '1' : tcp();break;
		case '2' : udp();break;
		case '3' : ls();break;
		case '4' : madir();break;
		case '5' :udp_do();break;
	}
	}
	close(clifd);
	}
}

int udp()
{
	int sockfd=socket(AF_INET,SOCK_DGRAM,0);
	if(0 > sockfd)
	{
		perror("socket");
		return -1;
	}
	printf("创建成功\n");

	struct sockaddr_in addr={};
	addr.sin_family = AF_INET;
	addr.sin_port = htons(7798);
	addr.sin_addr.s_addr = inet_addr("10.0.2.15");
	int len = sizeof(struct sockaddr_in);

	printf("开始绑定\n");
	if(bind(sockfd,(struct sockaddr*)&addr,len))
	{
		perror("bind\n");
		return -1;
	}
	char file[30]={};


	printf("开始传输\n");
	struct sockaddr_in dest={};
	recvfrom(sockfd,file,sizeof(file),0,(struct sockaddr*)&dest,&len);
	printf("收到文件名%s\n",file);

	int fd = open(file,O_RDWR|O_CREAT,0644);
	if(fd<0)
	{
		printf("创建失败\n");
		return -1;
	}
	
	char buf[1024] ={};
	int k = recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&dest,&len);
	printf("%d\n",k);
	write(fd,buf,k);
	printf("传输成功\n");
	close(fd);
	close(sockfd);
	
}

int tcp()
{
	
	char buf[4096] ={};
	char file[30]={};
	int k;
	int sockfd=socket(AF_INET,SOCK_STREAM,0);
	printf("创建成功\n");

	struct sockaddr_in add={};
	add.sin_family = AF_INET;
	add.sin_port = htons(9899);
	add.sin_addr.s_addr = inet_addr("10.0.2.15");
	int len = sizeof(struct sockaddr_in);

	if(bind(sockfd,(struct sockaddr*)&add,len))
	{
		perror("bind");
		return -1;
	}
	printf("绑定成功\n");
	if(listen(sockfd,1))
	{
		perror("listen");
		return -1;
	}	
	
	struct sockaddr_in dest={};
	int clifd = accept(sockfd,(struct sockaddr*)&dest,&len);
		if(0>clifd)
		{
			perror("accept");
			return -1;
		}
				
				k =	recv(clifd,file,sizeof(file),0);
				int fd = open(file,O_RDWR|O_CREAT,0644);
				if(fd<0)
				{
					printf("创建失败");
					return -1;
				}
				k = recv(clifd,buf,sizeof(buf),0);
				printf("%d\n",k);
				write(fd,buf,k);
				printf("传输成功");
		close(fd);
		close(clifd);
	
}

int ls()
{
	int sockfd=socket(AF_INET,SOCK_DGRAM,0);
	if(0 > sockfd)
	{
		perror("socket");
		return -1;
	}
	printf("创建成功\n");

	struct sockaddr_in addr={};
	addr.sin_family = AF_INET;
	addr.sin_port = htons(7941);
	addr.sin_addr.s_addr = inet_addr("10.0.2.15");
	int len = sizeof(struct sockaddr_in);

	printf("开始绑定\n");
	if(bind(sockfd,(struct sockaddr*)&addr,len))
	{
		perror("bind\n");
		return -1;
	}
	char file[30]={};
	char buf[4096] ={};
	char path[20]={};
	printf("开始传输\n");
	struct sockaddr_in dest={};
	recvfrom(sockfd,file,sizeof(file),0,(struct sockaddr*)&dest,&len);
	if(0 == strcmp("ls",file))
	{
		DIR* dp = opendir(".");
		if(NULL == dp)
		{
			perror("opendir");
			return -1;
		}
		struct dirent* de = readdir(dp);
		for(de; NULL!=de;de=readdir(dp))
		{
			 strcat(buf,de->d_name);
			 strcat(buf,"\n");
		}
	    sendto(sockfd,buf,strlen(buf)+1,0,(struct sockaddr*)&dest,len);
		printf("发送成功\n");
	}
	if(0 == strcmp("cd",file))
	{
		chdir("..");
		sprintf(buf,"已返回上一层~\n");
		sendto(sockfd,buf,strlen(buf)+1,0,(struct sockaddr*)&dest,len);
	}
	if(0 == strcmp("vi",file))
	{
		printf("--------------------\n");
		recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&dest,&len);
		strcpy(path,"./");
		strcat(path,buf);
		printf("%s\n",path);
		chdir(path);
	}
	close(sockfd);	
}

int udp_do()
{
	int sockfd=socket(AF_INET,SOCK_DGRAM,0);
	if(0 > sockfd)
	{
		perror("socket");
		return -1;
	}
	printf("创建成功\n");

	struct sockaddr_in addr={};
	addr.sin_family = AF_INET;
	addr.sin_port = htons(8765);
	addr.sin_addr.s_addr = inet_addr("10.0.2.15");
	int len = sizeof(struct sockaddr_in);

	printf("开始绑定\n");
	if(bind(sockfd,(struct sockaddr*)&addr,len))
	{
		perror("bind\n");
		return -1;
	}
	char file[30]={};


	printf("开始传输\n");
	struct sockaddr_in dest={};
	recvfrom(sockfd,file,sizeof(file),0,(struct sockaddr*)&dest,&len);
	int fd = open(file,O_RDONLY);
	if(fd<0)
	{
		printf("创建失败\n");
		return -1;
	}
	
				char buf[4096] ={};
				int	k = lseek(fd,0,SEEK_END);
				printf("%d\n",k);
				lseek(fd,0,SEEK_SET);
				read(fd,buf,k);
	k=sendto(sockfd,buf,strlen(buf)+1,0,(struct sockaddr*)&dest,len);
	printf("%d\n",k);
	printf("发送成功\n");
	close(fd);
	close(sockfd);
	
}

int madir()
{
	char buf[30]={};
	printf("服务器创建socket...\n");
	int sockfd = socket(AF_INET,SOCK_STREAM,0);
	if(0 > sockfd)
	{
		perror("socket");
		return -1;
	}

	printf("准备地址...\n");
	struct sockaddr_in addr = {};
	addr.sin_family = AF_INET;
	addr.sin_port = htons(7346);
	addr.sin_addr.s_addr = inet_addr("10.0.2.15");
	socklen_t len = sizeof(addr);

	printf("绑定socket与地址...\n");
	if(bind(sockfd,(struct sockaddr*)&addr,len))
	{
		perror("bind");
		return -1;
	}

	printf("设置监听...\n");
	if(listen(sockfd,5))
	{
		perror("listen");
		return -1;
	}

	printf("等待客户端连接...\n");

		struct sockaddr_in addrcli = {};
		int clifd = accept(sockfd,(struct sockaddr*)&addrcli,&len);
		if(0 > clifd)
		{
			perror("accept");
		}
	read(clifd,buf,sizeof(buf));
	int k=mkdir(buf,0777);
	if(k<0)
	{
		printf("创建失败~\n");
		return -1;
	}
	if(0 == k)
	{
		printf("创建成功~\n");	
	}		
		
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值