- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
赵凯可视化程序设计考查作业-编写一个网络聊天软件讲述
目录
一、设计分析 2
二、需求分析 2
三、程序结构 3
四、源程序 4
五、操作方法及结果 10
六、实验结果 11
七、设计体会 12
一、设计分析
1、该程序实现局域网内的聊天功能,包括服务器端程序和客户端程序两部分。
客户端程序:可连接到服务器,并将消息发送到服务器端和接受服务器端发送到的消息。
服务器端程序:负责发送用户列表和转发客户端发送过来的消息。
本程序涉及到服务器端和客户端,采用同一个套接字。
2、该聊天软件是采用UDP连接,UDP是OSI参考模型中一种无连接的传输层协议,它提供了简单不可靠的信息传送服务。由于UDP比较简单,UDP包含很少的字节,所以它在速度方面有很大优势。很多常用的即时通软件,如QQ程序,都会使用UDP实现很多基本功能。UDP是“面向非连接”的网络协议,它与“面向连接”的TCP协议对应。在发送数据之前,并不与对方建立连接,而是直接把数据报发出去,不保证可靠的传输。UDP相对TCP简单,在速度方面有很大优势,因为它的网络开销少,对传输可靠性要求不是很高的情况下,UDP的使用是网络程序的首选。
3、要实现聊天功能必须获取两台计算机的IP地。在IP地址控件栏输入参与聊天对象的计算机的IP地址。
4、本程序的核心在于将消息的发送的和接收发在了两个不同的线程中,接收放在新创建的副进程中,因为其要一直处于响应状态,也就是需要一个while循环;发送放在主线程中。这样消息的接收和发送就不存在先后顺序了,且一直处于循环中的接收也不会影响到发送。
5、程序代码中的新线程入口函数中可能没有必要传递两个参数进去,其中SOCKET参数可以在入口函数内部创建, SOCKET变量也就是声明是TCP还是UDP,和发送或接收没有必然的联系,如果这样的话,就没有必要声明“详细设计”第五步中的结构体了,CreateThread方法也刚好传递一个参数,即当前窗口的句柄。
二、需求分析
1、在VC++6.0中MFC中创建新文档,选中基本对话框栏,然后进行对话框的设置,选择不同的控件,分别设置接收数据、发送数据和发送的控件。
2、对需要用的变量进行定义并初始化等。
3、实现不同的功能响应不同的消息处理函数,实现套接字绑定获取IP地址等功能。
4、理解CWinApp中的InitInstance函数的用法及功能。
5、WSACleanup函数的调用与终止等。
6、各种不同代码的功能与实现原理。
三、程序结构
1、对需要用的变量进行定义或申明。
2、调用相应的MFC内置函数,对相应的变量进行初始化等操作。
3、程序设计的概要流程图如下:
图1 程序设计流程图
四、源程序
1、创建一个基于对话框的MFC程序设计,界面如下:
图2 对话框界面
2、添加套接字库头文件:
函数能准确保证程序终止前调用WSACleanup的调用,该函数其实也是调用Win32中的WSAStartup,该函数的调用位置最好在CWinApp中的InitInstance中,包含头文件Afxsock.h,在StdAfx.h这个头文件中调用MFC的内置函数AfxSocketInit,该函数其他也是调用Win32中的WSASAtartup,该进行包含。StdAfx.h头文件是一个预编译头文件,在该文件中包含了MFC程序运行的一些必要的头文件,如afxwin.h这样的MFC核心头文件等。一些必要的头文件,如afxwin.h这样的MFC核心头文件等。它是一个被程序加载的文件。
3、加载套接字库:
在CWinApp中的InitInstance添加如下代码:
if(FALSE==AfxSocketInit())
??????{
???????????AfxMessageBox(套接字库加载失败!);
???????????return?FALSE;
}
4、创建套接字:
将自己假想成服务器端,进行套接字和地址结构的绑定,等待别人发送消息过来。
在CDialog中
添加成员变量:SOCKET m_socket
添加自定义函数:
BOOL CChatDlg::InitSocket()
{
??? m_socket=socket(AF_INET,SOCK_DGRAM,0); //UDP连接方式
??????if(INVALID_SOCKET==m_socket)
??????{
???????????MessageBox(套接字创建失败!);
???????????return?FALSE;
??????}
??????SOCKADDR_IN addrServer;?//将自己假想成server
??????addrServer.sin_addr.S_un.S_addr=htonl(I
您可能关注的文档
- 走进化学科学概述讲述.ppt
- 走进市场-市场扫描讲述.ppt
- 走进实验室ppt课件讲述.ppt
- 走进心理学和学会快乐讲述.ppt
- 走进性科学期末线下考试(题库)讲述.doc
- 走进家乡——石狮讲述.ppt
- 走进数学课堂的多媒体讲述.doc
- 走进心理学、走进我们自己讲述.ppt
- 赖丁——城市内部空间结构-3讲述.ppt
- 走进法律公开课讲述.ppt
- 2024_2025学年高中物理随堂小练11万有引力理论的成就含解析新人教版必修第二册.doc
- 部编版八年级上册道德与法治第一课丰富的社会生活课堂练习.docx
- 2024高考地理二轮复习微专题九建设美丽中国学案.docx
- 硅酸钙-复合蛋白涂层的制备及表征.doc
- 临终患者和家属心理护理.pptx
- 江西省宜春市2024-2025学年高二上学期开学考试语文含答案及解析.pdf
- 护士职业生涯规划课程.pptx
- 试卷09-2021年浙江省中考科学模拟卷(衢州专用)(原卷版).docx
- 2024_2025学年新教材高中生物第一章遗传因子的发现第1节第2课时对分离现象解释的验证和分离定律教案新人教版必修第二册.doc
- 少儿美术教学课件-梨子结构.pptx
文档评论(0)