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

上传人:夏** 文档编号:470031638 上传时间:2023-11-07 格式:DOC 页数:19 大小:306KB
返回 下载 相关 举报
C面向对象课程设计报告局域网聊天程序_第1页
第1页 / 共19页
C面向对象课程设计报告局域网聊天程序_第2页
第2页 / 共19页
C面向对象课程设计报告局域网聊天程序_第3页
第3页 / 共19页
C面向对象课程设计报告局域网聊天程序_第4页
第4页 / 共19页
C面向对象课程设计报告局域网聊天程序_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《C面向对象课程设计报告局域网聊天程序》由会员分享,可在线阅读,更多相关《C面向对象课程设计报告局域网聊天程序(19页珍藏版)》请在金锄头文库上搜索。

1、 . . . XXXXX大学C+面向对象课程设计报告院(系): 计算机工程学院 专业: 计算机网络工程 学生: XXXXXX 班级:网络081学号: 200807255 题目: 局域网聊天程序 起迄日期: 2010.12.20 2010.12.31 设计地点: XX理工大学2#401 指导教师: XXXXXX 完成日期: 2010 年 12 月 31 日目录一 需求分析31.1 客户机端31.2 服务器端3二 设计容42.1 程序整体结构42.2 各部分子模块功能52.3 各子模块代码编写6三 调试分析83.1 实际完成情况83.2 出现的问题与解决方案83.3 可以改进的地方93.4 可以扩

2、充的功能10四 用户手册114.1 程序主界面114.2 获取本地信息114.3 发送信息124.4 接收信息124.5 总体演示12五 设计总结13六 参考文献14七 附录151 需求分析此次开发的网络聊天工具可作为个人的交流工具使用,通信的安全性不是很高,但要求信息的响应速度要较快,让用户充分享受到网络即时消息的方便和快捷。本聊天工具由服务器端程序和客户端程序两部分组成,整体采用C+平台开发,没有使用管理数据库。服务器和与客户端都包含与用户的交互式界面,它有必要的界面的按钮,向用户提供网络即时消息的功能。本聊天需要包含如下本功能:1.1 客户机端 获取本地IP地址 获取本地通信端口 获取远

3、程IP地址 获取本地主机名 获取从服务器端发送过来的信息 给服务器发送用户自定义的数据1.2 服务器端 获取本地IP地址 获取本地通信端口 获取远程IP地址 获取本地主机名 获取从服务器端发送过来的信息 向客户机发送用户自定义的数据2 设计容2.1 程序整体结构WinMain()(主函数)DialogBoxParam()(生成对话框)DialogProc()(对话框消息处理函数)消息队列用户操作(点击确定、点击关闭)WM_INITDIALOG(对话框初始化)WM_COMMAND(用户命令)WM_USE+1(用注册消息)IDOK(用户点击确定)IDCANCEL(用户点击关闭)FD_READ(读取

4、信息消息)2.2 各部分子模块功能WM_INITDIALOG(对话框初始化)IDOK(用户点击确定)IDCANCEL(用户点击关闭)FD_READ(读取信息消息)WSAStartup()(启动网络动态链接库)Socket()(产生套接字)Bind()(套接字绑定)WSAAsyncSelect()(注册自定义网络消息)Sendto()(向远程主机发送信息)Recv()(接收远程数据)GetDlgItemText()(获取用户的信息输入)SetDlgItemText()(设定对话框控件数据)WSAAsyncSelect()注册自定义网络消息Closesocket()关闭套接字WSACLeanup(

5、)(卸载网络动态链接库)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

6、_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:CLIE

7、NT.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(u

8、dp_sd, Buffer, sizeof(Buffer), 0);SetDlgItemText(hwndDlg, IDC_RECV, Buffer);3 调试分析3.1 实际完成情况经过几天的学习与调试,该“局域网聊天程序”仅仅能实现点对点通信,不能实现一对多、多对多、多对一等通信模式,也就是说,只能开启一个客户机和一个服务器,若有多个程序副本在运行,则可能导致接收以与发送数据的混乱。用户在输入数据的时候不能包含换行符号,即只能输入一行信息。用户在接受数据的时候,不能判定它是来自哪台主机。服务器端不能自动发现上线的客户端,同样客户端也不能自动发现上线的服务器端,两者都是在假设对方在线的前提下

9、发送数据的,这是因为该“局域网聊天程序”是基于UDP协议编写的,它是无连接的协议。3.2 出现的问题与解决方案1) C+类的封装性封装就是把对象的属性和操作结合成一个独立的系统单位,并尽可能隐蔽对象的部细节。通过对抽象结果进行封装,将一部分行为作为外部访问的接口与外部发送联系,而将数据和其他行为进行有效隐藏,就可以达到对数据访问权限的合理控制。通过这种有效隐藏和合理控制,就可以增强数据的安全性,减轻开发软件系统的难度。在类中,封装是通过存取权限实现的。虽然封装性是C+的一个重要特点,但在编写“局域网聊天程序”的时候给我造成了很大的阻碍。起初我是把负责“接收”、“发送”数据的缓冲变量“Buffe

10、r”封装在类中(私有成员),但操作Buffer的函数(如GetDlgItemText、 SetDlgItemText)都是在类外访问Buffer变量,开始以为通过return语句把指针传送到对象外就能操作对象里面的Buffer变量,但经过一段时间的测试,程序不能正常运行。所以我改变了类的封装方式,不但把Buffer变量封装在类里面,而且把操作Buffer变量的函数也封装为类中的某些成员函数,这样就解决了C+类的封装特性给我带来的问题。2) 对象是自动变量局部变量,如不作专门说明为静态变量,都是动态分配存储空间,存储在动态存储区中。这种变量叫自动变量。这种变量只在定义它们的时候才创建,在定义它们

11、的函数返回时系统回收变量所占存储空间。对这些变量存储空间的分配和回收是由系统自动完成的,所以也叫自动变量。一般情况下,不作专门说明的局部变量,均是自动变量。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函数是系统

12、指定的对话框消息处理回调函数,它是被系统自动地根据用户消息调用。而且发送给该函数的消息“WM_INITDIALOG”只有在初始化对话框时才被调用,由于局部变量默认是自动变量,所以由MYSOCKET类构造的CLIENT对象在每次系统回调该函数的时候,都会被初始化一遍,而这种操作破坏了套接字与本地信息的绑定,因此服务器端于客户机端程序不能正常通信。解决这个问题的方法就是使用static操作符使变量变成静态值,使CLIENT对象在函数在多次被调用时,能够维持它的原始值。即把语句MYSOCKET CLIENT(TEXT(127.0.0.1), 4321, TEXT(127.0.0.1), 6321);

13、改变为语句static MYSOCKET CLIENT(TEXT(127.0.0.1), 4321, TEXT(127.0.0.1), 6321);程序正常运行3) 端口冲突程序给服务器端分配的的端口号是5000, 给客户机端分配的端口号是4000。程序一直运行的很正常,但偶然的一次测试发现程序间不能正常通信,经过反复的调试、测试并没有发现代码中存在什么问题。我试着改了改端口号服务器端:6321;客户机端:4321。测试通过了。3.3 可以改进的地方1) 用户界面用VC+开发的界面生硬、死板,并不友好,若能使用一些开发程序皮肤的库文件,使用户界面更加友好。3.4 可以扩充的功能1) 多用户聊天本程序的逻辑拓扑可以从基于UDP无连接协议的“点对点”拓扑,转化为基于TCP面向连接的“星型”拓扑,以实现多用户之间的回话。若能采用TCP协议,用户间的通信时通过服务器的转发功能实现的,服务器端程序不修改接收的的信息,只充当“数据转发角色”,把数据按照用户想要传送的目的地发送到目的。假设客户机A想要把数据发送给客户机B,客户机A先把数据发送给服务器端,然后服务器将数据转发给客户机B,这样对客户机A而言,服务器端是透明的,好像是客户机直接在跟客户机B通信一样。具体的拓扑如下图所示:2)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号