您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 基于TCP网络程序设计
计算机网络实验报告(TCP客户/服务器程序设计)班级:XXXXXXX学号:XXXXXXXXXXX姓名:刘点一、实验目的实现在TCP方式下客户端向服务器端的文件传送过程。二、实验性质综合与设计性实验。三、实验条件装有以太网卡,配置网络协议的并能实现联网的两台微机。四、实验要求实现TCP的连接建立、文件传送和连接释放的三个阶段,并将任一文件传送到服务器端,编程完成该应用程序的设计(编程语言不限)。实验报告要求有实现过程的流程图,对主要的函数及其参数给予说明,要有实现过程的主要程序段,并对各段程序的功能及作用进行说明。五、实验思想与过程TCP协议属于传输层协议,通过面向连接、端到端和可靠的数据包发送。在此,利用C语言MFCAppWizard实现简单的不同客户交流。客户端:1)使用MFCAppWizard创建客户端应用程序框架。2)为对话框界面添加控件对象在创建了应用程序骨架之后,可以布置程序的主对话框。利用控件面板可以方便地在程序的主对话框界面中添加相应的可视控件对象3)为对话框中的控件对象定义相应的成员变量4)创建从CAsyncSocket类继承的派生类为了能够捕获并响应socket事件,应创建用户自己的套接字类,它应当从CAsyncSocket类派生,还能将套接字事件传递给对话框,以便执行用户自己的事件处理函数。利用类向导ClassWizard为这个套接字类添加响应消息的事件处理成员函数。为套接字类添加一般的成员函数和成员变量5)添加的代码在CTcDlg对话框类的tcDlg.h中添加对于CSocket.h的包含命令,来获得对于套接字支持:#include“CSocket.h”在CTcDlg对话框类的TcDlg.cpp中添加对于控件变量的初始化代码://TODO:Addextrainitializationhere//用户添加的控件变量的初始化代码BOOLCTcDlg::OnInitDialog(){m_strServName=localhost;//服务器名=localhostm_nServPort=1000;//服务端口=1000UpdateData(FALSE);//更新用户界面//设置套接字类的对话框指针成员变量m_sConnectSocket.SetParent(this);}6)添加事件函数和成员函数的代码主要在CTcDlg对话框类的tcDlg.cpp中和CCSocket类的Csocket.cpp中,添加用户自己的事件函数和成员函数的代码。7)进行测试。测试应分步进行,在上面的步骤中,每作一步,都可以试着编译执行。六、部分代码及其说明//CSocket.cpp:implementationoftheCCSocketclass.////////////////////////////////////////////////////////////////////////#includestdafx.h#includets.h#includeCSocket.h#includetsDlg.h#includeMsg.h#ifdef_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#definenewDEBUG_NEW#endif////////////////////////////////////////////////////////////////////////Construction/Destruction////////////////////////////////////////////////////////////////////////构造函数CCSocket::CCSocket(CTsDlg*pDlg){m_pDlg=pDlg;m_pFile=NULL;m_pArchiveIn=NULL;m_pArchiveOut=NULL;}//析构函数CCSocket::~CCSocket(){m_pDlg=NULL;if(m_pArchiveOut!=NULL)deletem_pArchiveOut;if(m_pArchiveIn!=NULL)deletem_pArchiveIn;if(m_pFile!=NULL)deletem_pFile;}//初始化voidCCSocket::Initialize(){//构造与此套接字相应的CSocketFile对象m_pFile=newCSocketFile(this,TRUE);//构造与此套接字相应的CArchive对象m_pArchiveIn=newCArchive(m_pFile,CArchive::load);m_pArchiveOut=newCArchive(m_pFile,CArchive::store);}//发送消息voidCCSocket::SendMessage(CMsg*pMsg){if(m_pArchiveOut!=NULL){//调用消息类的序列化函数,发送消息pMsg-Serialize(*m_pArchiveOut);//将CArchive对象中的数据强制性写入CSocketFile文件中m_pArchiveOut-Flush();}}//接收消息voidCCSocket::ReceiveMessage(CMsg*pMsg){//调用消息类的序列化函数,接收消息pMsg-Serialize(*m_pArchiveIn);}//OnReceive事件处理函数,当套接字收到数据时,激发此事件voidCCSocket::OnReceive(intnErrorCode){CSocket::OnReceive(nErrorCode);//调用主对话框类中的相应函数来处理m_pDlg-OnReceive(this);}IMPLEMENT_DYNAMIC(CCSocket,CSocket)CSocket.h//CSocket.h:interfacefortheCCSocketclass.////////////////////////////////////////////////////////////////////////#if!defined(AFX_CSOCKET_H__INCLUDED_)#defineAFX_CSOCKET_H__INCLUDED_classCTsDlg;classCMsg;//用于建立连接和传送接收信息的客户套接字类定义classCCSocket:publicCSocket{DECLARE_DYNAMIC(CCSocket);//Constructionpublic:CCSocket(CTsDlg*pDlg);//构造函数virtual~CCSocket();//析构函数//Attributespublic:CTsDlg*m_pDlg;//主对话框类指针变量CSocketFile*m_pFile;//CSocketFile对象的指针变量CArchive*m_pArchiveIn;//用于输入的CArchive对象的指针变量CArchive*m_pArchiveOut;//用于输出的CArchive对象的指针变量//Operationspublic:voidInitialize();//初始化voidSendMessage(CMsg*pMsg);//发送消息voidReceiveMessage(CMsg*pMsg);//接收消息//Overridablecallbacks//可重载的回调函数,当套接字收到数据时,自动调用此函数protected:virtualvoidOnReceive(intnErrorCode);};#endif//!defined(AFX_CSOCKET_H__INCLUDED_)LSocket.cpp//LSocket.cpp:implementationoftheCLSocketclass.////////////////////////////////////////////////////////////////////////#includestdafx.h#includets.h#includeLSocket.h#includetsDlg.h#ifdef_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#definenewDEBUG_NEW#endif////////////////////////////////////////////////////////////////////////Construction/Destruction//////////////////////////////////////////////////////////////////////CLSocket::CLSocket(CTsDlg*pDlg){m_pDlg=pDlg;//对成员变量赋值}CLSocket::~CLSocket(){m_pDlg=NULL;}//OnAccept事件处理函数voidCLSocket::OnAccept(intnErrorCode){CSocket::OnAccept(nErrorCode);m_pDlg-OnAccept();////调用主对话框类中的相应函数}IMPLEMENT_DYNAMIC(CLSocket,CSocket)LSocket.h//LSocket.h:interfacefortheCLSocketclass.////////////////////////////////////////////////////////////////////////#if!defined(AFX_LSOCKET_H__INCLUDED_)#defineAFX_LSOCKET_H__INCLUDED_classCTsDlg;//专用于监听客户端连接请求的侦听套接字类定义classCLSocket:publicCSocket{DECLARE_DYNAMIC(CLSocket);//Constructionpublic:CLSocket(CTsDlg*pDlg);virtual~CLSocket();//Attributespublic:CTsDlg*m_pDlg;//成员变量//OverridableCallbacks//可重载的回调函数,当套接字收到连接请求时,自动调用此函数protected:virtualvoidOnAccept(intnErrorCode);};#endif//!defined(AFX_LSOCKET_H__INCLUDED_)Msg.cpp//Msg.cpp:implementationoftheCMsgclass.////////////////////////////////////////////////////////////////////////#includestdafx.h#includets.h#includeMsg.h#ifdef_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#definenewDEBUG_NEW#endif////////////////////////////////////////////////////////////////////////Construction/Destruction//////////////////////////////////////////////////////////////////////CMsg::CMsg(){m_strText=_T();//初始化m_bClose=FALSE;}CMsg::~CMsg(){}voidCMsg::Serialize(CArchive&ar){if(ar.IsStoring()){ar(WORD)m_bClose;arm_st
本文标题:基于TCP网络程序设计
链接地址:https://www.777doc.com/doc-2572364 .html