赵凯可视化程序设计考查作业-编写一个网络聊天软件讲述.docx

赵凯可视化程序设计考查作业-编写一个网络聊天软件讲述.docx

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档