linux聊天室报告可编辑docWord文档下载推荐.docx
《linux聊天室报告可编辑docWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《linux聊天室报告可编辑docWord文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
![linux聊天室报告可编辑docWord文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-10/10/094ab608-6ec9-4c84-97d2-90274dc2f5d1/094ab608-6ec9-4c84-97d2-90274dc2f5d11.gif)
1的目的
《Linux》是在完成理论课程学习之后综合实践在学生掌握Linux的基本知识及常用的操作命令基础上提高学生对所学知识的应用能力特别是煅炼学生搜集有关Linux资料在资料文档的帮助下运用Linux的基本知识及常用的操作命令来解决问题的能力
的基本要求
要求能完成给定的任务并写出相应的总结报告
1根据合理的进度安排按照程序的流程及方法踏实地
2
3
31shell编程20分
要求写出2个Shell程序每个不少于15行如实现自己模拟shell下的cdls指令等说明程序主要功能每行给出注释
com字符串的判断
写一个脚本检测用户输入串的合法性要求串由大小写字母数字组成无标点特殊符号空格
思路将输入的串中非字母数字的内容删除或替换为空后若和原来输入的相同则合法否则不合法
binbash
isvalidAlphaNum
compressed"
echo1seds[[alnum]]g"
替换不合要求字符为空
if["
compressed"
"
1"
]then
return1notvalide
else
return0valide
fi
函数体判断字串的合法性
echo-n"
Enterinput"
-n强制不换行
readinput读取内容存到input中无符号
ifisvalidAlphaNum"
input"
then加引号否则可能会出错
echo"
invalide"
exit1
else
valide"
fi
exit0
运行截图
com份的截取转换
输入一个monthdayyear格式的日期串程序将处理month为其英文单词的前三个字母第一个字母大写其余的小写
思路首先判断month是数字还是单词若是数字则可查数字month映射表自定义case结构若是单词则取前三个字母并格式化
monthnoToName
case1in
1month"
Jan"
2month"
Feb"
3month"
Mar"
4month"
Apr"
5month"
May"
6month"
Jun"
7month"
Jul"
8month"
Aug"
9month"
Sep"
10month"
Oct"
11month"
Nov"
12month"
Dec"
0Unknownnumericmonthvalue1"
2exit1default
esac
return0
if[-ne3]then若参数个数不为3则有误
echoUsage0monthdayyear
判断参数1是数字还是单词方法替换串中所有数字若结果为空则为数字否则为单词
if[-necho1seds[[digit]]g]-n检测串是为空
then
monthnoToName1数字
取第一个字母并将其变为大写再将结果与取出的第二三字母组合
monthecho1cut–c1tr[lower][upper]
monthmonthecho1cut-c2-3tr[upper][lower]
echomonth23输出结果
32聊天室编程50分
设计并实现一个简单的程序可以是终端字符界面支持用户管理用户名密码注册和登录这个聊天室中的任何一个用户输入一段字符后室内的其他用户都可以看到这句话据此聊天程序分为客户端和服务器端客户端对应每一个参加聊天的用户完成从终端上输入采集并传递到服务器端和从服务器端接收信息输出显示的功能
1客户端输入服务器IP和端口号
2服务器成功启动
3每个客户端可以找到服务器并可以与服务器进行连接
4客户端与服务器可以实现通讯
com客户端功能模块
1连接服务器
连接服务器之前需要解析服务器地址创建套接字设置相关参数
2发送消息功能
com服务器功能模块
com现
1客户端代码
include
defineTRUE1
definePORT1000
staticintsockfd
voidrecvfromserver接受服务器消息线程入口函数
charmes[1024]
intnbytes0
while1
memsetmes0sizeofmes
nbytesreadsockfdmessizeofmes
ifnbytes0
mes[nbytes]\0
printf"
s\n"
mes
pthread_exitNULL
intmainintargccharargv[]
intsockfd
charbuffer[1024]
structsockaddr_inserver_addr
structhostenthost
intportnumbernbytes
charstrhost"
com1"
charclientname[20]
charpassword[20]
intthr_idthreadIDforthenewlycreatedthread
pthread_tp_threadthreadsstructure
ifargc1
fprintfstderr"
Usages\a\n"
argv[0]
exit1
ifhostgethostbynamestrhostNULL
Gethostnameerror\n"
客户程序开始建立sockfd描述符
printf"
正在建立套接口\n"
ifsockfdsocketAF_INETSOCK_STREAM0-1
SocketErrors\a\n"
strerrorerrno
客户程序填充服务端的资料
bzeroserver_addrsizeofserver_addr
server_addrsin_familyAF_INET
server_addrsin_porthtonsPORT
server_addrsin_addrstructin_addrhost-h_addr
套接口创建成功正在链接服务器\n"
客户程序发起连接请求
ifconnectsockfdstructsockaddrserver_addrsizeofstructsockaddr-1
ConnectErrors\a\n"
连接成功了
链接服务器成功\n欢迎来到聊天室\n"
请输入你的用户昵称\n"
scanf"
s"
clientname
请输入登录密码\n"
password
\n登陆成功"
writesockfdclientnamesizeofclientname
\n开始聊天\"
Quit\"
断开连接\n\n"
thr_idpthread_createp_threadNULLrecvfromserverNULL
memsetbuffer0sizeofbuffer
scanf"
buffer
strcatmesclientname
strcatmes"
"
strcatmesbuffer
printf"
mainthreads\n"
ifwritesockfdmessizeofmes-1
fprintfstderr"
WriteErrors\n"
exit1
ifstrcmpbuffer"
Quit"
0
break
结束通讯
closesockfd
exit0
2服务器代码
defineLINE1000在一条消息中最大的输出字符数
defineLISTENQ20最大监听队列
definePORT1000监听端口
defineFD20最大的在线用户数量
voidget_clientvoid
intsockfdi
staticinti0i表示当前client数组中最大的用户的i值
staticintclient[FD]
voidrecvandsendvoid监听转发线程入口函数
intindex0
intlen
intoutindex0
ifi0
memsetbuffer0sizeofbuffer
nbytes0
index
nbytesreadclient[index]buff