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

上传人:李司机 文档编号:6685424 上传时间:2023-12-27 格式:DOCX 页数:19 大小:348.69KB
返回 下载 相关 举报
网络通信原理大作业--基于TCP的ATM系统.docx_第1页
第1页 / 共19页
网络通信原理大作业--基于TCP的ATM系统.docx_第2页
第2页 / 共19页
网络通信原理大作业--基于TCP的ATM系统.docx_第3页
第3页 / 共19页
网络通信原理大作业--基于TCP的ATM系统.docx_第4页
第4页 / 共19页
网络通信原理大作业--基于TCP的ATM系统.docx_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《网络通信原理大作业--基于TCP的ATM系统.docx》由会员分享,可在线阅读,更多相关《网络通信原理大作业--基于TCP的ATM系统.docx(19页珍藏版)》请在三一办公上搜索。

1、网络通信原理大作业基于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 服务

2、器端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终端机上输入正确的卡号和密码后,

3、进入ATM终端机操作界面,通过TCP的socket发送相关操作命令和数据给银行服务器。(3)银行服务器准确接收ATM终端机发送过来的命令和数据。(4)根据接收的命令和数据,对ATM终端机的相关命令进行响应,对相关数据进行处理,并将用户操作过程显示出来。程序界面如下:图1 ATM终端机操作界面号号号号号号号号号号号号号号111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, Iiniiiii

4、, 111111111,功码码码其码作图2银行服务器显示界面二、实验原理2.1 TCP在TCP/IP协议簇中的位置及特点图3TCP/IP体系结构使用TCP通信有以下特点:(1)面向连接的传输;(2)端到端的通信;(3)高可靠性,确保传输数据的正确性,不易出现丢失或乱序;(4)全双工方式传输;(5)采用字节流方式,即以字节为单位传输字节序列;(6)紧急数据传送功能。2.2 TCP的SOCKET实现套接字是支持TCP/IP协议的网络通信的基本操作单元,可以将套接字看做不用主机间的进程进行双向通信的端点,在网络编程中最常用的方案便是客户端/服务器端模型,简称C/S模型。根据传输数据类型的不同,套接字

5、可分为面向连接的字节流套接字(Streamsockets)和无连接的数据报套接字(datagramsockets)两种类型。面向连接的套接字系统调用时序如图4所示。字节流不按记录定界,在TCP/IP协议簇中对应TCP协议,它是一个提供给用户进程的可靠的全双工的面向连接的协议,大多数Internet应用程序如ftp、telnet使用TCP协议。图4而向连接的套接字系统调用时序2.3 客户端/服务器端模型的设计原理客户端/服务器端模型(简称C/S模型)是一种网络模型,描述了一种网络程序运行的方式。它将网络应用程序分为客户端和服务器端两部分。客户端对服务器端发送信息请求,服务器端对其做出相应回答,提

6、供服务。在TCP/IP网络应用中,多数网络应用程序是使用客户端/服务器端模型设计的。服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户程序提出了请求信息。此时,服务程序被“惊醒”并且为客户提供服务,对客户的请求作出适当的反应。当建立服务器程序时,应该将服务器程序设计成等候客户的请求。我们知道,TCP传输层通过协议端口和应用程序(像服务器和客户)通信,也就是说,为了按收客户请求,服务器程序必须对传输层的一个特定协议端口进行侦听。当服务器配置SOCket接口时,它使用bind()函数让SOCket执行体登记一个协议端口。也就是说,程序告诉SOCket

7、执行体使用哪一个协议端口进行数据传送。SOCket执行体接着告诉传输层某个特定协议端口已被使用,并将其收到的所有数据传送给SocketAPIo本系统采用C/S模型,使用从MFC类中的CAsyncSocket类的派生类进行实现底层通讯。服务器运行的流程为:服务器运行后,开启服务,则服务器开始侦听用户请求,如有客户端连接上首先,发送回确认信息,然后,建立一个线程,处理接受到的数据。在线程里,按照接受到数据的类别,进行相应的处理,如有需要,会向用户发送处理的结果,或成功或失败的消息,处理结束后,线程就结束了。这样,可以实时接受每个用户的请求,不会因为处理一个用户的请求,而忽略了其它用户。服务器端主要

8、是为协调用户之间的通讯,服务器端的设计,主要在功能上面。客户端主要是界面的设计(除了底层通讯的以外),向服务器发送加入请求,然后等待服务器的响应。若有加入的其他客户端,则可与之进行通信。三、程序设计3.1 程序主要类结构ATM终端和银行服务器端的程序主要类结构如图5所示:E 号 ATM classes 飞 CAboutDIg田 CAIterPAWDIg由 F CATMApp+ CATMDIg+ 飞 CAuthentificateDIg+ F CDepositDlgE CInitDIg+ 飞 COperationDIgE 飞 CRequeryDIg+ BIS CUserSocket l CWit

9、hdrawDIg由 OGIobaIs- 摩 BankServer classes+ F CAboutDIg+ F CBankServerApp+ 飞 CBankServerDlg+ 飞 CCIientSocket* 飞 CInitDIg+ 飞 CListenSocket+ 口 Globals(a)ATM终端类结构(b)银行服务器端类结构图5程序主要类结构用户输入的实现:ATM终端通过Edit控件,根据用户选择的操作,输入需要发送的命令或数据:包括登陆、查询、存钱、取钱、钱的数目、修改密码、取卡等。结果输出的实现:命令和数据在银行服务器端的CCIiemSOCket类中处理,更新相关数据库,并将处

10、理结果发送回ATM终端,同时将ATM终端的相关操作过程显示出来。数据的接收发送:通过ATM终端程序中的CUSerSoCket类将需要发送的命令或数据封装成TCP包发送,通过银行服务器端的CCIientSocket类接收TCP包,解析并将命令或数据进行相关操作。3.2 建立/关闭Socket3.2.1 建立SOCket首先对服务器端和ATM终端建立SoCke3服务器端创建监听套接字,准备接收连接,ATM终端建立创建套接字,请求连接到服务器,其源代码主要如下:(1)服务器端建立监听Socket弹出初始话对话框CInitDlgdig;if(dig.DoModalO三三IDOK)创建监听套节字npSo

11、cket=newCListenSocketCthis);if(npSocket-Create(dlg.nnPort+700)Listen()AfXMeSSageBOXr初始化失败,请稍候再试,ExitProcess(I);elseAfXMeSSageBoXr初始化失败,请稍候再试,,);ExitProcess(I);elseExitProcess(I);(2)ATM终端建立SocketuoidCATMDlg-OnLogOCreate()iF(mpSocket-Connect(mstrfiddressfmnPort)(n_sError=_T(UnabletoconnecttoSerUer);AF

12、XMeSSageBO对木起,连接熊务器木版功,请稍候,试,“);1.StrID=-T(,);UpdateDataiFfiLSE);return;3.2.2收发数据建立连接后,服务器端接收ATM终端发来的命令或数据,ATM终端发送命令或数据到服务器,等待服务器响应,其源代码主要如下:(1)服务器端接收数据:处理客户端的连接信息uoidCBankSeruerDlg:ProCeSSPendingACCePt(),生成一个新的套节字与客户端通讯CClientSocket*pSocket=newCClientSocket(this);if(m_pSocket-Accept(*pSocket)elsede

13、letepSocket;(2)ATM终端发送数据:BOOLCATMDlg:get_response(UINTeecuted-action)Receiue(response_buF,RESPONSE_BUFFER_SIZE);if(nChars=SOCKET_ERROR)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数据

14、收发完后,要关闭SoCket,其源代码主要如下:(1)服务器端关闭套接字:uoidCBankSeruerDlg:OnOK()/TODO:Addextravalidationhere停止服务CClientSocket*pClientSocket=NULL;while(?n_connectionList.IsEmptyO)pClientSocket=(CClientSocket*)m_connectionList.RemoueHead();deletepClientSocket;if(m_pSocket=NULL)Close();deletenpSocket;UUUJnULy显示“欢迎下次光临”m

15、_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:requ

16、ery()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(mstr

17、ID,SUM);strSend.Format(+0KF,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(W

18、ITHDRAW);(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)updateSUM(m_strID,atof(LPCSTR)StrTeinp)-atoi(strRcu)addListMsg(StrTenp);strSend.Format(OK);else,数据库操作

19、不成勿口、StrTemP.FormatG,帐%s,取款不成功”,m_strID);n-pDlg-addListMsg(StrTenp);strSend.Format(-ERR,);elseaddListMsg(strTemp);strSend.Format(,-ERR);Send(LPCSTR)strSend,StrSend.GetLength();3.3.3 存款ATM终端操作选择“存款”时,向服务器端发出存款命令,服务器收到命令后做出相应的响应,源代码如下所示:(1) ATM终端“存款”操作代码:BOOLCATMDlg:deposit(UINTnMoney)Send(LPCSTR)buFf

20、,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,存款成功”;p

21、Dlg-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)CStringb

22、uff;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)addListMsg(StrTeinp);StrSend.For

23、matC+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)软件环境:使用系统为Wi

24、ndOWS7。5.2 测试方法和步骤5.2.1 服务器端(1)服务器端初始界面:初始化端口号:ooo确定取消(2)设置好端口号后,点击确定进入服务器界面:(3)用户数据库和服务器程序要保证在同一路径下,否则会导致程序运行结果出错。(4)当ATM终端机进行操作时,服务器界面会显示用户的相关操作:% BankServerDIrDlilJlrGIr.OIJIilr歧恨111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111,111111111, 111111111, 111111111, 111111111

25、, 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 测试结果本系统运行情况良好,经过上

26、述的测量方法和步骤进行测试,所有操作均正确响应,包括ATM基本功能:查询、存款、取款和修改密码,另外,登陆和退出界面也正确显示,各种提醒弹窗也在相应情况下弹出,没有任何误操作,证明本系统设计成功,达到预期的目的。六、软件开发总结6.1 软件开发的收获通过此次大实验我更加清晰的理解了TCP/IP协议簇的组成及实现方法,深入地理解了Socket编程的分类及实现方法,特别是对TCP协议有了一个全面的深入的了解,并实现了其在局域网络中的应用。同时,通过MiCrOSOftViSUalC+提供的MFC类库,实现了S。Cket类的继承及调用,使我对MFC有了一个系统全面的认识,清楚了MFC程序的整个内部运行

27、机制及编程方法,为以后独立开发新的应用程序打下了坚实的基础。6.2 难点问题的处理及待完善的问题本次实验的开发难点在于,要对整个通信过程有深入了解,要熟悉C+编程,熟悉基于消息的异步套接字,熟悉线程的操作,熟悉VC各个控件的操作。这是在学习计算机网络基础和ViSUalC+后,将两者结合运用的一次尝试,从程序的构思到实现都是十分简单的,目的在于加深对所学知识的理解。由于是第一次做此类程序,并没有很好地考虑对代码的优化,整个解决方案外观上还是比较整洁的,但是里面依然存在一些冗余代码没有很好的优化,这是在之后的工作学习中需要注意并完善的地方。七、参考文献1宽带通信网原理.龚向阳,金跃辉,王文东,阙喜戎.北京邮电大学出版社.2006.2VisualC+6.0实例精通.谢勇.科学出版社.2000.3 VisualC+网络通信编程实用案例精选.丁展,刘海英.人民邮电出版社.2004.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号