交叉编译----FTP云盘项目

用交叉编译把client.c 编译成client的可执行文件,发送给树莓派

先打开服务端

 

 再打开客户端

 可以输入一些指令

也可以把文件传到乌班图,图中我传的是hello.c
再开个终端查看

 

服务器代码


#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;
}


版权声明:本文为Paradise_Violet原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。