基于对话框聊天程序.doc

基于对话框聊天程序.doc

ID:55698336

大小:80.50 KB

页数:9页

时间:2020-05-25

基于对话框聊天程序.doc_第1页
基于对话框聊天程序.doc_第2页
基于对话框聊天程序.doc_第3页
基于对话框聊天程序.doc_第4页
基于对话框聊天程序.doc_第5页
资源描述:

《基于对话框聊天程序.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、基于对话框的聊天程序一、实验目的:通过对网络编程的学习,设计一个基于对话框的聊天程序,实现发送与接收,完成了由接受知识到掌握技能的转化。本课程设计为学生提供了一个既动手又动脑,自学、查资料、独立实践的机会。将本学期课本上的理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力,提高学生适应实际、实践编程的能力,使对C++系统编程有了更加深刻的了解。二、实验内容:本课程设计主要解决客户端与服务器端的信息交换。此程序主要分为两个部分:服务器端和客户端。服务器端用于提供一个网络端口,等待客户端发出请求,登录到此服务器端,然后进行网络通迅。客户端可通过服务器端的端口发送连接请求,然

2、后登录聊天室。启动服务器聊天程序。这时聊天服务器需要指定一个端口号,客户端则根据这个端口号以及服务器的网络地址进行通信。通过分析,该程序完全可以在VisualC++中MFC完成三、总体设计思路:设计要求:采用客户端/服务器模式,分为客户端与服务器端程序功能要求:客户端能够与服务器连接,客户端能够发送信息,服务器端能够接收信息。主要功能描述:这个聊天室应用程序是基于客户端/服务器端模型的,一个服务器只能支持一个客户,因此它实际上是一个基于“点对点”模型的应用程序。通过这个应用程序,用户可以在两台计算机之间进行字符串传输—即可以为两个人进行网上聊天提供服务,而且两个人的传输的字符串被保留在

3、程序的列表框中,并且进行分类,分为传送和接收的字符串。四.实验流程:1.首先利用对话框建立聊天程序的界面:如下最上面是一个接受数据的编辑框,下面分别是一个接收IP地址和发送数据的编辑框,左下角是发送数据的按钮。2.加载套接字库。在MFC中AfxSocketInit()加载套接字库。需要注意的是这个函数要在程序的初始化函数中调用,即在Appliacation的InitInstance()中调用AfxSocketInit()。所以设置一个if语句判断是否加载成功:if(!AfxSocketInit()){AfxMessageBox("加载套接字失败");returnFALSE;}3.初始化

4、套接字。在CBDlg中添加一个成员函数InitSock(),用来初始化套接字,BOOLCBDlg::InitSocket(){m_socket=socket(AF_INET,SOCK_DGRAM,0);if(INVALID_SOCKET==m_socket){MessageBox("套接字创建失败!");returnFALSE;}SOCKADDR_INaddrSock;addrSock.sin_family=AF_INET;addrSock.sin_port=htons(6000);addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//IN

5、ADDR_ANY表示接受任意地址intretval;//用来接受bind返回值retval=bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));if(SOCKET_ERROR==retval){closesocket(m_socket);MessageBox("绑定失败");returnFALSE;}}很重要的一点是之后在对话框初始化函数OnInitDlg()中调用InitSock()。4.编写接收端程序1)创建多线程。接受数据时,如没有数据到来,则会阻塞,导致程序暂停运行,所以把接受数据工作放到单独的线程中。在OnInitDlg(

6、)中创建多线程。因为需要给线程传递一个通信的套接字和响应消息的窗口句柄,所以需要额外定义一个结构体,用来存储这两个参数。structRECVPARAM{SOCKETsock;HWNDhwnd;};2).实现线程过程函数。如果要求不能用全局函数的话,那线程过程函数就要定义为static(它属于类本身).在线程过程函数中循环接受消息,利用::PostMessgae()函数给接受数据编辑框发送消息,以实现显示信息的功能。3).自定义消息的实现。因为在PostMessage中是自定义的消息(WM_RECVDATA),所以需要完成消息映射。(1)定义消息值:#defineWM_RECVDATAW

7、M_USER+1(2)声明消息处理函数:afx_msgvoidOnRecvData(WPARAMwParam,LPARAMlParam);(3)完成消息映射:ON_MESSAGE(WM_RECVDATA,OnRecvData)4).实现OnRecvData()函数。voidCBDlg::OnRecvData(WPARAMwParam,LPARAMlParam){CStringstr=(char*)lParam;CStringstrTemp;Ge

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。