C++面向对象课程设计报告(局域网聊天程序)
XXXXX大学
C++面向对象课程设计报告
院(系):计算机工程学院
专业:计算机网络工程
学生姓名: XXXXXX
班级:_网络081__学号: 200807255
题目:局域网聊天程序
起迄日期:_2010.12.20 – 2010.12.31
设计地点: XX理工大学2#401
指导教师: XXXXXX
完成日期: 2010 年 12 月 31 日
C++面向对象课程设计报告:局域网聊天程序
2 目录
一需求分析 (3)
1.1 客户机端 (3)
1.2 服务器端 (3)
二设计内容 (4)
2.1 程序整体结构 (4)
2.2 各部分子模块功能 (5)
2.3 各子模块代码编写 (6)
三调试分析 (7)
3.1 实际完成情况 (7)
3.2 出现的问题及解决方案 (7)
3.3 可以改进的地方 (8)
3.4 可以扩充的功能 (9)
四用户手册 (10)
4.1 程序主界面 (10)
4.2 获取本地信息 (10)
4.3 发送信息 (11)
4.4 接收信息 (11)
4.5 总体演示 (11)
五设计总结 (12)
六参考文献 (13)
七附录 (14)
一需求分析
此次开发的网络聊天工具可作为个人的交流工具使用,通信的安全性不是很高,但要求信息的响应速度要较快,让用户充分享受到网络即时消息的方便和快捷。本聊天工具由服务器端程序和客户端程序两部分组成,整体采用C++平台开发,没有使用管理数据库。服务器和与客户端都包含与用户的交互式界面,它有必要的界面的按钮,向用户提供网络即时消息的功能。本聊天需要包含如下本功能:
1.1 客户机端
?获取本地IP地址
?获取本地通信端口
?获取远程IP地址
?获取本地主机名
?获取从服务器端发送过来的信息
?给服务器发送用户自定义的数据
1.2 服务器端
?获取本地IP地址
?获取本地通信端口
?获取远程IP地址
?获取本地主机名
?获取从服务器端发送过来的信息
?向客户机发送用户自定义的数据,
3
C++面向对象课程设计报告:局域网聊天程序二设计内容
2.1 程序整体结构
4
2.2 各部分子模块功能
5
C++面向对象课程设计报告:局域网聊天程序
6
2.3 各子模块代码编写
1) WM_INITDIALOG 模块
switch(UMsg) {
case WM_INITDIALOG: CLIENT .INIT_MYSOCKET(hwndDlg); =========================================== void MYSOCKET::INIT_MYSOCKET(HWND &hwndDlg) { WSAStartup(0x0101, &wsaData); udp_sd=socket(AF_INET , SOCK_DGRAM, 0);
bind(udp_sd, (LPSOCKADDR)&Local_PC, sizeof(Local_PC)); WSAAsyncSelect(udp_sd, hwndDlg, WM_USER+1, FD_READ); }
2) IDOK 模块
switch(LOWORD(wParam)) {
case IDOK: CLIENT .MYSOCK_SEND(hwndDlg); break;
=========================================== void MYSOCKET::MYSOCK_SEND(HWND &hwndDlg) { GetDlgItemText(hwndDlg, IDC_SEND, Buffer , sizeof(Buffer));
sendto(udp_sd, Buffer , strlen(Buffer), 0, (struct sockaddr *)&Remote_PC, len); }
3) IDCANCEL 模块
case IDCANCEL:
CLIENT .END_MYSOCKET(hwndDlg); EndDialog(hwndDlg, 0); break;
=========================================== void END_MYSOCKET(HWND &hwndDlg) { WSAAsyncSelect(udp_sd, hwndDlg, 0, 0);
closesocket(udp_sd); WSACleanup(); }
4) FD_READ 模块
case WM_USER+1: switch(LOWORD(lParam)) {
case FD_READ: CLIENT .MYSOCK_RECV(hwndDlg); break;
} =========================================== void MYSOCKET::MYSOCK_RECV(HWND &hwndDlg)
{ recv(udp_sd, Buffer , sizeof(Buffer), 0); SetDlgItemText(hwndDlg, IDC_RECV , Buffer);
}
三调试分析
3.1 实际完成情况
经过几天的学习及调试,该“局域网聊天程序”仅仅能实现点对点通信,不能实现一对多、多对多、多对一等通信模式,也就是说,只能开启一个客户机和一个服务器,若有多个程序副本在运行,则可能导致接收以及发送数据的混乱。
用户在输入数据的时候不能包含换行符号,即只能输入一行信息。
用户在接受数据的时候,不能判定它是来自哪台主机。
服务器端不能自动发现上线的客户端,同样客户端也不能自动发现上线的服务器端,两者都是在假设对方在线的前提下发送数据的,这是因为该“局域网聊天程序”是基于UDP协议编写的,它是无连接的协议。
3.2 出现的问题及解决方案
1)C++类的封装性
封装就是把对象的属性和操作结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。通过对抽象结果进行封装,将一部分行为作为外部访问的接口与外部发送联系,而将数据和其他行为进行有效隐藏,就可以达到对数据访问权限的合理控制。通过这种有效隐藏和合理控制,就可以增强数据的安全性,减轻开发软件系统的难度。在类中,封装是通过存取权限实现的。
虽然封装性是C++的一个重要特点,但在编写“局域网聊天程序”的时候给我造成了很大的阻碍。
起初我是把负责“接收”、“发送”数据的缓冲变量“Buffer”封装在类中(私有成员),但操作Buffer的函数(如GetDlgItemText、SetDlgItemText)都是在类外访问Buffer变量,开始以为通过return语句把指针传送到对象外就能操作对象里面的Buffer变量,但经过一段时间的测试,程序不能正常运行。
所以我改变了类的封装方式,不但把Buffer变量封装在类里面,而且把操作Buffer变量的函数也封装为类中的某些成员函数,这样就解决了C++类的封装特性给我带来的问题。
2)对象是自动变量
局部变量,如不作专门说明为静态变量,都是动态分配存储空间,存储在动态存储区中。这种变量叫自动变量。这种变量只在定义它们的时候才创建,在定义它们的函数返回时系统回收变量所占存储空间。对这些变量存储空间的分配和回收是由系统自动完成的,所以也叫自动变量。一般情况下,不作专门说明的局部变量,均是自动变量。
BOOL DialogProc(HWND hwndDlg,UINT UMsg,WPARAM wParsam,LPARAM lParam)
{
static MYSOCKET CLIENT(TEXT("127.0.0.1"), 4321, TEXT("127.0.0.1"), 6321);
switch(UMsg)
{
case WM_INITDIALOG:
CLIENT.INIT_MYSOCKET(hwndDlg); //初始化套接字
……………………………….
DialogProc函数是系统指定的对话框消息处理回调函数,它是被系统自动地根据用户消息调用。而且发送
7
C++面向对象课程设计报告:局域网聊天程序给该函数的消息“WM_INITDIALOG”只有在初始化对话框时才被调用,由于局部变量默认是自动变量,所以由MYSOCKET类构造的CLIENT对象在每次系统回调该函数的时候,都会被初始化一遍,而这种操作破坏了套接字与本地信息的绑定,因此服务器端于客户机端程序不能正常通信。
解决这个问题的方法就是使用static操作符使变量变成静态值,使CLIENT对象在函数在多次被调用时,能够维持它的原始值。
即把语句
MYSOCKET CLIENT(TEXT("127. …… 此处隐藏:8180字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [实用文档]李践-有效提升销售的12大黄金法则8-大
- [实用文档]党支部换届工作方案
- [实用文档]2013年下期电子商务专业部宣传工作计划
- [实用文档]方庄一矿通风、钻探绩效工资考核管理办
- [实用文档]项目一 认识企业物流认识企业物流
- [实用文档]MBI_Display_产品蓝图规画
- [实用文档]北京市建筑业劳务作业人员普法维权培训
- [实用文档]锅炉燃烧调整与运行优化
- [实用文档]4支付结算业务的核算
- [实用文档]米什金_货币金融学_第9版各章学习指导
- [实用文档]水泥混凝土路面硬化工程施工组织设计
- [实用文档]钢筋工程安全技术交底书
- [实用文档]关于公布华中师范大学本科毕业论文
- [实用文档]太原市园林绿化施工合同范本 2
- [实用文档]周日辅导 初中英语分类复习单项选择题(
- [实用文档]第四章 文化经纪人的管理形式 第二节
- [实用文档]学宪法讲宪法竞赛题库
- [实用文档]《数值计算方法》期末考试模拟试题二
- [实用文档]爱词霸学英语:每日一句( 十月)
- [实用文档]2014年国家公务员面试:无领导小组讨论
- 新课程主要理念和教学案例分析汇编(24
- 英国人的快乐源于幸福的家庭生活
- 七年级上册第一次月考模拟数学试卷
- 真丝及仿真丝的种类有哪些?
- 【最新】华师大版八年级数学下册第十六
- 高中英语3500个必背单词
- 我可以接受失败,但我不能接受放弃!
- 最近更新沪科版八年级物理上册期末试卷
- 绿化工作先进乡镇事迹材料
- 鲁教版九年级上册思想品德教学计划
- 英语音标的分类
- 地下室底板无梁楼盖与普通梁板结构形式
- 美容师黄金销售话术
- 雅思写作满分作文备考方法
- 血清甲状腺激素测定与高频彩色多普勒超
- 1度浅析装修对室内空气品质的影响
- 2017-2022年中国汞矿行业深度分析与投
- 计算机二级VB公共基础知识
- (何勇)秸秆禁烧_重在寻找出路
- 内外墙抹灰工程分包施工合同1




