您好,欢迎访问三七文档
网络编程作业1、MFC提供的两个套接字类是什么?答:CAsyncSocket类和CSocket类。2、为什么说CAsyncSocket类是在很低的层次上对WindowsSocketsAPI进行了封装?答:它的成员函数和WindowsSocketsAPI的函数调用直接对应。一个CAsyncSocket对象代表了一个Windows套接字,它是网络通信的端点,除了把套接字封装成C++的面向对象的形式供程序员使用以外,这个类唯一所增加的抽象就是将那些与套接字相关的Windows消息变为CAsyncSocket类的回调函数。3、为什么说Csocket类是对WindowsSocketsAPI的高级封装?答:CSocket类继承了CAsyncSocket类的许多成员函数,封装了windows套接字的应用程序编程接口,用法一致。CSocket类的高级表现在以下三个方面:(1)CSocket结合archive类来使用套接字。(2)CSocket管理了通信的许多方面,如字节顺序问题和字符串转换问题。(3)CSocket类为Windows消息的后台处理提供了阻塞的工作模式。4、使用CAsyncSocket类的一般步骤是什么?答:序号服务器(Server)客户机(Client)1//构建一个套接字CAsyncSocketsockSrvr;//构建一个套接字CAsyncSocketsockClient;2//创建SOCKET句柄,绑定到指定的端口sockSrvr.Create(nPort);//创建SOCKET句柄,使用默认参数sockClient.Create();3//启动监听,时刻准备接受连接请求sockSrvr.Listen();4//请求连接到服务器sockClient.Connect(strAddr,nport);5//构造一个新的空的套接字CasyncSocketsockRecv;//接收连接sockSrvr.Accept(sockRecv);6//接收数据sockSrvr.Receive(pBuf,nLen);//发送数据sockClient.Send(pBuf,nLen);7//发送数据sockSrvr.Send(pBuf,nLen);//接收数据sockClient.Receive(pBuf,nLen);8//关闭套接字对象//关闭套接字对象sockSrvr.Close();sockClient.Close();5、CAsyncSocket类可以接受并处理哪些消息事件?当这些网络事件发生时,MFC框架作何处理?答:MFC套接字对象可以接受并处理的六种网络事件:(1)FD_READ事件通知:通知有数据可读。(2)FD_WRITE事件通知:通知可以写数据。(3)FD_ACCEPT事件通知:通知监听套接字有连接请求可以接受。(4)FD_CONNECT事件通知:通知请求连接的套接字,连接的要求已被处理。(5)FD_CLOSE事件通知:通知套接字已关闭。(6)FD_OOB事件通知:通知将有带外数据到达当上述网络事件发生时,按照Windows的消息驱动机制,MFC框架应当把消息发送给相应的套接字对象,并调用作为该对象成员函数的事件处理函数。事件与处理函数是一一映射的。在afxSock.h文件中的CAsyncSocket类的声明中,定义了与这六个网络事件对应的事件处理函数。virtualvoidOnReceive(intnErrorCode);对应FD_READ事件virtualvoidOnSend(intnErrorCode);对应FD_WRITE事件virtualvoidOnAccept(intnErrorCode);对应FD_ACCEPT事件virtualvoidOnConnect(intnErrorCode);对应FD_CONNECT事件virtualvoidOnClose(intnErrorCode);对应FD_CLOSE事件virtualvoidOnOutOfBandData(intnErrorCode);对应FD_OOB事件6、CSocket类如何通过Carchive对象来进行数据传输?答:使用CArchive对象和套接字一起进行数据传输工作,必须使用流式套接字。具体做法如下:(1)创建CSocket类对象(2)创建一个基于CSocketFile类的文件对象,并把他的指针传给上面所创建的CSocket类对象(3)分别创建用于输入和输出的CArchive对象,并将它们与这个CSocketFile文件对象连接(4)利用CArchive对象来发送和接收数据7、说明CSocket类的编程模型。答:针对流式套接字的CSocket类的编程类型:1.服务器端(1)CSocketsockServ;//创建空的服务器端监听套接字对象。//用众所周知的端口,创建监听套接字对象的底层套接字句柄。(2)sockServ.Create(nPort);(3)sockServ.Listen();//启动对于客户端连接请求的监听。(4)CSocketsockRecv;//创建空的服务器端连接套接字对象。sockServ.Accept(sockRecv);//接收客户端的连接请求,并将其//他的任务转交给连接套接字对象。(5)CSockFile*file;file=newCSockFile(&sockRecv);//创建文件对象并关联到连//接套接字对象。(6)CArchive*arIn,arOut;arIn=CArchive(&file,CArchive::load);//创建用于输入的//归档对象,arOut=CArchive(&file,CArchive::store);//创建用于输出的//归档对象。//归档对象必须关联到文件对象。(7)arIndwValue;//进行数据输入。adOutdwValue;//进行数据输出。输入或输出可以反复进行。(8)sockRecv.Close();sockServ.Close();//传输完毕,关闭套接字对象。2.客户端(1)CSocketsockClient;//创建空的客户机端套接字对象。(2)sockClient.Create();//创建套接字对象的底层套接字。(3)sockClient.Connect(strAddr,nPort);//请求连接到服务器。(4)CSockFile*file;file=newCSockFile(&sockClent);//创建文件对象,并关联到套接字对象。(5)CArchive*arIn,arOut;arIn=CArchive(&file,CArchive::load);//创建用于输入的归档对象,arOut=CArchive(&file,CArchive::store);//创建用于输出的归档对象。//归档对象必须关联到文件对象。(6)arIndwValue;//进行数据输入。adOutdwValue;//进行数据输出。输入或输出可以反复进行。(7)sockClient.Close();//传输完毕,关闭套接字对象。8、说明使用MFCAppWizard创建客户机端应用程序框架具体的步骤。答:在VC6.0环境下使用MFCAppWizard创建客户机端应用程序框架,将自动创建两个类,应用程序类CTalkcApp,对应的文件是talkc.h和talkc.cpp;对话框类CTalkcDlg,对应的文件是talkcDlg.h和talkcDlg.cpp。具体的步骤:(1)单击File菜单中的New选项,显示New(新建)对话框。(2)单击Project(项目)标签,在Project选项卡中,选择MFCAppWizard(exe)(MFC应用程序向导)。在Location(位置)文本框中指定一个路径,在ProjectName(项目名称)文本框中为项目输入一个名字(Talkc),单击OK按钮。(3)在弹出的MFCAppWizard-Step1of4对话框中选择DialogBased(对话框基础)单选项,然后单击下一步按钮。(4)在MFCAppWizard-Step2of4对话框中勾选windowssockets支持复选框,在标题对话框中输入想显示的窗口标题(客户端),然后单击下一步按钮。(5)其余步骤选择默认值。(6)最后在MFCAppWizard-Step4of4对话框中单击完成按钮,完成项目的建立。9、说明点对点交谈的客户机端程序的类与消息驱动关系?答:
本文标题:网络编程第五章作业
链接地址:https://www.777doc.com/doc-2142936 .html