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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

网络编程

课程设计说明书

题目名称:基于TCP/IP的网络文字聊天程序设计专业:网络工程

班级: 1201班

学号: 1220140105 姓名:蒋星

指导老师:利平

完成日期: 2014年12月13日

目录

一、实验基本信息概要3

1. 题目要求 3

2. 题目容3

3. 开发环境 3

二、流程图4

三、系统简介5

1.界面5

2. 软件功能 5

3. 系统设计 9

4. 优点与缺点9

四、系统详细设计11

1. ChatServer类11

2. ChatClient 类13

3. SocketException类15

5. 命令协议 15

6. 消息格式 16

五、系统测试16

1. 服务器使用错误16

2. 客户端使用错误17

3. 启动服务器17

4. 启动客户端17

5. 关闭客户端17

6. 启动服务器错误提示18

7. 公开聊天 18

8. 私聊 18

9. 错误的私聊19

10. 更名20

11. 帮助20

12. 非法指令20

13. 非法的指令参数20

14. 连接服务器失败21

六、心得体会21

七、完整代码21

Charserverd.cpp 服务器main函数文件 21

ChatServer.h 服务器类头文件 22

ChatServer.cpp 服务器类 23

ClientInfo.h 客户信息类 33

Charclientd.cpp 客户端main函数 34

ChatClient.h 客户端头文件34

ChatClient.cpp 客户端类 35

InitSock.cpp 初始化WINSOCK类41

SockException.h 异常类41八、[参考文献] 42

一、实验基本信息概要

1. 题目要求

1、开发平台

Visual C++ 6.0。

2、对设计方法的要求

使用Visual C++ 6.0开发出在Windows控制台或图形界面下运行的程序。

3、对设计容的要求

①实现网络文字聊天程序的服务器端。

②实现网络文字聊天程序的客户端。

③主程序的结构和流程。

④程序运行过程的截图。

⑤网络文字聊天程序的实现原理。

⑥网络文字聊天程序实现代码的分析。

4、对课程设计说明书的要求

①设计思路与开发过程。

②对主要代码段要有较详细的注释。

③对本次设计的评价、设计的收获与建议。

5、说明书为打印件

2. 题目容

容概要:实现网络文字聊天程序的基本功能。

3. 开发环境

操作系统: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模型进行了细致的拆分与抽象,做到了逻辑流程清晰,每个函数简洁易懂,层次分明。例如服务器启动函数:

void ChatServer::Start()

{

InitListenSocket();

Bind();

Listen();

InitFDSocket();

while (true)

{

DoSelect();

}

}

try

{

charServer.Start();

}

catch(SockException e)

{

cout << e.GetErrorInfo () << endl;

cout << "[System Error] Error Code:" << e.GetErrorCode () << endl;

}

它其实就完成了一个简单的流程,初始化socket,绑定,监听,初始化fd_socket集合,死循环调用select。通过合理的封装底层原语和加入异常处理(异常交给顶层处理),使得代码专注于业务流程而不是繁杂的异常判断语句,在看下面这个函数DoSelect()。

void ChatServer::DoSelect ()

{

m_fdRead = m_fdSocket;

int nRet = Select();

if(nRet > 0)

{

for(int i = 0;i < m_fdRead.fd_count; i++)

{

DoFDRead(m_fdRead.fd_array[i]);

}

}

}

相关文档
最新文档