FTP云盘项目

服务端代码:

服务端

#include<stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <arpa/inet.h>
#include<netinet/in.h>
#include<stdlib.h>
#include <unistd.h>
#include<string.h>
#include <sys/stat.h>
#include <fcntl.h>

int change(char cmd[128])
{
	if(!strcmp("ls",cmd))		{   return 1;}		
	else if(!strcmp("ps",cmd))	{   return 2;}
	else if(strstr(cmd,"cd")!=NULL)	{   return 3;}
	else if(!strcmp("g",cmd))	{   return 4;}				   
	else if(strstr(cmd,"get")!=NULL){   return 5;} 
	else if(strstr(cmd,"put")!=NULL){   return 6;}
			
}
char *getbehind(char cmd[128])
{	
	char *p;
	p = (char *)malloc(128);
	p  = strtok(cmd," ");
	p = strtok(NULL," ");

	return p;

}

void getmessage(char cmd[128],int cfd)
{

        char readbuf[8000];
        char *p=getbehind(cmd);
        read(cfd,readbuf,8000);
        int fd = open(p,O_RDWR|O_CREAT,0666);

        write(fd,readbuf,strlen(readbuf));
        printf("receive successfully\n");
        close(fd);
        memset(readbuf,0,8000);




}










void choosecmd(char cmd[128],int c_fd)
{
	int sfd;
	FILE *fdb;
	char *readbuf = (char*)malloc(128);	
	char freadbuf[128];
	char *p = (char *)malloc(8000);
	int ret; 
	   ret	= change(cmd);
	switch(ret){
		


		case 1:
			fdb =  popen("ls", "r");
		fread(freadbuf,sizeof(freadbuf),1,fdb);
		write(c_fd,freadbuf,sizeof(freadbuf));
			memset(freadbuf,0,sizeof(freadbuf));	
			printf("ok\n");
				break;
		case 2: 
			system("ps");
			break;	
		
		case 3:
			p = getbehind(cmd);
			chdir(p);
			memset(p,0,sizeof(p));
			break;
		case 4:
			read(c_fd,freadbuf,128);
			printf("%s\n",freadbuf);
			exit(1);
			break;
	
		case 5:
			readbuf  = getbehind(cmd);
               	if(access(readbuf,F_OK) == -1){

				 write(c_fd,"NO file",strlen("NO file"));
			}
                      else{
				sfd = open(readbuf,O_RDWR,0666);
                                read(sfd,p,8000);
                                write(c_fd,p,strlen(p));
                                close(sfd);
                                memset(p,0,8000);
					}
                                break;
        			
		case 6:  	
				getmessage(cmd,c_fd);
				break;
	

			}

}



int main(int argc,char **argv)
{
//socket
	
	 struct sockaddr_in s_addr;
	struct sockaddr_in c_addr;

	char Writebuf[128];
	char Readbuf[128];
	int nread;
	int clen;
	int s_fd;
	int c_fd;

	 s_fd =  socket(AF_INET, SOCK_STREAM,0);
	
	if(s_fd == -1){
			
				perror("socket");
				exit(-1);
			
				}


	if(argc!=3){
				
		
				perror("argc");
				exit(0);
			}


	memset(&s_addr,0,sizeof(struct sockaddr_in));
	s_addr.sin_family = AF_INET;
	s_addr.sin_port = htons(atoi(argv[2]));
	inet_aton(argv[1],&s_addr.sin_addr);

//bind

	bind(s_fd,(struct sockaddr *)&s_addr,sizeof(struct sockaddr_in));


//listen

	listen(s_fd,10);

//accept
	printf("wait connecting\n");


	memset(&c_addr,0,sizeof(struct sockaddr_in));
	
	clen = sizeof(struct sockaddr_in);
	
while(1){
	c_fd = accept(s_fd,(struct sockaddr *)&c_addr,&clen);

	if(c_fd == -1){
				perror("accept");
					exit(-1);
					}



	printf("connect,%s\n",inet_ntoa(c_addr.sin_addr));
//read
	if(fork() == 0){
       						 
		while(1){
		
      		 nread = read(c_fd, Readbuf,128);
		
			choosecmd(Readbuf,c_fd);
   	//	printf("nread:%d,get from IP context:%s\n",nread,Readbuf);

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

				
	}
	return 0;
}

客户端代码:

客户端代码:
#include<stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <arpa/inet.h>
#include<netinet/in.h>
#include<stdlib.h>
#include <unistd.h>
#include<string.h>
#include <sys/stat.h>
#include <fcntl.h>


int change(char cmd[128])
{
	     if(!strcmp("lls",cmd))		{  return 1;}
	else if(strstr(cmd,"lcd")!=NULL)	{  return 2;}
	else if(!strcmp("g",cmd))		{  return 3;}

	else if(!strcmp("ls",cmd))              {  return 4;}
        else if(strstr(cmd,"cd")!=NULL)         {  return 5;}
	else if(strstr(cmd,"get")!=NULL)	{  return 6;}     
	else if(strstr(cmd,"put")!=NULL)        {  return 7;}

}              

char *getbehind(char cmd[128])
{
        char *p;
        p = (char *)malloc(128);
        p  = strtok(cmd," ");
        p = strtok(NULL," ");

        return p;

}

void getmessage(char cmd[128],int cfd)
{
	
	char readbuf[8000];
        char *p=getbehind(cmd);
	read(cfd,readbuf,8000);
	if(strlen(readbuf) != strlen("NO file")){
        int fd = open(p,O_RDWR|O_CREAT,0666);

        write(fd,readbuf,strlen(readbuf));
	printf("receive successfully\n");
        close(fd);
	memset(readbuf,0,8000);
	}
	else{
		printf("NO file\n");
			}

}
void putmessage(char cmd[128],int c_fd)
{
		int sfd;
	        char *p = (char *)malloc(8000);
		 memset(p,0,8000);

		 char *readbuf = (char *)malloc(128);
			readbuf = getbehind(cmd);

                	if(access(readbuf,F_OK) == -1){
				printf("No file\n");
                        }
                     	 else{
                                sfd = open(readbuf,O_RDWR,0666);
                                read(sfd,p,8000);
                                write(c_fd,p,strlen(p));
                                close(sfd);
                                memset(p,0,8000);
                                        }

}

void choosecmd(char cmd[128],int c_fd)
{

        FILE *fdb;
        int ret = change(cmd);
        char freadbuf[128];
        char *p = (char *)malloc(8000);

        switch(ret){
		case 1: 
			system("ls");
			break;

		case 2:
			p = getbehind(cmd);
                        chdir(p);
                        memset(p,0,8000);
			break;
			
		case 3: 
		
			printf("unconnecting\n");
			write(c_fd,"away host",128);
			close(c_fd);
			exit(-1);
			
			break;
		case 4:	
		
			read(c_fd,p,1024);
                	printf("%s\n",p);                       
                        memset(p,0,1024);
		
                       
			 break;
		case 5:
			printf("host folder open or exit successful\n");
			break;	
			
		case 6: 
			 getmessage(cmd,c_fd);
                         break;


		case 7:  putmessage(cmd,c_fd);
			 break;
		}
}

//       int socket(int domain, int type, int protocol);
int main(int argc,char **argv)
{
//socket
		
	char Readbuf[1024];
	char Writebuf[128];
	struct sockaddr_in c_addr;
	int clent;
	int c_fd;
	int nread;
	char buf[256];
	if(argc != 3){
			perror("argc");
			exit(1);
				}

	
	 c_fd =  socket(AF_INET, SOCK_STREAM,0);
	if(c_fd == -1){
			
				perror("socket");
				exit(-1);
			
				}


	memset(&c_addr,0,sizeof(struct sockaddr_in));


	c_addr.sin_family = AF_INET;
	c_addr.sin_port = htons(atoi(argv[2]));
	inet_aton(argv[1],&c_addr.sin_addr);
//connect
//	int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
	clent = sizeof(struct sockaddr_in);
	if(connect(c_fd,(struct sockaddr *)&c_addr,clent)){
				
				perror("connect");
				exit(-1);
				}
//write send
		printf("connect...\n");
	while(1){

			
					
					gets(Writebuf);
                                        printf("cmd:%s\n",Writebuf);

		
					write(c_fd,Writebuf,strlen(Writebuf));
					choosecmd(Writebuf,c_fd);
				printf("************************cmd**********************\n");
				
						
					   memset(Writebuf,0,strlen(Writebuf));



	}
				
	
	
	
	return 0;
}
所需.h头文件
#include<stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <arpa/inet.h>
#include<netinet/in.h>
#include<stdlib.h>
#include <unistd.h>
#include<string.h>
#include <sys/stat.h>
#include <fcntl.h>

int change(char cmd[128])
{
	if(!strcmp("ls",cmd))		{   return 1;}		
	else if(!strcmp("ps",cmd))	{   return 2;}
	else if(strstr(cmd,"cd")!=NULL)	{   return 3;}
	else if(!strcmp("g",cmd))	{   return 4;}				   
	else if(strstr(cmd,"get")!=NULL){   return 5;} 
	else if(strstr(cmd,"put")!=NULL){   return 6;}
			
}
char *getbehind(char cmd[128])
{	
	char *p;
	p = (char *)malloc(128);
	p  = strtok(cmd," ");
	p = strtok(NULL," ");

	return p;

}

void getmessage(char cmd[128],int cfd)
{

        char readbuf[8000];
        char *p=getbehind(cmd);
        read(cfd,readbuf,8000);
        int fd = open(p,O_RDWR|O_CREAT,0666);

        write(fd,readbuf,strlen(readbuf));
        printf("receive successfully\n");
        close(fd);
        memset(readbuf,0,8000);




}










void choosecmd(char cmd[128],int c_fd)
{
	int sfd;
	FILE *fdb;
	char *readbuf = (char*)malloc(128);	
	char freadbuf[128];
	char *p = (char *)malloc(8000);
	int ret; 
	   ret	= change(cmd);
	switch(ret){
		


		case 1:
			fdb =  popen("ls", "r");
		fread(freadbuf,sizeof(freadbuf),1,fdb);
		write(c_fd,freadbuf,sizeof(freadbuf));
			memset(freadbuf,0,sizeof(freadbuf));	
			printf("ok\n");
				break;
		case 2: 
			system("ps");
			break;	
		
		case 3:
			p = getbehind(cmd);
			chdir(p);
			memset(p,0,sizeof(p));
			break;
		case 4:
			read(c_fd,freadbuf,128);
			printf("%s\n",freadbuf);
			exit(1);
			break;
	
		case 5:
			readbuf  = getbehind(cmd);
               	if(access(readbuf,F_OK) == -1){

				 write(c_fd,"NO file",strlen("NO file"));
			}
                      else{
				sfd = open(readbuf,O_RDWR,0666);
                                read(sfd,p,8000);
                                write(c_fd,p,strlen(p));
                                close(sfd);
                                memset(p,0,8000);
					}
                                break;
        			
		case 6:  	
				getmessage(cmd,c_fd);
				break;
	

			}

}



int main(int argc,char **argv)
{
//socket
	
	 struct sockaddr_in s_addr;
	struct sockaddr_in c_addr;

	char Writebuf[128];
	char Readbuf[128];
	int nread;
	int clen;
	int s_fd;
	int c_fd;

	 s_fd =  socket(AF_INET, SOCK_STREAM,0);
	
	if(s_fd == -1){
			
				perror("socket");
				exit(-1);
			
				}


	if(argc!=3){
				
		
				perror("argc");
				exit(0);
			}


	memset(&s_addr,0,sizeof(struct sockaddr_in));
	s_addr.sin_family = AF_INET;
	s_addr.sin_port = htons(atoi(argv[2]));
	inet_aton(argv[1],&s_addr.sin_addr);

//bind

	bind(s_fd,(struct sockaddr *)&s_addr,sizeof(struct sockaddr_in));


//listen

	listen(s_fd,10);

//accept
	printf("wait connecting\n");


	memset(&c_addr,0,sizeof(struct sockaddr_in));
	
	clen = sizeof(struct sockaddr_in);
	
while(1){
	c_fd = accept(s_fd,(struct sockaddr *)&c_addr,&clen);

	if(c_fd == -1){
				perror("accept");
					exit(-1);
					}



	printf("connect,%s\n",inet_ntoa(c_addr.sin_addr));
//read
	if(fork() == 0){
       						 
		while(1){
		
      		 nread = read(c_fd, Readbuf,128);
		
			choosecmd(Readbuf,c_fd);
   	//	printf("nread:%d,get from IP context:%s\n",nread,Readbuf);

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

				
	}
	return 0;
}

功能:实现在局域网里收发文件
ls:查看当前文件
lls:查看服务器文件
cd+空格+文件名(…),服务器进入文件夹或返回上一级
lcd+空格+文件名(…),本地进入文件夹或返回上一级
get+空格+文件名:得到服务器文件
put+空格+文件名: 发送给服务器

师从江江编程(江兴畿),畿你太美 噢噢 baby    你干嘛~嗨嗨~哎呦

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arranh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值