网络编程 基于tcp的简易聊天室 实验报告

网络编程 基于tcp的简易聊天室 实验报告

ID:3671428

大小:513.09 KB

页数:40页

时间:2017-11-22

网络编程 基于tcp的简易聊天室 实验报告_第1页
网络编程 基于tcp的简易聊天室 实验报告_第2页
网络编程 基于tcp的简易聊天室 实验报告_第3页
网络编程 基于tcp的简易聊天室 实验报告_第4页
网络编程 基于tcp的简易聊天室 实验报告_第5页
资源描述:

《网络编程 基于tcp的简易聊天室 实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、网络编程课程设计-基于TCP的简易聊天室一、实验基本信息概要1.题目要求熟悉异步网络编程的基本方法,掌握异步网络编程和网络协议设计的方法。要求采用select模型、WSAAsyncSelect模型、WSAEventSelect模型、重叠模型或完成端口等模型完成编程任务。2.上机要求要求采用select模型、WSAAsyncSelect模型、WSAEventSelect模型、重叠模型或完成端口等模型完成下面的任务。3.题目内容内容概要:实现一个聊天室,支持多人聊天。也可以增加私聊等功能。4.开发环境操作系统:Wind

2、ows7开发语言:C++集成开发环境:MicrosoftVisualStudio2010一、系统简介1.界面本软件使用DOS控制台界面,界面风格较为朴素,没用使用复杂的颜色。但是对聊天时界面进行了一定的控制和修正使得界面较为美观,易读。服务器:客户端:2.软件功能本软件实现了聊天室基本的功能,包括公开聊天,私聊,获取在线用户,更改昵称,获得帮助等。1)公开聊天在光标处直接输入消息后按回车即为发送公开聊天,如下图所示。2)私聊使用命令【/m对方UID消息】即可发送私聊,私聊只有对方可以看到,如下图所示:客户端1,密聊

3、UID为132的用户。发送后客户端2,UID为132的用户收到私聊消息。1)获取在线用户列表使用命令【/list】即可获得在线用户列表,用户列表会议系统消息的方式返回,如下图所示。命令发送后2)更改昵称使用命令【/name你的新昵称】即可立即更改昵称,成功修改后服务器会以系统消息的方式返回成功修改的提示。命令命令发送后1)帮助信息使用命令【/help】即可查看服务器的欢迎信息,里面包含了该聊天室的使用帮助,如下图所示。命令命令发送后1.系统设计开发本软件时,我使用了面向对象的思想,把服务器和客户端封装成对应的类,类

4、设计将会在下一节做详细介绍。通行方面我在服务器接受客户端消息,和客户端接受服务器消息时使用了select模型,发送信息我使用的是普通的socket原语。基本原理为服务器与客户端建立TCP连接,然后服务器负责路由消息到各个客户端。2.优点与缺点本软件对流程复杂的SELECT模型进行了细致的拆分与抽象,做到了逻辑流程清晰,每个函数简洁易懂,层次分明。例如服务器启动函数:它其实就完成了一个简单的流程,初始化socket,绑定,监听,初始化fd_socket集合,死循环调用select。通过合理的封装底层原语和加入异常处理

5、(异常交给顶层处理),使得代码专注于业务流程而不是繁杂的异常判断语句,在看下面这个函数DoSelect()。它也只完成一个简单的流程,调用select,然后循环处理有读事件的socket。接下来的DoFDRead()函数完成的事情也非常直接,如果有事件的socket是监听socket的话,那么就是接收到了一个新的连接,否则是接收到了新的小。从上面这个简单的例子中可以看到,本软件最大的优点就是精心设计的类和函数。避免了使用select模型常见的反复嵌套的循环和判断,每个函数清晰明了。本系统还存在以下不足,首先是没有对

6、界面做更深入的优化,只是做了最基本的调整,让输入输出更加雅观,其次是底层原语的封装并没有考虑到泛用性。三、系统详细设计这部分的文档在编码之前已经基本完成,由于时间较为仓促,部分内容可能和实际有所出入。1.ChatServer类该类负责完成服务器所有操作。1)类图2)成员变量Mapm_clients聊天者的SOCKET与昵称的映射fd_setm_fdSocket可用套接字集合fd_setm_fdRead有事件发生的套接字集合SOCKETm_sListen监听SocketSOCKETm_s

7、NowClient当前处理的客户套接字intm_nPort监听端口3)方法设计voidBind()voidListen()voidSelect()intRecv()SOCKETAccept()封装底层原语,并加入异常机制,使得外部调用简约明了。构造函数传入监听端口,初始化m_nPortStart()1)初始化监听套接字:voidInitListenSocket()2)绑定套接字至本地机器:voidBind()3)进入监听模式(设置为非阻塞):voidListen()4)初始化可用套接字集合voidInitFDSoc

8、ket()5)死循环,调用select方法DoSelect()6)结束DoSelect()1)令m_fdRead=m_fdSocket2)调用Select()3)循环处理Select的结果DoFdRead(SocketsRead)4)结束DoFdRead(intiReadIndex)1)判断是否为m_sListen2)是m_sListenRecvNewCon

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。