FTP云盘

FTP就是文件传输协议。用于互联网双向传输,控制文件下载空间在服务器复制文件从本地计算机或本地上传文件复制到服务器上的空间。

server

#include <stdio.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
​
​
void choosecmd(char *cmd,int c_fd);
int choose(char * cmd);
char *Fenge(char cmd[128]);
void Putbuf(char cmd[128],int  c_fd);
​
int main(int argc,char **argv)
{int s_fd;int c_fd;char readbuf[128];char msg[128] = {0};
​struct sockaddr_in s_addr;struct sockaddr_in c_addr;
​memset(&s_addr,0,sizeof(struct sockaddr_in));memset(&c_addr,0,sizeof(struct sockaddr_in));
​if(argc != 3){printf("param isn't right\n");}
​//1.sockets_fd = socket(AF_INET,SOCK_STREAM,0);if(s_fd == -1){perror("socked");exit(-1);}
​s_addr.sin_family = AF_INET;s_addr.sin_port = htons(atoi(argv[2]));//s_addr.sin_addr.s_addr = "127.0.0.1";  (error)inet_aton(argv[1],&s_addr.sin_addr);
​//2.bindbind(s_fd, (struct sockaddr *)&s_addr,sizeof(struct sockaddr_in));
​//3.listenlisten(s_fd,10);
​//4.acceptint clen = sizeof(struct sockaddr_in);
​printf("wait connect.....\n");
​while(1){c_fd = accept(s_fd,(struct sockaddr *)&c_addr, &clen);if(c_fd == -1){perror("accept");}printf("get connect:%s\n",inet_ntoa(c_addr.sin_addr));//打印客户端的ip地址,因为是网络格式,我们要转换成字符串格式
​if(fork() > 0){wait(NULL);//fangzhi z+}
​if(fork() == 0){while(1){memset(readbuf,0,sizeof(readbuf));read(c_fd,readbuf,sizeof(readbuf));choosecmd(readbuf,c_fd);//选择你要执行的哪条指令
​}}}
​return 0;
}
​
void Putbuf(char cmd[128],int  c_fd)
{int fd;char *p;char putbuf[8000] = {0};
​p = Fenge(cmd);read(c_fd,putbuf,sizeof(putbuf));
​fd = open(p,O_CREAT|O_RDWR,0600);write(fd,putbuf,sizeof(putbuf));close(fd);memset(putbuf,0,sizeof(putbuf));memset(p,0,sizeof(p));printf("-------------已接收----------\n");
}
​
char *Fenge(char cmd[128])
{char *p;p = strtok(cmd," ");p = strtok(NULL," ");
​return p;
}
​
​
int choose(char * cmd)
{if(!strcmp(cmd,"ls")){return 1;}else if(strstr(cmd,"cd")!=NULL ){return 2;}else if(strstr(cmd,"get")!=NULL ){return 3;}else if(strstr(cmd,"put")!=NULL ){return 4;}if(!strcmp(cmd,"lls")){return 5;}if(!strcmp(cmd,"lcd")){return 6;}if(!strcmp(cmd,"close")){return 7;}
}
​
​
void choosecmd(char *cmd,int c_fd)
{int ret = choose(cmd);//判断该指令是否存在FILE *fd;int fd1;char lsbuf[8000] = {0};char getbuf[8000] = {0};char *p = (char*)malloc(1024);char *p1 = (char*)malloc(1024);
​
​switch(ret){case 1:fd = popen("ls","r");fread(lsbuf,sizeof(lsbuf),1,fd);write(c_fd,lsbuf,sizeof(lsbuf));memset(lsbuf,0,sizeof(lsbuf));printf("----------ls succeed------\n");break;
​case 2:p = Fenge(cmd);chdir(p);//执行到这个目录memset(p,0,sizeof(p));printf("------------进入成功--------\n");break;case 3:p1 = Fenge(cmd);if(access(p1,F_OK) == -1)//判断该文件是否存在{exit(-1);}else{fd1 = open(p1,O_RDWR);read(fd1,getbuf,sizeof(getbuf));write(c_fd,getbuf,sizeof(getbuf));close(fd1);memset(p1,0,sizeof(p1));memset(getbuf,0,sizeof(getbuf));printf("-------------已发送----------\n");}
​break;case 4:Putbuf(cmd,c_fd);break;case 5:printf("------------lls---------\n");break;case 6:printf("------------lcd---------\n");break;case 7:printf("客户端已退出......\n");
​default:break;
​}
}       

client

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
​
​
int choose(char *cmd);
void choosecmd(char *cmd,int c_fd);
char * Fenge(char cmd[128]);
void Putbuf(char cmd[128],int c_fd);
​
int main(int argc,char **argv)
{
​if(argc != 3){printf("error");exit(-1);
​}
​int c_fd;char writebuf[1024] ={0};
​struct sockaddr_in c_addr;memset(&c_addr,0,sizeof(struct sockaddr_in));
​//1.socketc_fd = socket(AF_INET,SOCK_STREAM,0);if(c_fd == -1){perror("socked");exit(-1);}
​c_addr.sin_family = AF_INET;c_addr.sin_port = htons(atoi(argv[2]));//s_addr.sin_addr.s_addr = "127.0.0.1";  //(不是这样写的)inet_aton(argv[1],&c_addr.sin_addr);
​//2.connectif(connect(c_fd,(struct sockaddr *)&c_addr,sizeof(struct sockaddr_in)) == -1){perror("connect");exit(-1);}
​//3.sendwhile(1){memset(writebuf,0,sizeof(writebuf));printf("input:");gets(writebuf);printf("--->:\n");write(c_fd,writebuf,sizeof(writebuf));choosecmd(writebuf,c_fd);
​}
​return 0;
}
​
void Putbuf(char cmd[128],int c_fd)
{int fd;char *p;char putbuf[8000] = {0};p = Fenge(cmd);
​if(access(p,F_OK) == -1)//判断文件是否存在{printf("NO file\n");}else{fd = open(p,O_RDWR,0600);read(fd,putbuf,sizeof(putbuf));write(c_fd,putbuf,sizeof(putbuf));close(fd);memset(putbuf,0,sizeof(putbuf));memset(p,0,sizeof(p));printf("------------上传成功----------\n");}
​
}
​
char * Fenge(char cmd[128])
{char * p;//p = (char *)malloc(1024);p = strtok(cmd," ");p  = strtok(NULL," ");
​return p;
​
}
​
int choose(char cmd[128])
{if(!strcmp(cmd,"ls"))//看服务器的所有文件{return 1;}else if(!strcmp(cmd,"lls"))//看客户端的所有文件{return 2;}else if(strstr(cmd,"lcd")!=NULL)//进入客户端的其他文件目录{
​return 3;}else if(strstr(cmd,"cd")!=NULL)//服务器进入其他文件目录{
​return 4;}else if(strstr(cmd,"get")!=NULL)//下载文件{
​return 5;}else if(strstr(cmd,"put")!=NULL)//上传文件{
​return 6;}if(!strcmp(cmd,"close"))//close server{return 7;}
​
}
​
void choosecmd(char *cmd,int c_fd)
{int fd;int ret = choose(cmd);//判断该指令是否存在char lsbuf[8000] = {0};char getbuf[8000] = {0};char * p = (char *)malloc(128);char * p1 = (char *)malloc(128);switch(ret){
​case 1:read(c_fd,lsbuf,sizeof(lsbuf));printf("%s\n",lsbuf);memset(lsbuf,0,sizeof(lsbuf));break;case 2:system("ls");break;
​
​case 3:p = Fenge(cmd);chdir(p);memset(p,0,sizeof(p));break;case 4:printf("-------------服务器-------------\n");break;case 5:p1 = Fenge(cmd);read(c_fd,getbuf,sizeof(getbuf));fd = open(p1,O_RDWR|O_CREAT,0600);write(fd,getbuf,sizeof(getbuf));close(fd);printf("get success!\n");memset(p1,0,sizeof(p1));memset(getbuf,0,sizeof(getbuf));printf("-------------下载成功--------------\n");break;case 6:Putbuf(cmd,c_fd);break;case 7:close(c_fd);printf("-----------close succeed--------\n");exit(0);default:printf("input error!\n");break;
​}
​
}           

Linux网络编程--FTP云盘项目相关推荐

  1. Linux网络编程——socket、bind、listen、accpet、connect、read和write

    Linux网络编程 基础理论 1.TCP/UDP/端口号 2.字节序 一.socket服务器与客户端的开发步骤 二.具体使用步骤 1.socket(创建连接协议) 2.bind(地址准备好) 3.li ...

  2. Linux网络编程-七

    Linux网络编程-七 web服务器项目 1 web服务器开发准备 1.1 Html语言基础(和Markdown一个性质,某些程度上和Markdown通用,所以我在编辑的时候在<>里都加了 ...

  3. Linux C 网络编程 仿照网盘的功能

    Linux C 网络编程 仿照网盘的功能 代码: gitbub 代码,欢迎下载测试 使用概述 启动 server-> make;./server ../conf/serverconf.ini c ...

  4. linux环境编程 百度云,linux环境下使用百度云网盘

    linux环境下使用百度云网盘 linux下经常需要备份一些文件到云端,现在能用的也就只有度娘的百度云网盘了,在github上发现一个挺好的项目,bypy,用来在linux下使用百度云. 项目地址:h ...

  5. linux FTP云盘

    目录 一 FTP 云盘 基本指令 ls ----->客户端 实现 cd ------ 切换路径 cat -------- 查看文件内容 get /put -------------获取服务器数据 ...

  6. Linux网络编程——千峰物联网笔记

    B站视频:千峰物联网学科linux网络编程 网址:https://www.bilibili.com/video/BV1RJ411B761?p=1 目录 第一章:计算机网络概述 1.1计算机网络发展简史 ...

  7. 视频教程-C++微服务架构及安全云盘项目实训-C/C++

    C++微服务架构及安全云盘项目实训 夏曹俊:南京捷帝科技有限公司创始人,南京大学计算机硕士毕业,有15年c++跨平台项目研发的经验,领导开发过大量的c++虚拟仿真,计算机视觉,嵌入式图像处理,云安全审 ...

  8. Linux网络编程基础

    2019独角兽企业重金招聘Python工程师标准>>> (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍 客户端和服务端 网络程序和普通的程序有一个最大的 ...

  9. Linux网络编程入门

    (一)Linux网络编程--网络知识介绍 linux网络编程--网络知识介绍 客户端和服务端          网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. ...

最新文章

  1. 2020 AI DEBATE即将召开, Judea Pearl、李飞飞等10多位顶级科学家参与 | AI日报
  2. 汇编语言_实验九_根据材料编程
  3. Spark通过YARN提交任务不成功(包含YARN cluster和YARN client)
  4. 嵌入式linux 添加中断,《嵌入式linux应用程序开发完全手册》中断控制器操作(外部中断)学习笔记...
  5. UIPopoverController的使用
  6. 1-冒泡排序C实现(递增递减的简单转换)
  7. mac macaca android,[求助] mac 上安装 macaca 的问题
  8. 串口如何接收数据_原创分享 | S71200通过串口服务器读取MODBUS RTU设备
  9. Kickstart+HTTP+DHCP+TFTP全自动批量安装部署Linux系统
  10. python怎么读取csv文件-python如何读取csv数据
  11. php将excel日期转成时间戳,使用PHP将Excel日期编号转换为Unix时间戳时不匹配
  12. 基于FVC_MSAVI_EVI的荒漠化等级分类方法
  13. php高并发解决方案
  14. uniapp开发微信公众号(支付宝支付)
  15. android 空气质量代码,Android-Json数据解析之空气质量检测
  16. 天正CAD启动时显示服务器名称为空,如何解决天正建筑2014启动时出现error
  17. 怎么用计算机做目录,word目录怎么自动生成详细教程
  18. 国际市场营销知识框架图_留学热门丨伦敦里士满大学市场营销本科专业
  19. xcb basics
  20. vcf格式(vCard)转成excel的操作方法

热门文章

  1. 奔跑的蜗牛 · 没头的苍蝇
  2. 【04-JVM面试专题-什么是双亲委派机制(父类委托机制)?如何打破双亲委派机制?双亲委派机制的优缺点?什么是沙箱安全机制呢?】
  3. 页面支持简体和繁体语言的js库
  4. SA-SSD那点事儿
  5. 触控Intel强强联手:多维提升游戏体验
  6. 爬虫漫游指南:加速乐__jsl_clearance破解
  7. java中gridlayout合并,java布局之GridLayout
  8. linux dd新建虚拟硬盘,使用 losetup 帮你创建虚拟磁盘
  9. 智迪科技在创业板上市:市值约31亿元,谢伟明和黎柏松为实控人
  10. 下载好听轻音乐之Media