{T}

期中大作业 | 网络编程实践项目

在完成基础篇和提升篇的学习后,本课程安排了一次期中实践项目,旨在将理论知识转化为实际编程能力。网络编程的核心特征在于理论与实践的高度耦合:仅理解协议规范和 API 语义不足以应对实际工程需求,必须通过编写和调试代码,才能对 TCP、UDP、套接字(Socket)等核心概念形成深入认知。

实践目标

本项目要求实现一个基于 TCP 的客户端-服务器(Client-Server)交互程序,重点考察以下能力:

  • 客户端:使用 select 实现 I/O 多路复用(I/O Multiplexing),同时处理标准输入和套接字读写;使用 shutdown 实现半关闭(Half-Close)
  • 服务器端:套接字读写能力,以及对端连接关闭时的异常处理能力
图表渲染中…

题干

请分别编写一个客户端程序和服务器程序,客户端连接服务器后,通过命令行与服务器进行交互,支持的交互命令包括:

  • pwd:显示服务器应用程序启动时的当前工作路径
  • cd:改变服务器应用程序的当前工作路径
  • ls:显示服务器应用程序当前路径下的文件列表
  • quit:客户端进程退出,服务器端不退出,后续客户端可再次连接

客户端程序要求

  1. 可指定待连接的服务器端 IP 地址和端口
  2. 输入命令后按回车发送,等待服务器端返回执行结果,客户端将结果显示在屏幕上
  3. 样例输出如下:
plaintext
第一次连接服务器
$./telnet-client 127.0.0.1 43211
pwd
/home/vagrant/shared/Code/network/yolanda/build/bin
cd ..
pwd
/home/vagrant/shared/Code/network/yolanda/build
cd ..
pwd
/home/vagrant/shared/Code/network/yolanda
ls
build
chap-11
chap-12
chap-13
chap-14
chap-15
chap-16
chap-17
chap-18
chap-20
chap-21
chap-22
chap-23
chap-25
chap-26
chap-27
chap-28
chap-4
chap-5
chap-6
chap-7
clean.sh
cmake-build-debug
CMakeLists.txt
lib
mid-homework
README.md
 
cd -
pwd
/home/vagrant/shared/Code/network/yolanda
cd /home
pwd
/home
ls
ubuntu
vagrant
quit
 
//再次连接服务器
$./telnet-client 127.0.0.1 43211
pwd
/home/vagrant/shared/Code/network/yolanda/build
ls
bin
chap-11
chap-12
chap-13
chap-15
chap-16
chap-17
chap-18
chap-20
chap-21
chap-22
chap-23
chap-25
chap-26
chap-28
chap-4
chap-5
chap-6
chap-7
CMakeCache.txt
CMakeFiles
cmake_install.cmake
lib
Makefile
mid-homework
 
quit
 

服务器程序要求

  1. 暂不考虑多个客户端并发连接的情形,每次仅服务一个客户端连接
  2. 将命令执行结果返回给已连接的客户端
  3. 服务器端不能因客户端退出而终止运行

关键技术要点

技术点说明
select 多路复用同时监听标准输入与套接字的可读事件
shutdown 半关闭客户端退出时关闭写端,保留读端
read 返回 0检测对端关闭连接的 EOF 条件
SIGPIPE 信号服务器端需忽略该信号,防止写入已关闭套接字时进程终止

版本信息

项目说明
更新日期2026-06-09
目标内核Linux 7.0
I/O 模型参考select, epoll, io_uring
编译工具链GCC 14+, Clang 18+