⽹络编程基于TCP的简易聊天室实验报告
⽹络编程课程设计
-基于TCP的简易聊天室
⼀、实验基本信息概要
1.题⽬要求
熟悉异步⽹络编程的基本⽅法,掌握异步⽹络编程和⽹络协议设计的⽅法。要求采⽤select 模型、WSAAsyncSelect模型、WSAEventSelect模型、重叠模型或完成端⼝等模型完成编程任务。
socket编程聊天室基本流程2.上机要求
要求采⽤select模型、WSAAsyncSelect模型、WSAEventSelect模型、重叠模型或完成端⼝等模型完成下⾯的任务。
3.题⽬内容
内容概要:实现⼀个聊天室,⽀持多⼈聊天。也可以增加私聊等功能。
4.开发环境
操作系统:Windows 7
开发语⾔:C++
集成开发环境:Microsoft Visual Studio 2010
⼆、系统简介
1.界⾯
本软件使⽤DOS控制台界⾯,界⾯风格较为朴素,没⽤使⽤复杂的颜⾊。但是对聊天时界⾯进⾏了⼀定的控制和修正使得界⾯较为美观,易读。
服务器:
客户端:
2.软件功能
本软件实现了聊天室基本的功能,包括公开聊天,私聊,获取在线⽤户,更改昵称,获得帮助等。
1)公开聊天
在光标处直接输⼊消息后按回车即为发送公开聊天,如下图所⽰。
2)私聊
使⽤命令【/m 对⽅UID 消息】即可发送私聊,私聊只有对⽅可以看到,如下图所⽰:客户端1,密聊UID为132的⽤户。
发送后
客户端2,UID为132的⽤户收到私聊消息。
3)获取在线⽤户列表
使⽤命令【/list】即可获得在线⽤户列表,⽤户列表会议系统消息的⽅式返回,如下图所⽰。命令
发送后
4)更改昵称
使⽤命令【/name 你的新昵称】即可⽴即更改昵称,成功修改后服务器会以系统消息的⽅式返回成功修改的提⽰。命令
命令发送后
5)帮助信息
使⽤命令【/help】即可查看服务器的欢迎信息,⾥⾯包含了该聊天室的使⽤帮助,如下图所⽰。
命令
命令发送后
3.系统设计
开发本软件时,我使⽤了⾯向对象的思想,把服务器和客户端封装成对应的类,类设计将会在下⼀节做详细介绍。
通⾏⽅⾯我在服务器接受客户端消息,和客户端接受服务器消息时使⽤了select模型,发送信息我使⽤的是普通的socket原语。
基本原理为服务器与客户端建⽴TCP连接,然后服务器负责路由消息到各个客户端。
4.优点与缺点
本软件对流程复杂的SELECT模型进⾏了细致的拆分与抽象,做到了逻辑流程清晰,每个函数简洁易懂,层次分明。例如服务器启动函数:
它其实就完成了⼀个简单的流程,初始化socket,绑定,监听,初始化fd_socket集合,死循环调⽤select。通过合理的封装底层原语和加⼊异常处理(异常交给顶层处理),使得代码专注于业务流程⽽不是繁杂的异常判断语句,在看下⾯这个函数DoSelect()。
它也只完成⼀个简单的流程,调⽤select,然后循环处理有读事件的socket。
接下来的DoFDRead()函数完成的事情也⾮常直接,如果有事件的socket是监听socket的话,那么就是接收到了⼀个新的连接,否则是接收到了新的⼩。
从上⾯这个简单的例⼦中可以看到,本软件最⼤的优点就是精⼼设计的类和函数。避免了使⽤select模型常见的反复嵌套的循环和判断,每个函数清晰明了。
本系统还存在以下不⾜,⾸先是没有对界⾯做更深⼊的优化,只是做了最基本的调整,让输⼊输出更加雅观,其次是底层原语的封装并没有考虑到泛⽤性。
三、系统详细设计
这部分的⽂档在编码之前已经基本完成,由于时间较为仓促,部分内容可能和实际有所出⼊。
1.ChatServer类
该类负责完成服务器所有操作。
1)类图
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论