欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    网络通信原理大作业--基于TCP的ATM系统.docx

    • 资源ID:6685424       资源大小:348.69KB        全文页数:19页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    网络通信原理大作业--基于TCP的ATM系统.docx

    网络通信原理大作业基于TCP的ATM系统目录一、实验目标31.1 设计目标31.2 完成功能3二、实验原理42.1 TCP在TCP/IP协议簇中的位置及特点42.2 TCP的SOCKET实现42.3 客户端/服务器端模型的设计原理5三、程序设计63.1 程序主要类结构63.2 建立/关闭SOCket63.2.1 建立SOCket63.2.2 收发数据73.2.3 关闭Socket83.3 ATM终端操作和服务器端响应程序93.3.1 查询93.3.2 取款93.3.3 存款103.3.4 修改密码11四、开发工具12五、测试报告125.1 测试环境125.2 测试方法和步骤125.2.1 服务器端125.2.2 ATM终端135.3 测试结果19六、软件开发总结196.1 软件开发的收获196.2 难点问题的处理及待完善的问题19七、参考文献19一、实验目标1.1 设计目标TCPTransmissionControlProtocol的简称,是一种面向连接的、可靠的、基于字节流的传输层通信协议。本设计采用基于TCP协议的Soek编程,通过实现网络数据发送和接收功能,模拟简单的银行ATM系统,包括ATM终端机和银行服务器。1.2 完成功能(I)ATM终端机初始化,保证输入正确的服务器地址和端口号,才能成功连接到银行服务器,进行后续操作。(2)用户在ATM终端机上输入正确的卡号和密码后,进入ATM终端机操作界面,通过TCP的socket发送相关操作命令和数据给银行服务器。(3)银行服务器准确接收ATM终端机发送过来的命令和数据。(4)根据接收的命令和数据,对ATM终端机的相关命令进行响应,对相关数据进行处理,并将用户操作过程显示出来。程序界面如下:图1 ATM终端机操作界面号号号号号号号号号号号号号号111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, Iiniiiii, 111111111,功码码码其码作图2银行服务器显示界面二、实验原理2.1 TCP在TCP/IP协议簇中的位置及特点图3TCP/IP体系结构使用TCP通信有以下特点:(1)面向连接的传输;(2)端到端的通信;(3)高可靠性,确保传输数据的正确性,不易出现丢失或乱序;(4)全双工方式传输;(5)采用字节流方式,即以字节为单位传输字节序列;(6)紧急数据传送功能。2.2 TCP的SOCKET实现套接字是支持TCP/IP协议的网络通信的基本操作单元,可以将套接字看做不用主机间的进程进行双向通信的端点,在网络编程中最常用的方案便是客户端/服务器端模型,简称C/S模型。根据传输数据类型的不同,套接字可分为面向连接的字节流套接字(Streamsockets)和无连接的数据报套接字(datagramsockets)两种类型。面向连接的套接字系统调用时序如图4所示。字节流不按记录定界,在TCP/IP协议簇中对应TCP协议,它是一个提供给用户进程的可靠的全双工的面向连接的协议,大多数Internet应用程序如ftp、telnet使用TCP协议。图4而向连接的套接字系统调用时序2.3 客户端/服务器端模型的设计原理客户端/服务器端模型(简称C/S模型)是一种网络模型,描述了一种网络程序运行的方式。它将网络应用程序分为客户端和服务器端两部分。客户端对服务器端发送信息请求,服务器端对其做出相应回答,提供服务。在TCP/IP网络应用中,多数网络应用程序是使用客户端/服务器端模型设计的。服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户程序提出了请求信息。此时,服务程序被“惊醒”并且为客户提供服务,对客户的请求作出适当的反应。当建立服务器程序时,应该将服务器程序设计成等候客户的请求。我们知道,TCP传输层通过协议端口和应用程序(像服务器和客户)通信,也就是说,为了按收客户请求,服务器程序必须对传输层的一个特定协议端口进行侦听。当服务器配置SOCket接口时,它使用bind()函数让SOCket执行体登记一个协议端口。也就是说,程序告诉SOCket执行体使用哪一个协议端口进行数据传送。SOCket执行体接着告诉传输层某个特定协议端口已被使用,并将其收到的所有数据传送给SocketAPIo本系统采用C/S模型,使用从MFC类中的CAsyncSocket类的派生类进行实现底层通讯。服务器运行的流程为:服务器运行后,开启服务,则服务器开始侦听用户请求,如有客户端连接上首先,发送回确认信息,然后,建立一个线程,处理接受到的数据。在线程里,按照接受到数据的类别,进行相应的处理,如有需要,会向用户发送处理的结果,或成功或失败的消息,处理结束后,线程就结束了。这样,可以实时接受每个用户的请求,不会因为处理一个用户的请求,而忽略了其它用户。服务器端主要是为协调用户之间的通讯,服务器端的设计,主要在功能上面。客户端主要是界面的设计(除了底层通讯的以外),向服务器发送加入请求,然后等待服务器的响应。若有加入的其他客户端,则可与之进行通信。三、程序设计3.1 程序主要类结构ATM终端和银行服务器端的程序主要类结构如图5所示:E 号 ATM classes 飞 CAboutDIg田 ¾ CAIterPAWDIg由 F CATMApp+ " "CATMDIg+ 飞 CAuthentificateDIg+ F CDepositDlgE ¾ CInitDIg+ 飞 COperationDIgE 飞 CRequeryDIg+ BIS CUserSocket® l CWithdrawDIg由 OGIobaIs- 摩 BankServer classes+ F CAboutDIg+ F CBankServerApp+ 飞 CBankServerDlg+ 飞 CCIientSocket* 飞 CInitDIg+ 飞 CListenSocket+ 口 Globals(a)ATM终端类结构(b)银行服务器端类结构图5程序主要类结构用户输入的实现:ATM终端通过Edit控件,根据用户选择的操作,输入需要发送的命令或数据:包括登陆、查询、存钱、取钱、钱的数目、修改密码、取卡等。结果输出的实现:命令和数据在银行服务器端的CCIiemSOCket类中处理,更新相关数据库,并将处理结果发送回ATM终端,同时将ATM终端的相关操作过程显示出来。数据的接收发送:通过ATM终端程序中的CUSerSoCket类将需要发送的命令或数据封装成TCP包发送,通过银行服务器端的CCIientSocket类接收TCP包,解析并将命令或数据进行相关操作。3.2 建立/关闭Socket3.2.1 建立SOCket首先对服务器端和ATM终端建立SoCke3服务器端创建监听套接字,准备接收连接,ATM终端建立创建套接字,请求连接到服务器,其源代码主要如下:(1)服务器端建立监听Socket弹出初始话对话框CInitDlgdig;if(dig.DoModalO三三IDOK)创建监听套节字npSocket=newCListenSocketCthis);if(npSocket->Create(dlg.nnPort+700)<if(?m_pSocket->Listen()<AfXMeSSageBOXr初始化失败,请稍候再试,ExitProcess(I);else<AfXMeSSageBoXr初始化失败,请稍候再试,,);ExitProcess(I);else<ExitProcess(I);(2)ATM终端建立SocketuoidCATMDlg-OnLogO</TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);n_pSocket=newCUserSocket;CStringbuFF;iF(?n_pSocket->Create()<msError=_T(",Unabletocreatesocket");ArXMeSSageB赢(“对不起,不能创建SoCket,请稍候再试?”);n_strID=UpdateDataiFALSE);return;>iF(mpSocket->Connect(mstrfiddressfmnPort)(n_sError=_T("UnabletoconnecttoSerUer");AFXMeSSageBO对木起,连接熊务器木版功,请稍候,试,“);1.StrID=-T(,);UpdateDataiFfiLSE);return;3.2.2收发数据建立连接后,服务器端接收ATM终端发来的命令或数据,ATM终端发送命令或数据到服务器,等待服务器响应,其源代码主要如下:(1)服务器端接收数据:处理客户端的连接信息uoidCBankSeruerDlg:ProCeSSPendingACCePt(),生成一个新的套节字与客户端通讯CClientSocket*pSocket=newCClientSocket(this);if(m_pSocket->Accept(*pSocket)<将该套节字保存起来m-connectionList.AddTail(pSocket);>elsedeletepSocket;>(2)ATM终端发送数据:BOOLCATMDlg:get_response(UINTe×ecuted-action)<intnChars=n_pSocket->Receiue(response_buF,RESPONSE_BUFFER_SIZE);if(nChars=SOCKET_ERROR)<n_sError=_T("SocketError");returnFfiLSE;>n_sResponse=responsebuf;n_sResponse=m_sResponse.LeFt(nChars);if(m-sResponse.Left(4)=,"-ERR')(n_sError=error_tableexecuted_action;returnFALSE;returnTRUE;3.2.3关闭SOCket数据收发完后,要关闭SoCket,其源代码主要如下:(1)服务器端关闭套接字:uoidCBankSeruerDlg:OnOK()/TODO:Addextravalidationhere停止服务CClientSocket*pClientSocket=NULL;while(?n_connectionList.IsEmptyO)<pClientSocket=(CClientSocket*)m_connectionList.RemoueHead();deletepClientSocket;if(m_pSocket=NULL)<deletenpSocket;m_pSocket=NULL;CDialog:OnOK();(2) ATM终端关闭套接字:关闭 SOCketnpSocket->Close();deletenpSocket;UU<LULU llp%>UJnULy显示“欢迎下次光临”m_strlnfo=sLeaue;InlStrlD三-T(,i);n_ctlID.EnableWindow(FALSE);n_ctlLog.EnableWindow(FALSE);m-ctlCancel.EnableWindovj(FALSE);UpdateData(FALSE);ShowWindow(SW_SHOW);SetTier(1,3000,NULL);return;3.3ATM终端操作和服务器端响应程序3.3.1查询ATM终端操作选择“查询”时,向服务器端发出查询命令,服务器收到命令后做出相应的响应,源代码如下所示:(1)ATM终端“查询”操作代码:doubleCATMDlg:requery()CStringbuff;buFF.Fornat("¾d,REQERV);n_pSocket->Send(LPCSTR)buFF,buFF.GetLength();if(get_response(REQUERV)msResponse=msResponse.Mid(msResponse.Find("")+1);returnatoF(LPCSTR)msResponse);elsereturn0;(2)服务器端响应“查询”代码:查询StrTemP.Formats帐号:%s,进行余额查询;mpDlg->addListMsg(StrTenp);StrTenp=npDlg->getFieldUalue(mstrID,"SUM");strSend.Format("+0K¾F",atof(StrTemp);Send(LPCSTR)StrSend,StrSend-GetLengthO);3.3.2取款ATM终端操作选择“取款”时,向服务器端发出取款命令,服务器收到命令后做出相应的响应,源代码如下所示:(1) ATM终端“取款”操作代码:BOOLCATMDlg:withdraw(UINTMoney)CStringbuFF;buFF.Format(',%d%d,fWITHDRAW,nMonep);m-pSocket->Send(LPCSTR)buFFfbuff.GetLength();returngetresponse(WITHDRAW);>(2)服务器端响应“取款”代码:取钱StrTemP.Format,帐号:%sf进行取款”;-pDlg->addListMsg(StrTenp);StrRcu=StrRcu.Mid(strRcu.Find(a,)+1);StrTemp=in_pDlg->getFiel(lUalue(iii_strID,"SUM");if(atoi(strRcu)<=atof(LPCSTR)StrTemp)<从帐户中减去if(m_pDlg->updateSUM(m_strID,atof(LPCSTR)StrTeinp)-atoi(strRcu)<StrTemP.Formatr帐号:知,取款成功”,*strID);n-pDlg->addListMsg(StrTenp);strSend.Format("÷OK");>else,数据库操作不成勿口、StrTemP.FormatG,帐%s,取款不成功”,m_strID);n-pDlg->addListMsg(StrTenp);strSend.Format("-ERR,);else<余额不足StrTemp.Format("帐号1¾s,取款不成功;npDlg->addListMsg(strTemp);strSend.Format(,-ERR");Send(LPCSTR)strSend,StrSend.GetLength();3.3.3 存款ATM终端操作选择“存款”时,向服务器端发出存款命令,服务器收到命令后做出相应的响应,源代码如下所示:(1) ATM终端“存款”操作代码:BOOLCATMDlg:deposit(UINTnMoney)<CStringbuff;buff.Fornat("¾d¾d",DEPOSIT,Money);n_pSocket->Send(LPCSTR)buFf,buFF.GetLength();returnget_response(WITHDRAW);(2)服务器端响应“存款”代码:存钱StrTemP.Formatr帐号:¾s,进行存款”,strID);m_pDlg->addListMsg(StrTenp);StrRcu=strRcu.Mid(strRcu.Find(',")+1);StrTenp=m_pDlg->getFieldUalue(n_strID,SUM");在帐户中加上if(n_pDlg->updateSUM(m_strID,atoF(LPCSTR)StrTenp)+atoi(strRcu)(StrTemp.Format(“帐号:%s,存款成功”;pDlg->addListMsg(StrTemp);strSend.Format(',+OK");else数据库操作不成功StrTemP.Format(,帐号:%s,存款不成功;pDlg->addListMsg(StrTemp);StrSend.Format(,-ERR");Send(LPCSTR)StrSend,StrSend.GetLength();3.3.4 修改密码ATM终端操作选择“修改密码”时,向服务器端发出修改密码命令,服务器收到命令后做出相应的响应,源代码如下所示:(1) ATM终端“修改密码”操作代码:BOOLCATMDlg:alterPAW(CStringStrPAW)CStringbuff;buFF.Fornat(,¾d%s,fALTERPAW,StrPAW);n_pSocket->Send(LPCSTR)buFF,buFF.GetLength();returnget_response(ALTERPAW);(2)服务器端响应“修改密码”代码:修改密码StrTer.Fornnatr帐号:知,进行密码修改“E_strID);pDlg->addListMsg(strTenp);StrRcu三StrRcu.Mid(strRcu.Find('*',)+1);if(m_pDlg->updatePAW(in_strID,strRcu)<一StrTemP.Formatr帐号:粘,修改密码成功npDlg->addListMsg(StrTeinp);StrSend.FormatC+0K");else数据库操作不成功StrTelnp.Format("帐号:粘,修改密码不成功mpDlg->addListMsg(StrTemp);StrSend.Forat(,-ERR,);Send(LPCSTR)StrSend,StrSend.GetLength();四、开发工具本实验所使用的开发工具是MiCrOsoftVisualC+6.0o五、测试报告5.1 测试环境(I)硬件环境:CPUIntelT56701.80GHz,内存2GBDDR3,网卡Intel82562GT10/100NetworkConnection,网络接入带宽IOoMHZ局域网接入;(2)软件环境:使用系统为WindOWS7。5.2 测试方法和步骤5.2.1 服务器端(1)服务器端初始界面:初始化端口号:ooo确定取消(2)设置好端口号后,点击确定进入服务器界面:(3)用户数据库和服务器程序要保证在同一路径下,否则会导致程序运行结果出错。(4)当ATM终端机进行操作时,服务器界面会显示用户的相关操作:% BankServerDIrDlilJlrGIr.OIJIilr歧恨111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111,111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111,a於塞行束始过束始过束进罂眉修进结开粤开鲁清空列表5.2.2 ATM 终端(1) ATM终端初始界面:初始化确定取消 I服务器地址:127.0.0.1端口号:面(2)设置好服务器地址和端口号后,点击确定进入ATM登陆界面:(3)输入正确的账号和对应的密码后,点击确认进入ATM操作界面:(目前只有两个账号:111111111和123456789;密码分别是222222和123456)(4)点击相应的操作按键,进入各操作子界面:atmIasaiI畸存入你运二I(4)退出ATM终端后的界面:5.3 测试结果本系统运行情况良好,经过上述的测量方法和步骤进行测试,所有操作均正确响应,包括ATM基本功能:查询、存款、取款和修改密码,另外,登陆和退出界面也正确显示,各种提醒弹窗也在相应情况下弹出,没有任何误操作,证明本系统设计成功,达到预期的目的。六、软件开发总结6.1 软件开发的收获通过此次大实验我更加清晰的理解了TCP/IP协议簇的组成及实现方法,深入地理解了Socket编程的分类及实现方法,特别是对TCP协议有了一个全面的深入的了解,并实现了其在局域网络中的应用。同时,通过MiCrOSOftViSUalC+提供的MFC类库,实现了S。Cket类的继承及调用,使我对MFC有了一个系统全面的认识,清楚了MFC程序的整个内部运行机制及编程方法,为以后独立开发新的应用程序打下了坚实的基础。6.2 难点问题的处理及待完善的问题本次实验的开发难点在于,要对整个通信过程有深入了解,要熟悉C+编程,熟悉基于消息的异步套接字,熟悉线程的操作,熟悉VC各个控件的操作。这是在学习计算机网络基础和ViSUalC+后,将两者结合运用的一次尝试,从程序的构思到实现都是十分简单的,目的在于加深对所学知识的理解。由于是第一次做此类程序,并没有很好地考虑对代码的优化,整个解决方案外观上还是比较整洁的,但是里面依然存在一些冗余代码没有很好的优化,这是在之后的工作学习中需要注意并完善的地方。七、参考文献1宽带通信网原理.龚向阳,金跃辉,王文东,阙喜戎.北京邮电大学出版社.2006.2VisualC+6.0实例精通.谢勇.科学出版社.2000.3 «VisualC+网络通信编程实用案例精选.丁展,刘海英.人民邮电出版社.2004.

    注意事项

    本文(网络通信原理大作业--基于TCP的ATM系统.docx)为本站会员(李司机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开