TCP单进程循环服务器程序与单进程客户端程序

实验目的

理解并掌握以下内容:

  1. 网络进程标识(即套接字地址)在Linux中的数据结构与地址转换函数。
  2. 网络字节序与主机字节序的定义、转换以及相关函数在网络编程中的应用。
  3. 数据结构内存对齐的基本规则,以及基于数据结构构建PDU的基本方法。
  4. 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

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 06:00:06       7 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 06:00:06       7 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 06:00:06       5 阅读
  4. Python语言-面向对象

    2024-07-11 06:00:06       9 阅读

热门阅读

  1. c语言指针

    2024-07-11 06:00:06       12 阅读
  2. Mojo模板引擎:释放Web开发的无限潜能

    2024-07-11 06:00:06       8 阅读
  3. ffmpeg 文档 - 未完

    2024-07-11 06:00:06       10 阅读
  4. Codeforces Round #956 (Div. 2) and ByteRace 2024

    2024-07-11 06:00:06       9 阅读
  5. 旅游 | 西岳华山

    2024-07-11 06:00:06       9 阅读
  6. 优化旅游服务热线系统以满足多样化需求

    2024-07-11 06:00:06       9 阅读
  7. vivado CONFIG_MODE、CONFIG_VOLTAGE

    2024-07-11 06:00:06       11 阅读