
实验目的
理解并掌握以下内容:
- 网络进程标识(即套接字地址)在Linux中的数据结构与地址转换函数。
 - 网络字节序与主机字节序的定义、转换以及相关函数在网络编程中的应用。
 - 数据结构内存对齐的基本规则,以及基于数据结构构建PDU的基本方法。
 - TCP单进程循环服务器与单进程客户端的编程模式,包括但不限于: 
  
- 客户端与服务器套接字系统调用基本流程。
 - 服务器对于客户端正常结束的识别与处理。
 - 客户端基于命令行指令的退出设计与实现。
 - Linux软中断信号处置原则与实际应用(SIGINT,SIGPIPE)。
 - 慢系统调用的软中断退出问题及其处理。
 
 
实验内容
编写TCP单进程循环服务器与单进程客户端,其中客户端可以向服务器发送二元运算请求PDU,服务器收到请求后解析PDU,获取运算符与操作数,执行运算并向客户端返回运算结果。具体要求如下:
- 二元运算包括加(+,ADD)、减(-,SUB)、乘(*,MUL)、整除(/,DIV)、取模(%,MOD),运算数及结果均为64位有符号整型数。
 - 计算指令在命令行以 
operator operand1 operand2的形式给出,如ADD 123 456。 - 客户端从 
stdin读取解析运算指令后,构建"计算请求报文RQT PDU"并发送给服务器。 - 服务器读取解析RQT PDU,按要求进行运算,并将运算结果封装为"计算回复报文REP PDU"发回客户端。
 - 客户端读取解析REP PDU,提取计算结果,并基于从 
stdin读取解析的运算指令构建运算表达式,且输出至stdout。 
PDU设计定义
- 本实验设定PDU没有头部(Header),仅有定长负载(Fixed-length Payload)。
 - 请求报文RQT PDU包含一个操作符与两个操作数,而回复报文REP PDU则只包含运算结果。
 
操作符
- 操作符包括 
+、-、*、/、%五种类型,使用32位有符号整数表示。操作符与其编号映射关系为:- 加 (
+): 0x00000001 - 减 (
-): 0x00000002 - 乘 (
*): 0x00000004 - 整除 (
/): 0x00000008 - 取模 (
%): 0x00000010 
 - 加 (
 
数据结构
- 左操作数 
OP1、右操作数OP2及运算结果RES均为64位有符号整数。 - 必须使用 
<stdint.h>定义的定长整数类型,如int32_t、 









![【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 数字排列游戏(200分) - 三语言AC题解(Python/Java/Cpp)](https://i-blog.csdnimg.cn/direct/32042c370ca64534b8347252bf707ac2.png)








