FTP的简单项目实现

本文介绍了一个FTP项目的实现,包括基本功能如ls, get, put, cd, quit操作,以及高级功能如用户名密码验证、MD5校验和历史记录。项目中,服务端和客户端通过TCP建立连接,客户端输入命令,服务端执行并反馈。通过结构体传递信息,使用命令枚举、popen、chdir、get_md5等函数。此外,还实现了用户认证和历史记录存储在链表中,增强了FTP的安全性和实用性。" 104955726,5548455,Kolla-Ansible部署OpenStack Ocata:Ceph OSD启动失败原因分析,"['OpenStack', 'Ceph', 'Kolla', 'Ansible', '存储部署']
摘要由CSDN通过智能技术生成

概念:文件传输协议(FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证。FTP允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。然而, 用户并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用FTP程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式。
项目简介:
1.基本功能:实现实现ls,get,put,cd,quit操作。
2.高级功能:实现用户名密码验证,传输文件的md5校验,查看历史记录等功能。
项目实现流程:
1.构建服务端以及客户端,采用动态输入端口号。
服务端:
1.1.socket函数:套接字(设置TCP/UDP)
1.2.bind函数:IP号端口号与相应描述字赋值函数。
1.3listen函数:监听设置函数;
1.4accept函数:连接。
客户端:
1.1socket函数;
1.2connect函数;
2.构建日志模块。
功能:用于存放调试信息,以便及时查错,进行针对性修改。

  #include "log.h"
  #include <stdio.h>
  #include <string.h>
  #include <stdlib.h>
  #include <sys/types.h>
  #include <unistd.h>
  #include <stdarg.h>
   
   FILE *fd = NULL;
  void log_open(char *buf) {
      fd = fopen(buf, "a+");
      if (fd == NULL) {
          printf("打开失败\n");
          exit(-1);
      }
  } 
     void log_write(const char *pszFormat, ...) {
      va_list args;
      va_start(args, pszFormat);
      vfprintf(fd, pszFormat, args);
      va_end(args);
      fflush(fd);
  }   
   void log_close() {
     fclose(fd);
 }   


3.功能实现。
客户端成功连接服务端后,即可对服务端文件进行远程操作。客户端通过键盘输入命令,告知服务端我想要进行什么样的操作,服务端收到后,进行相关操作,并将相关信息反馈给客户端。简单来说服务端不断的读取来自客户端的命令,收到命令后去进行相关操作,然后再发送回客户端。客户端则不断检测用户是否输入命令,当输入命令后,将相关信息发送给服务端,然后读取服务端反馈回来的信息。
这个不断在两端进行收发的信息,我们用结构体定义,因为其内部参数较多。



struct Msg{
 20     //命令get
 21     enum FTP_CMD cmd;
 22 
 23     //命令的参数 get test.c
 24      char args[32];
 25 ....
 26      char okes[32];
 27     //md5 
 28     char md5[64];
 29 .... 
 30     //shi ji du qu zi jie;
 31     int data_length;
 32 
 33     //test.c的内容,长度未知
 34     ch
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值