文件传输服务器

这是一个基于 C++ 实现的文件传输服务器,支持接收文本和二进制文件。服务器采用多线程设计,可以同时处理多个客户端连接。

功能特点

  • 支持多客户端并发连接
  • 支持文本和二进制文件传输
  • 自动保持文件原始格式(扩展名)
  • 使用时间戳确保文件名唯一
  • 跨平台支持(Windows/Linux)
  • 实时显示传输进度
  • 自动创建存储目录

项目结构

1
2
3
4
5
6
7
8
9
10
11
.
├── server/ # 服务器端代码
│ ├── include/ # 头文件目录
│ │ └── Server.h # 服务器类定义
│ ├── src/ # 源文件目录
│ │ ├── Server.cpp # 服务器实现
│ │ └── main.cpp # 程序入口
│ └── CMakeLists.txt # CMake 构建配置
├── received_files/ # 接收的文件存储目录
├── received_texts/ # 接收的文本存储目录
└── README.md # 项目说明文档

技术特性

  • 使用 C++17 标准
  • 基于 TCP 协议
  • 多线程并发处理
  • 二进制数据传输
  • 文件流操作
  • 跨平台网络编程

编译要求

  • CMake 3.10 或更高版本
  • 支持 C++17 的编译器
  • Windows:Visual Studio 2019 或更高版本
  • Linux:GCC 7.0 或更高版本

构建步骤

  1. 创建构建目录:
1
2
mkdir build
cd build
  1. 生成项目文件:
1
cmake ..
  1. 编译项目:
  • Windows:
1
cmake --build . --config Release
  • Linux:
1
make

使用说明

  1. 启动服务器:
1
./tcp_server [port]

默认端口为 9000

  1. 服务器启动后会自动创建以下目录:
  • received_files/:用于存储接收的文件
  • received_texts/:用于存储接收的文本
  1. 文件命名规则:
  • 文本文件:text_时间戳.txt
  • 二进制文件:file_时间戳.原始扩展名

通信协议

文本传输

  1. 发送数据类型标识(1 字节):’1’
  2. 发送数据大小(4 字节整数)
  3. 发送文本内容

文件传输

  1. 发送数据类型标识(1 字节):’2’
  2. 发送数据大小(4 字节整数)
  3. 发送文件名长度(4 字节整数)
  4. 发送文件名
  5. 发送文件内容

注意事项

  1. 服务器会自动处理文件命名冲突
  2. 支持任意类型的二进制文件
  3. 大文件传输时会显示进度信息
  4. 程序退出时会自动清理资源

错误处理

  • 文件创建失败:检查目录权限
  • 连接断开:自动清理相关资源
  • 数据接收不完整:放弃当前传输
  • 未知数据类型:记录错误并继续运行

开发计划

  • 添加数据压缩功能
  • 实现断点续传
  • 添加文件校验机制
  • 支持文件夹传输
  • 添加传输加密功能