教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 实用文档 >

C++面向对象课程设计报告(局域网聊天程序)

来源:网络收集 时间:2026-08-26
导读: XXXXX大学 C++面向对象课程设计报告 院(系):计算机工程学院 专业:计算机网络工程 学生姓名: XXXXXX 班级:_网络081__学号: 200807255 题目:局域网聊天程序 起迄日期:_2010.12.20 – 2010.12.31 设计地点: XX理工大学2#401 指导教师: XXXXXX 完

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字,全部文档内容请下载后查看。喜欢就下载吧 ……

C++面向对象课程设计报告(局域网聊天程序).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/1803539.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)