ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:74.37KB ,
资源ID:9237959      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9237959.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MFC VC++简单的聊天程序网络程序设计课程设计报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

MFC VC++简单的聊天程序网络程序设计课程设计报告.docx

1、MFC VC+简单的聊天程序网络程序设计课程设计报告网络程序设计课 程 设 计 报 告 书题 目: 简单的聊天室程序 专 业: 软件工程 学 号: * *完成日期: 2016.1.9 一、题目及要求本题是一个简单的聊天室程序,采用客户/服务器模式,分为客户端程序和服务器端程序。由于服务器只能支持一个客户,实际上是一个点对点通信的程序。客户端程序和服务器程序通过网络交换聊天字符串内容,并在窗口的列表框中显示。本实例程序的技术要点是:如何从CasyncSocket类派生出自己的WinSock类。理解WinSock类与应用程序框架的关系。重点学习流式套接字对象的使用。处理网络事件的方法。本程序的需求

2、主要为以下几点:用户端之间的信息发送,本程序需要实现的最基本的功能。用户在界面上可以将自己需要发送的信息填入相应的对话框中,点击发送按钮后,可以将信息正常的发送给相应的其它用户,这个过程中的客户端与客户端之间使用点对点发送信息。在C/S模式中,服务器与客户端是相互依赖的。在客户端启用以后,需要查看服务器端是否在监听状态,服务器在监听状态才能正常使用客户端,如果服务器不在监听状态,则在检测一定次数以后自动退出客户端程序。二、系统概要设计2.1 使用的函数介绍:1)BOOLCAsyncSocket:Create(UINTnSocketPort=0,intnSocketType=SOCK_STREA

3、M,longlEvent=FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT|FD_CLOSE,LPCTSTRlpszSocketAddress=NULL);用于创建一个本地套接口,其中nSocketPort为使用的端口号,为零则表示由系统自动选择,通常在客户端都使用这个选择。nSocketType为使用的协议族,SOCK_STREAM表明使用有连接的服务,SOCK_DGRAM表明使用无连接的数据报服务。lpszSocketAddress为本地的IP地址。2)BOOLCAsyncSocket:Bind(UINTnSocketPort,LPCTSTRlpsz

4、SocketAddress=NULL)作为等待连接方时产生一个网络半关联,或者是使用UDP协议时产生一个网络半关联。3)BOOLCAsyncSocket:Listen(intnConnectionBacklog=5)作为等待连接方时指明同时可以接受的连接数,请注意不是总共可以接受的连接数。4)BOOLCAsyncSocket:Accept(CAsyncSocket&rConnectedSocket,SOCKADDR*lpSockAddr=NULL,int*lpSockAddrLen=NULL)作为等待连接方将等待连接建立,当连接建立后一个新的套接口将被创建,该套接口将会被用于通信。5)

5、BOOLCAsyncSocket:Connect(LPCTSTRlpszHostAddress,UINTnHostPort);作为连接方发起与等待连接方的连接,需要指明对方的IP地址和端口号。6)voidCAsyncSocket:Close();关闭套接口。7)intCAsyncSocket:Send(constvoid*lpBuf,intnBufLen,intnFlags=0)8)intCAsyncSocket:Receive(void*lpBuf,intnBufLen,intnFlags=0);在建立连接后发送和接收数据,nFlags为标记位,双方需要指明相同的标记。9)intCAsync

6、Socket:SendTo(constvoid*lpBuf,intnBufLen,UINTnHostPort,LPCTSTRlpszHostAddress=NULL,intnFlags=0)10)intCAsyncSocket:ReceiveFrom(void*lpBuf,intnBufLen,CString&rSocketAddress,UINT&rSocketPort,intnFlags=0);对于无连接通信发送和接收数据,需要指明对方的IP地址和端口号,nFlags为标记位,双方需要指明相同的标记。2.2 控件使用:控件ID变量名称IDC_BUTTON_CONNECTm_

7、btnConnectIDC_EDIT_SERVNAMEm_strServNameIDC_EDIT_SERVPORTm_strServPortIDC_EDIT_MSGm_strMsgIDC_LIST_SENTm_listSentIDC_LIST_RECEIVEDm_listRecetved2.3 变量声明:权限类型变量名功能publicCListBoxm_listSent发送窗口publicCListBoxm_listReceived接收窗口publicCButtonm_btnConnect连接按钮publicCStringm_strMsg要发送的信息publicCStringm_strServ

8、Name服务器名publicintm_nServPort端口publicCMySocketm_sConnectSocket套接字2.4 函数声明:返回值函数名功能voidOnReceive(int nErrorCode)接收信息voidOnClose(int nErrorCode)关闭连接voidSetParent(CTalkcDlg *pDlg)设置套接字上下文voidOnConnect(int nErrorCode)创建连接voidOnSendMsg()发送信息2.5 界面操作:(1) 客户端程序执行界面:客户端输入服务器名,端口号,点击连接,与服务器创建连接,执行对话。(2) 服务端程序

9、执行界面:服务端设置服务器名,端口号,点击监听,与等待客户端与其连接。2.6程序执行结构图:2.6.1 客户端程序的类与消息驱动图 2.6.12.6.2服务端程序的类与消息驱动图2.6.2三、系统详细设计1. 消息接收:主要应用socket的Receive(void * pBuf,int nBufSize,int nFlag=0)函数,实现消息的接收。void CTalkcDlg:OnReceive() char *pBuf=new char1025; /客户机的数据接收缓冲区 int nBufSize=1024; /可接受的最大长度 int nReceived; /实际接收到的数据长度 CS

10、tring strReceived; m_listReceived.AddString(客户机收到了OnReceive消息); /接收套接字中的服务器发送来的消息 nReceived=m_sConnectSocket.Receive(pBuf,nBufSize); if (nReceived!=SOCKET_ERROR) /接收成功吗? /如果接收成功,将字符串的结尾置为空 pBufnReceived=NULL; strReceived=pBuf; /把消息复制到串变量中 /把消息显示到“接收到的数据”列表中 m_listReceived.AddString(strReceived); Upd

11、ateData(FALSE); /更新对话框 else AfxMessageBox(信息接收错误!,MB_OK|MB_ICONSTOP); 2.消息发送:主要应用socket的Send(const void *lpBuf ,int nBufLen,int nFlag=0)函数,实现消息的发送。void CTalkcDlg:OnSendMsg() / TODO: Add your control notification handler code here int nLen; /消息的长度 int nSent; /被发送的消息的长度 UpdateData(TRUE); /从对话框获取数据 /有消

12、息需要发送吗? if (!m_strMsg.IsEmpty() nLen=m_strMsg.GetLength(); /得到消息的长度 /发送消息,返回实际发送的字节长度 nSent=m_sConnectSocket.Send(LPCTSTR(m_strMsg),nLen); if (nSent!=SOCKET_ERROR) /发送成功吗? /成功则把消息添加到发送列表框 m_listSent.AddString(m_strMsg); UpdateData(FALSE); /更新对话框 else AfxMessageBox(信息发送错误!,MB_OK|MB_ICONSTOP); m_strMs

13、g.Empty(); /清除当前的消息 UpdateData(FALSE); /更新对话框 3. 断开连接:主要用但socket的Close()函数。void CTalkcDlg:OnClose() m_sConnectSocket.Close(); /关闭客户端的连接套接字 /禁止消息发送的对话框中的控件,如“消息”文本框,“发送”按钮和“断开”按钮 GetDlgItem(IDC_EDIT_MSG)-EnableWindow(FALSE); GetDlgItem(IDOK)-EnableWindow(FALSE);/botton send GetDlgItem(IDC_STATIC_MSG)

14、-EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_CLOSE)-EnableWindow(FALSE); /清除两个列表框 while (m_listSent.GetCount()!=0) m_listSent.DeleteString(0); while (m_listReceived.GetCount()!=0) m_listReceived.DeleteString(0); /开放连接配置的相关控件,如“连接”按钮、服务器名、端口的文本框和标签 GetDlgItem(IDC_BUTTON_CONNECT) -EnableWindow(TRUE); G

15、etDlgItem(IDC_EDIT_SERVNAME) -EnableWindow(TRUE); GetDlgItem(IDC_EDIT_SERVPORT) -EnableWindow(TRUE); GetDlgItem(IDC_STATIC_SERVNAME) -EnableWindow(TRUE); GetDlgItem(IDC_STATIC_SERVPORT) -EnableWindow(TRUE);4. 连接到服务器:利用socket的Create()和Listen()函数。void CTalksDlg:OnButtonListen() / TODO: Add your contro

16、l notification handler code here /从对话框获取数据 UpdateData(TRUE); /禁止“监听”按钮,服务器名和端口的文本框 GetDlgItem(IDC_BUTTON_LISTEN)-EnableWindow(FALSE); GetDlgItem(IDC_EDIT_SERVNAME)-EnableWindow(FALSE); GetDlgItem(IDC_EDIT_SERVPORT)-EnableWindow(FALSE); GetDlgItem(IDC_STATIC_SERVNAME)-EnableWindow(FALSE); GetDlgItem(

17、IDC_STATIC_SERVPORT)-EnableWindow(FALSE); /用指定的端口创建服务器端监听套接字对象的底层套接字 m_sListenSocket.Create(m_nServPort); /开始监听客户机端的连接请求 m_sListenSocket.Listen();四、课程设计总结在这次课程设计中我的收获颇多对WinSocket编程有了更深入的了解,能够把课上学的理论知识应用到实践中去,但因为种种条件的限制,该管理系统还存在不少的缺限和漏洞,我们会在以后的时间里完善该系统。两个星期的课程设计已经结束了。无论我的设计是否能够真的投入使用,但是每一句代码的编写,每一行语句的调试,每一段文本的输入之中都有我们辛勤的汗水。 设计时间虽然不长,我们却从中学到了很多的东西。在这段时间里,我们得到了指导老师的大力支持和帮助,较顺利的完成了实践任务。在这里,特向我们的指导老师表示衷心的感谢!指导教师评语:成绩: 指导教师: 年 月 日

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1