项目内容
-
服务端的构建
- 基本网络配置信息
- 接收recv,发送send
-
客户端的构建
- 网络connect
- 接收和发送
-
日志信息的构建
- logopen()
- logclose()
- logwrite ()
- 用到的一些比较陌生API:va_start,va_end,fflush(强制写入文件中) --(可变参数的运用)
-
基本功能
-
ls,显示服务端的文件
popen函数。第一个参数为commond,第二个参数type,分为r和w。通过调用该函数实现获取服务端的文件,将数据存入struct messege中data,发送到客户端。客户端接收一个结构体,将其中的data打印出来。 -
get,下载服务端的文件
- 计算文件实际长度:fseek
- 分割参数: 用strstr或者strtok
- 分割空格
- \n
- 结尾的\0
-
put,上传文件到服务端
- 计算文件长度
- 分割参数
- 分割空格
- 客户端将文件内容写入结构体中,服务端创建文件保存下来
-
quit,退出
- 跳出循环,识别到quit命令时,跳出while循环。
-
cd,切换目录
- popen,信息存入data发送客户端,客户端打开并显示。
-
-
高级功能
- 用户名和密码验证
- 创建一个公用的结构体,用于传输输入的用户名和密码。服务端接收到该结构体后,将其中的信息解析出与服务端文件中预存号的用户名和密码比对。
- get和put的文件,进行md5校验
- 分割字符:保存下校验码。
- 分割函数
- hist,显示历史记录
- 服务端没接收一个命令,创建链表,接收命令保存。客户端输入hist命令时,服务端将链表信息遍历到data中,发送到客户端。
- 用户名和密码验证
-
公共的消息体
- msg.h 中定义一个枚举类型 enum 将LS、CD等命令宏处理。定义一个struct messege 结构体,里面存放命令、命令行、cm5、数据存放等。
遇到的一些问题:
1.日志信息的构建遇到的问题:调用logwrite时出现段错误,gdb发现为vfprintf(FILE *stream,const char *format,va_list ap)处出现段错误。是因为在前面将该函数第一个参数赋值为了NULL。。需要更加细心和理解对指针的使用。
2.创建一个函数,主函数中int a=10,建立一个fun函数去修改a的值。要将a的地址传到fun中 才可以将a的值改变。
3.思路不够清晰,急着敲代码。