• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
20175221曾祥杰
我不喜欢这世界 我只喜欢你
博客园    首页    新随笔    联系   管理    订阅  订阅

2019-2020-1 20175221 20175225 20175226 实验三 实时系统

2019-2020-1 20175221 20175225 20175226 实验三 实时系统

实验要求

任务一

  • 学习使用Linux命令wc(1)
  • 基于Linux Socket程序设计实现wc(1)服务器(端口号是你学号的后6位)和客户端
  • 客户端传一个文本文件给服务器
  • 服务器返加文本文件中的单词数
  • 上方提交代码
  • 附件提交测试截图,至少要测试附件中的两个文件

任务二

  • 使用多线程实现wc服务器并使用同步互斥机制保证计数正确
  • 上方提交代码
  • 下方提交测试
  • 对比单线程版本的性能,并分析原因

任务三

  • 交叉编译多线程版本服务器并部署到实验箱中
  • PC机作客户端测试wc服务器
  • 提交测试截图

实验步骤

任务一

  • 先使用man wc了解wc命令的功能与用法
  • 在了解了各参数的作用后,对 test1.txt 和 test2.txt 分别试验 wc wc -w功能
  • 根据wc的说明,-w对应单词统计数,其中字的定义是“空白、跳格或换行字符分隔的字符串”,而非单词数。譬如test3.txt中我输入了14个单词,使用-w参数只返回了13
  • 故我设计两种统计统计单词的程序,主要区别是统计每个单词的标准不同
  • wc -w:' ','\n','\t','\r'作为分隔符
  • 单词统计:' ','\n','\t','\r','!','"','?','.',',','(',')',':',';','-'。
  • 用socket编程实现

任务二

  • 先用man命令了解线程的创建
  • 得知在多线程编译的过程中需要加上 -lpthread,因为pthread库不是Linux系统默认的库,连接时需要使用静态库libpthread.a,所以在线程函数在编译时,需要使用“-lpthread”链接库函数。
  • 用socket编程实现多线程
  • 多个客户端一起传文件给服务器
  • 对比单线程的版本的性能,分析原因:

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

任务三

  • 虚拟机ping超级终端:

  • 超级终端ping虚拟机:

  • 配置 /etc/exports: 

  •  sudo vim /etc/exports 

  • 在文件末添加

  • 再使用权限更新命令 sudo /etc/init.d/nfs-kernel-server restart 重启服务

  • 实验的最后部分映射没有完成,会在弄明白失败原因后继续补充。

实验中的问题及解决过程

  • 问题1:
  • 在进行任务2时,没有连接成功
  • 问题1解决过程:
  • 检查发现,是自己粗心忘记先打开服务端。随后再运行客户端即可。
  • 问题2:
  • 问题2解决过程:
  • 在编译服务端的时候,加上-lpthread来连接库函数即可

 码云链接

参考资料

  • Linux C TCPSocket 传输文件简单实例-多线程实现
  • Linux多线程 同步与互斥机制
posted @ 2019-11-20 21:50  20175221曾祥杰  阅读(129)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3