




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux 程序设计 期末大作业报告 信息工程与自动化学院 专 业 计算机科学与技术 年 级 2009 级 学 生 姓 名 徐兴繁 学 生 学 号 200910405214 任 课 教师姓名 李英娜 任 课 教师职称 讲 师 1 摘要 摘要 shell 是一种具备特殊特殊功能的程序 它是介于使用者和 UNIX linux 操作系统之核心程序间的一个接口 本设计主要实现一个 Linux 下的局域网聊天工具的设计 该设计主要分为两部分 客户端部分和服务器部 分 设计并实现一个简单的聊天室程序 可以是终端字符界面 支持用户管理 用户名 密码注册和登录 客户端登陆到服务器聊天后 可以在聊天室内与其他 用户交流 这个聊天室中的任何一个用户输入一段字符后 室内的其他用户都 可以看到这句话 据此 聊天程序分为客户端和服务器端 客户端对应每一 个参加聊天的用户 完成从终端上输入采集并传递到服务器端和从服务器端接 收信息输出显示的功能 两个部分都使用 C 语言 利用 vi 编辑器 通过 Berkeley 套接口编程实现相关功能 关键词关键词 linux shell 编程 聊天室 客户端 服务器 套接字 2 目录目录 1 期末大作业的目的 2 2 大作业的基本要求 3 3 设计内容 3 3 1 shell 编程 20 分 3 3 1 1 字符串的判断 3 3 1 2 月份的截取转换 4 3 2 聊天室编程 50 分 5 3 2 1 需要实现的主要功能 6 3 2 2 客户端功能模块 6 3 2 3 服务器功能模块 7 3 2 4 代码实现 7 3 2 4 设计结果截图 14 4 小结 17 5 参考文献 17 3 1 期末大作业的目的 期末大作业的目的 Linux 程序设计 大作业是在完成理论课程学习之后 通过大作业的方 式对学生进行综合实践考核 在学生掌握 Linux 的基本编程知识及常用的操作 命令基础上 提高学生对所学知识的应用能力 特别是 煅炼学生搜集有关 Linux 资料 在资料文档的帮助下 运用 Linux 的基本知识及常用的操作命令 来解决问题的能力 2 大作业的基本要求 大作业的基本要求 要求能完成给定的编程任务 并写出相应的大作业总结报告 2 1 根据合理的进度安排 按照程序的流程及方法 踏实地完成期末大作业的 任务安排 2 2 按照任务要求 完成各个功能模块的功能划分和程序编写 调试代码并运 行 2 3 按要求撰写大作业报告 3 设计内容 设计内容 3 1 shell 编程 编程 20 分 分 要求 写出 2 个 Shell 程序 每个不少于 15 行 如实现自己模拟 shell 下 的 cd ls 指令等 说明程序主要功能 每行给出注释 3 1 1 字符串的判断字符串的判断 写一个脚本 检测用户输入串的合法性 要求串由大小写字母 数字组成 无标点 特殊符号 空格 思路 将输入的串中 非字母数字的内容删除或替换为空后若和原来输入的相同 则合法 否则不合法 bin bash isvalidAlphaNum compressed echo 1 sed s alnum g 替换不合要求字符为 4 空 if compressed 1 then return 1 not valide else return 0 valide fi 函数体 判断字串的合法性 echo n Enter input n 强制不换行 read input 读取内容存到 input 中 无 符号 if isvalidAlphaNum then 加引号 否则可能会出错 echo invalide exit 1 else echo valide fi exit 0 运行截图 运行截图 3 1 2 月份的截取转换月份的截取转换 输入一个 month day year 格式的日期串 程序将处理 month 为 其英 文单词的前三个字母 第一个字母大写 其余的小写 思路 首先判断 month 是数字 还是单词 若是数字 则可查 数字 month 映射表 自定义 case 结构 若是单词 则取前三个字母 并格式化 5 bin bash monthnoToName case 1 in 1 month Jan 2 month Feb 3 month Mar 4 month Apr 5 month May 6 month Jun 7 month Jul 8 month Aug 9 month Sep 10 month Oct 11 month Nov 12 month Dec echo 0 Unknown numeric month value 1 exit 1 default esac return 0 if ne 3 then 若参数个数不为 3 则有误 echo Usage 0 month day year exit 1 fi 判断参数 1 是数字还是单词 方法 替换串中所有数字 若结果为空 则为数 字 否则为单词 if n echo 1 sed s digit g n 检测串是为空 then monthnoToName 1 数字 else 取第一个字母并将其变为大写 再将结果与取出的第二三字母组合 month echo 1 cut c1 tr lower upper month month echo 1 cut c2 3 tr upper lower fi echo month 2 3 输出结果 exit 0 运行截图 6 3 2 聊天室编程 聊天室编程 50 分 分 设计并实现一个简单的聊天室程序 可以是终端字符界面 支持用户管理 用户名 密码注册和登录 客户端登陆到服务器聊天后 可以在聊天室内与其他 用户交流 这个聊天室中的任何一个用户输入一段字符后 室内的其他用户都 可以看到这句话 据此 聊天程序分为客户端和服务器端 客户端对应每一个 参加聊天的用户 完成从终端上输入采集并传递到服务器端和从服务器端接收 信息输出显示的功能 3 2 1 需要实现的主要功能需要实现的主要功能 1 客户端输入服务器 IP 和端口号 2 服务器成功启动 3 每个客户端可以找到服务器 并可以与服务器进行连接 4 客户端与服务器可以实现通讯 3 2 2 客户端功能模块客户端功能模块 1 连接服务器 连接服务器 连接服务器之前需要解析服务器地址 创建套接字 设置相关参数 7 2 发送消息功能 发送消息功能 8 3 2 3 服务器功能模块服务器功能模块 3 2 4 代码实现 代码实现 1 客户端代码 客户端代码 include include include include include include include include define TRUE 1 define PORT 1000 static int sockfd void recvfromserver 接受服务器消息线程入口函数 9 char mes 1024 int nbytes 0 while 1 memset mes 0 sizeof mes nbytes read sockfd mes sizeof mes if nbytes 0 mes nbytes 0 printf s n mes pthread exit NULL int main int argc char argv int sockfd char buffer 1024 struct sockaddr in server addr struct hostent host int portnumber nbytes char strhost 127 0 0 1 char clientname 20 char password 20 char mes 1024 int thr id thread ID for the newly created thread pthread t p thread thread s structure if argc 1 fprintf stderr Usage s a n argv 0 exit 1 10 if host gethostbyname strhost NULL fprintf stderr Gethostname error n exit 1 客户程序开始建立 sockfd 描述符 printf 正在建立套接口 n if sockfd socket AF INET SOCK STREAM 0 1 fprintf stderr Socket Error s a n strerror errno exit 1 客户程序填充服务端的资料 bzero server addr sin family AF INET server addr sin port htons PORT server addr sin addr struct in addr host h addr printf 套接口创建成功 正在链接服务器 n 客户程序发起连接请求 if connect sockfd struct sockaddr exit 1 连接成功了 printf 链接服务器成功 n 欢迎来到聊天室 n printf 请输入你的用户昵称 n scanf s clientname printf 请输入登录密码 n scanf s password printf n 登陆成功 write sockfd clientname sizeof clientname printf n 开始聊天 Quit 断开连接 n n 11 thr id pthread create while 1 memset buffer 0 sizeof buffer memset mes 0 sizeof mes scanf s buffer strcat mes clientname strcat mes strcat mes buffer printf main thread s n mes if write sockfd mes sizeof mes 1 fprintf stderr Write Error s n strerror errno exit 1 if strcmp buffer Quit 0 break 结束通讯 close sockfd exit 0 2 服务器代码 服务器代码 include include include include include include include include 12 define MAXLINE 1000 在一条消息中最大的输出字符数 define LISTENQ 20 最大监听队列 define PORT 1000 监听端口 define MAXFD 20 最大的在线用户数量 void get client void int sockfd i static int maxi 0 maxi 表示当前 client 数组中最大的用户的 i 值 static int client MAXFD void recvandsend void 监听转发线程入口函数 int index 0 int nbytes 0 char buffer 1024 int len int outindex 0 while 1 if maxi 0 memset buffer 0 sizeof buffer nbytes 0 index nbytes read client index buffer sizeof buffer printf d d n index client index if nbytes 0 buffer nbytes 0 printf s n buffer outindex 0 while outindex maxi index 0 pthread exit NULL int main int argc char argv int client fd LISTENQ clientnum 0 struct sockaddr in server addr struct sockaddr in client addr int sin size portnumber char hello Hello Are You Fine n int thr id thread ID for the newly created thread pthread t p thread thread s structure int new fd 0 memset client 0 sizeof client if argc 1 fprintf stderr Usage s portnumber a n argv 0 exit 1 服务器端开始建立 socket 描述符 if sockfd socket AF INET SOCK STREAM 0 1 fprintf stderr Socket error s n a strerror errno exit 1 服务器端填充 sockaddr 结构 bzero 14 server addr sin family AF INET server addr sin addr s addr htonl INADDR ANY server addr sin port htons PORT 捆绑 sockfd 描述符 if bind sockfd struct sockaddr exit 1 printf 服务器监听端口 d n PORT 监听 sockfd 描述符 if listen sockfd LISTENQ 1 fprintf stderr Listen error s n a strerror errno exit 1 thr id pthread create printf 欢迎来到聊天室 n while 1 服务器阻塞 直到客户程序建立连接 if maxi 20 printf 以达到人数上线 n continue sin size sizeof struct sockaddr in if new fd accept sockfd struct sockaddr exit 1 fprintf stderr Server get connection from s n inet ntoa client addr sin addr client maxi new fd 15 printf n 新用户进入聊天室 d n new fd 3 close sockfd exit 0 3 2 4 设计结果截图 设计结果截图 服务器 第一个访客 16 第二个访客 17 第三个访客 4 小结 小结 通过本次设计对 Linux 课程的 shell 编程以及网络聊天
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位笔试-上海-上海中西医结合内科(医疗招聘)历年参考题库含答案解析
- 中国危重症肾脏替代治疗抗凝专家共识解读
- 2025年事业单位工勤技能-北京-北京政务服务办事员三级(高级工)历年参考题库含答案解析
- 军事公安面试题目及答案
- 冷冻水产品智能加工系统适应性分析报告
- 银厂社会责任风险评估报告
- 智能建筑系统集成与节能降耗在绿色商场建设中的应用效果分析报告
- 2025年中药炮制新技术创新成果鉴定与应用报告
- 工业互联网平台TEE在工业互联网设备安全防护竞争格局分析中的应用报告
- 2025年医疗美容行业注射填充材料市场分析与监管报告
- 建筑公司分包合同管理办法
- 2025年秋季学期德育工作计划:向下扎根向上开花
- 2025-2030中国家政服务行业信用体系建设与服务质量监管报告
- 2025年成都水务考试题库
- 《医师法》考核试题(附答案)
- 2025年云计算测试题库及答案
- 2025年安徽省普通高中学业水平选择性考试(物理)科目高考真题+(答案解析版)
- 湛江初一分班考试试题及答案
- 2025年成都东部集团有限公司及下属企业招聘考试笔试试卷【附答案】
- 各分项工程质量保证措施
- 广东省深圳市2025-2026学年七年级上学期入学考试模拟英语试卷(六套-6卷-原卷)
评论
0/150
提交评论