• 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%
  • 相关阅读:
    linux常用命令
    Python 父类调用子类方法
    import win32api 安装pip install pypiwin32
    Python 封装DTU-215码流卡 第一天
    git apply -v 提示 Skipped patch 打不上patch的解决办法
    2019/10/29
    12/9/2019
    11/9/2019
    9/7/2019
    人生若有命中注定
  • 原文地址:https://www.cnblogs.com/-zyl/p/7860673.html
Copyright © 2020-2023  润新知