计算机网络实验报告-USTC

  • 格式:pdf
  • 大小:859.51 KB
  • 文档页数:8

计算机网络实验报告
信院23系解鑫PB11203155
实验题目:winsocket编写即时通讯程序
实验目的:
1、学习windows的MFC编程,掌握MFC编程的基本步骤,和其基本功能的使用;
2、掌握网络编程的原理,学习如何编写网络程序;
3、通过此次编程加深对计算机网络书本知识的理解。

实验原理:
1、MFC简介:
MFC是C++类库,它封装了win32应用程序的编程接口、应用程序的概念,总体上定义了应用程序的轮廓。

编程者只需通过预定的接口把具体应用程序特有的东西填入框架,即可建立windows应用程序,非常方便。

2、CAsyncSocket类简介:
CAsyncSocket类是MFC对winsocket的一个封装。

1)、优点:具有灵活性高,能完全控制程序,能遍历地利用windows系统对网络事件通知的回调函数;
2)、缺点:阻塞问题、字节顺序、字符转换问题需要自己解决。

CSocket类是MFC对winsocket的另一个高级封装。

1)、优点:结合archive来使用套接字,字节顺序、字符串转换、阻塞等问题不需用户管理,使用更加方便;
2)、缺点:灵活性没有CAsyncSocket高。

Server 启动
Client 登录
等待客户登录
登录
创建子套接字
显示消息
客户端用户
客户端 显示消息
程序流程:
程序简介:
设计人监听端口号,若有客户端连接请求,给予连接 发送消息
登录失败
连接上
成 功
点击换背景按钮,可以切换背景,提供了5个背景
注:本软件容错性很好,错误基本已解决,并以对话框形式给予提示。

核心代码:
1、MQserver端:
从CSocket派生出两个子类:CLSocket、CCSocket。

CLSocket专门用于监听客户端的连接请求;CCSocket专门用于与客户端建立连接并交换数据。

从CSocket派生出一个子类CCSocket,专门用于与客户端建立连接并交换数据。

调试分析:
最初只写了连接,收发消息的功能,没写换背景和加背景音乐的功能。

整体没有太大的逻辑错误,大多是些语法错误,主要由拼写错误造成的,更改之后能运行。

后来添加了换背景和背景音乐功能,以及代码优化。

出现了些小问题。

主要如下:
1、开始消息记录的顺序不是以新旧排序,即最新的消息没有出现在最下面。

后来发现是
listbox属性里默认选择sort功能,消息在显示之前已经被排序了。

去掉sort之后,最新的消息能正常显示在最下面。

但是当消息满框之后,消息不能显示在视野里,需手动下拉滚动条,不是很方便,于是加了m_listmsg.SetCurSel (m_listmsg.GetCount()-1),自动锁定最新消息,无需手动滚动。

2、添加背景图功能时,最初加入的是JPG格式的图,由于MFC不直接支持改格式,所以无法
显示。

于是将图转至BMP位图格式,于是可以正常显示了。

3、添加背景音乐时,预期目标是随关随开背景音乐,但是尝试用单选框、复选框、和按钮后
都为达到理想效果,能开不能关。

后来发现,不是控件的选择问题,是函数PlaySound(NULL,NULL,SND_RESOURCE|SND_ASYNC)并不能关闭音乐。

改为PlaySound(NULL,NULL,SND_FILENAME)后,可以正常开关音乐了。

经过各种测试,基本没有错误了。

预期功能都能正常使用。

只是还有一个无伤大雅的小错。

就是:当启动两个以上的客户端,连接服务器成功后,只关闭一个客户端时,不能再服务器上显示该客户端已关闭的提示,客户端全部关闭时会有客户端关闭提示。

但是这个不影响其他功能的使用。

只是个小问题。

实验总结:
1、本实验基本完成预定目标,软件要求功能都已正常实现,并加有背景更换、背景音乐、自
动锁定最新消息,并高亮显示的功能。

2、编程过程中,由于开始对MFC不是很了解,需要边写代码,边学习MFC。

编完整个程序,
对MFC的应用也有了一定了解。

看到自己能用不熟悉的MFC编出网络应用程序,心里也有一种成就感。

3、通过多次调试分析,程序基本无错,可以按预期功能正常使用。

即使有些小错,也保证了
不会影响使用。

程序容错性好,考虑到了各种出错情况,并会以窗口提示错误信息。

以下是使用效果图:。