网络聊天设计

  • 格式:doc
  • 大小:124.58 KB
  • 文档页数:4

聊天室设计程序实验报告

1. 实验目的

本实验是基于VisualC++ MFC 进行开发,在整个实验开发的过程中,对MFC的对话窗框架结构的了解,掌握基本的运用MFC编写软件。对MFC的触发机制、消息映射以及对话框的关联全面的认识和掌握。增强编程能力,更好的适应个人今后的发展。

2. 功能要求

(1)服务器对于所有的客户端进行控制。

(2)客户可以通过服务器转发,实现一对一和一对多聊天。

(3)客户端程序应该可以实时显示目前其它用户的登录状态和在线状态。

(4)能察看聊天纪录。

(5)应该具有易用、美观的图形界面。

3. 运行环境

本实验适用于window xp及以上的系统版本,在VIsual C++环境下编译

4. 设计方案

为实现网络聊天的功能,采用Windows Socket编程,服务器与客户端采用了TCP/IP连接方式,在设计聊天方案时,实行将所有信息发往服务器端,再由服务器进行分别处理的思路,服务器端是所有信息的中心。

服务器及客户端的功能可划分为以下模块:

客户端:

1) 登陆功能:建立与服务器的连接并登陆,能显示登陆错误信息。

2) 界面显示:将在线好友显示在好友列表中,并实现系统托盘,加入工具栏便于操作。

3) 聊天功能:与好友聊天。

4) 聊天纪录:能保存聊天纪录,并能察看聊天纪录。

5) 信息提示:能看到用户登陆和退出聊天室的提示及显示时间,。

服务器端:

向各个客户端发布系统消息。

接受来自客户端的各种信息并分别处理。

1) 登陆信息:检查登陆信息是否正确,并向客户端返回登陆信息,如信息正确。就将在线用户发给该用户,并将该用户的状态发给各在线用户。同时在服务器端显示出来。

2) 聊天信息:转发给消息指定的用户。

3) 用户下线:将此用户下线消息发给各客户端,并改写用户在服务器端的状态。

程序中主要变量及类的功能说明如下:

客户端:

用户及发送信息结构体类型

typedef struct info

{ int type; //type=0表示自己,type=1表示在线所有用户,type=2表示指定用户

char name[20];

char msg[200];

};

enum { IDD = IDD_CHAT_DIALOG }; 服务器端

处理登录消息 转发聊天信息 处理退出信息 发布系统消息 登陆到服务器 客户端

登录失败

显示在线用

户 接收各种信息 退出服务器 查看聊天纪录 CListBox m_list1;//在线用户

CComboBox m_list;//消息发送到

CString m_send;//发送框

CString m_read;//消息框

CString m_me;//好看

初始化:

sin.sin_family=AF_INET;

sin.sin_addr.s_addr=ulAddress;

sin.sin_port=htons(9000);

主要函数:

CChatDlg::OnCancel() //点击取消按钮,退出

void CChatDlg::OnOK() //点击确定按钮,进行聊天

send(sockServer,(char*)&sendinfo,sizeof(sendinfo),0)

recv(sockServer, (char*)&reinfo, sizeof(reinfo), 0);//从已连接的Socket接收 数据,为整形

接受不同类型的消息

type=1;

m_read=m_read+"\r\n"+strTime+"你对大家说:"+m_send;

m_send=strTime+m_name+"对大家说:"+m_send;//对方接收

type=2;

LPCTSTR q=toname;

memcpy(,q,toname.GetLength()+1);

m_read=m_read+"\r\n"+strTime+"你对"+toname+"说:"+m_send;

m_send=strTime+m_name+"对你说:"+m_send;

5. 设计结果

客户端:

输入服务器的IP地址进入聊天室或者选择退出

进入聊天室开始聊天

服务器端

监控用户登陆和退出消息,并发送相应消息给用户

6. 设计总结:

1 程序的应改进之处:

1. 使用非模态对话框代替模态对话框。

2. 聊天记录文件应该加密。

3. 将不在线用户也显示出来,并能给不在线用户发送信息,在服务器端建立消息缓存。

4. 只显示用户的好友,可以添加好友并修改信息。

2 个人小结

在做这次网络创新实验之前基本上还没接触过网络编程,这次实验是在边学习边实践的基础上完成的。本学期课和其他实验也很多,因此做的时间不多,做的结果不太好,这次网络实验可以说是在理解网络的基础上对Windows Socket 编程的一次学习过程,虽然做的不好,但也学到了很多知识,对自己以后进行网络开发有很大的帮助。