2017-2018-1 20155315 《信息安全系统设计基础》实验三 实时系统

实验内容

  • 学习使用Linux命令wc(1)
  • 基于Linux Socket程序设计实现wc(1)服务器(端口号是你学号的后6位)和客户端
  • 客户端传一个文本文件给服务器
  • 服务器返加文本文件中的单词数

实验知识点

  • wc命令
  • socket编程
  • tcp文件传输

实验步骤

(一)实现wc(1)

  • 使用man查看wc(1)

    命令参数 作用
    -c 统计字节
    -m 统计字符
    -l 统计行数
    -L 最长的一行的长度
    -w 统计单词
  • 主要问题1:应题目要求,暂时只实现了wc -w的功能,即打印单词数。在编译代码的过程中,同样遇到了和以前一样的"/n"问题,按照以前的实践将其改过之后,统计出的结果与预想结果不一样,总会存在误差,查找资料显示,是因为将测试文件编辑的时候,从Windows到Linux粘贴的过程中,会产生一些看不见的非法字符,使用od -tc xxx就能看出来,但实际上,这些字符在统计的时候是不会被统计到的,因此,结果总有偏差。

  • 主要问题2:使用socket编程的时候,发现用书上的知识无法直接传输文件,结合老师讲过的web编程,客户端使用send和recv实现文件传输,但是运行的时候报错,出现段错误(核心已转储)检查发现存在地址越界的错误,将代码改过之后,代码运行成功。

  • 运行截图:

(二)并发程序

使用多线程实现wc服务器并使用同步互斥机制保证计数正确

  • 主要问题:和之前的问题一样出现核心转储错误,发现是文件名输入错误。但是在定义的时候,声明过文件名出错会有打不开文件的错误,但是结果却是直接出现段错误,不理解为什么。

  • [代码链接]https://gitee.com/ZZYYLL/20155315zyl/tree/master/exp/3)

  • 运行截图:

对比单线程的版本的性能,并分析原因。

  • 单线程容易实现,但是一次只允许一个客户端连接。
  • 多线程更复杂,但是一次允许多个客户端,工作效率更高。
  • 单线程保证单用户的安全性,但多线程保证任务的高效性。

PSP时间统计

步骤 耗时 百分比
需求分析 10min 10%
设计 20min 20%
代码实现 50min 50%
测试 10min 10%
总结分析 10min 10%
原文地址:https://www.cnblogs.com/-zyl/p/7860673.html