在本次任务中,你需要解决一个 TCP 粘包问题。
- 使用 C++ 编程
- 掌握 Linux 网络编程
本项目依赖以下工具:CMake、gRPC、Protobuf
Ubuntu 官方库中提供了 Protobuf,但 gRPC 可能需要从源代码编译。
Protobuf 安装
sudo apt update
sudo apt install -y protobuf-compiler libprotobuf-dev
gRPC 安装可以参考 gRPC C++ 构建
sudo pacman -S protobuf grpc
你需要完成客户端与服务器的连接和数据传输任务:
- 客户端负责发送字符串,API 位于 client.h 中,你需要在 client.cpp 中实现
- 服务端负责接收字符串,API 位于 server.h 中,你需要在 server.cpp 中实现
- TcpSocket 类负责具体的数据收发操作,API 位于 socket.h 中,你需要在 socket.cpp 中实现
测试时我们会模拟以下苛刻条件:
- 网络干扰
- 网络延迟
- 数据传输时 MTU 小于系统值
传输的数据类型包括 ASCII 和二进制,gRPC 将用于验证字符串传输的正确性。
本任务对 gRPC 和 Protobuf 没有其他要求,有兴趣的同学可以研究代码中如何实现干扰操作。
clone 该仓库到本地
git clone [email protected]:xiyou-linuxer/NetWork.git
给 build.sh 添加可执行权限
chmod +x build.sh
运行该脚本
./build.sh
如果构建成功,会在当前目录下生成两个文件:
- client.out
- server.out
在不同终端同时运行这两个可执行文件,即可开始自动测试
当出现以下输出时,说明你已经通过了所有测试:
Congratulations! You Pass The Test!
本项目采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可. 贡献本仓库视为同意贡献内容基于上述协议授权.