《网络通信原理大作业--基于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 设计目标TCPTransmissionContro1Protoco1的简称,是一种面向连接的、可靠的、基于字节流的传输层通信协议。本设计采用基于TCP协议的Soek编程,通过实现网络数据发送和接收功能,模拟简单的银行ATM系统,包括ATM终端机和银行服务器。1.2 完成功能(I)ATM终端机初始化,保证输入正确的服务器地址和端口号,才能成功连接到银行服务器,进行后续操作。(2)用户在ATM终端机上输入正确的卡号和密码后,
3、进入ATM终端机操作界面,通过TCP的socket发送相关操作命令和数据给银行服务器。(3)银行服务器准确接收ATM终端机发送过来的命令和数据。(4)根据接收的命令和数据,对ATM终端机的相关命令进行响应,对相关数据进行处理,并将用户操作过程显示出来。程序界面如下:图2银行服务器显示界面二、实验原理2.1 TCP在TCP/IP协议簇中的位置及特点图3TCP/IP体系结构使用TCP通信有以下特点:(1)面向连接的传输;(2)端到端的通信;(3)高可靠性,确保传输数据的正确性,不易出现丢失或乱序;(4)全双工方式传输;(5)采用字节流方式,即以字节为单位传输字节序列;(6)紧急数据传送功能。2.2
4、 TCP的SOCKET实现套接字是支持TCP/IP协议的网络通信的基本操作单元,可以将套接字看做不用主机间的进程进行双向通信的端点,在网络编程中最常用的方案便是客户端/服务器端模型,简称C/S模型。根据传输数据类型的不同,套接字可分为面向连接的字节流套接字(Streamsockets)和无连接的数据报套接字(datagramsockets)两种类型。面向连接的套接字系统调用时序如图4所示。字节流不按记录定界,在TCP/IP协议簇中对应TCP协议,它是一个提供给用户进程的可靠的全双工的面向连接的协议,大多数Internet应用程序如ftp、te1net使用TCP协议。2.3 图4而向连接的套接字
5、系统调用时序2.4 客户端/服务器端模型的设计原理客户端/服务器端模型(简称C/S模型)是一种网络模型,描述了一种网络程序运行的方式。它将网络应用程序分为客户端和服务器端两部分。客户端对服务器端发送信息请求,服务器端对其做出相应回答,提供服务。在TCP/IP网络应用中,多数网络应用程序是使用客户端/服务器端模型设计的。服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户程序提出了请求信息。此时,服务程序被“惊醒”并且为客户提供服务,对客户的请求作出适当的反应。当建立服务器程序时,应该将服务器程序设计成等候客户的请求。我们知道,TCP传输层通过协议端
6、口和应用程序(像服务器和客户)通信,也就是说,为了按收客户请求,服务器程序必须对传输层的一个特定协议端口进行侦听。当服务器配置SOCket接口时,它使用bind()函数让SOCket执行体登记一个协议端口。也就是说,程序告诉SOCket执行体使用哪一个协议端口进行数据传送。SOCket执行体接着告诉传输层某个特定协议端口已被使用,并将其收到的所有数据传送给SocketAPIo本系统采用C/S模型,使用从MFC类中的CAsyncSocket类的派生类进行实现底层通讯。服务器运行的流程为:服务器运行后,开启服务,则服务器开始侦听用户请求,如有客户端连接上首先,发送回确认信息,然后,建立一个线程,处
7、理接受到的数据。在线程里,按照接受到数据的类别,进行相应的处理,如有需要,会向用户发送处理的结果,或成功或失败的消息,处理结束后,线程就结束了。这样,可以实时接受每个用户的请求,不会因为处理一个用户的请求,而忽略了其它用户。服务器端主要是为协调用户之间的通讯,服务器端的设计,主要在功能上面。客户端主要是界面的设计(除了底层通讯的以外),向服务器发送加入请求,然后等待服务器的响应。若有加入的其他客户端,则可与之进行通信。三、程序设计3.1 程序主要类结构ATM终端和银行服务器端的程序主要类结构如图5所示:(a)ATM终端类结构(b)银行服务器端类结构图5程序主要类结构用户输入的实现:ATM终端通
8、过Edit控件,根据用户选择的操作,输入需要发送的命令或数据:包括登陆、查询、存钱、取钱、钱的数目、修改密码、取卡等。结果输出的实现:命令和数据在银行服务器端的CCIiemSOCket类中处理,更新相关数据库,并将处理结果发送回ATM终端,同时将ATM终端的相关操作过程显示出来。数据的接收发送:通过ATM终端程序中的CUSerSoCket类将需要发送的命令或数据封装成TCP包发送,通过银行服务器端的CCIientSocket类接收TCP包,解析并将命令或数据进行相关操作。3.2 建立/关闭Socket3.2.1 建立SOCket首先对服务器端和ATM终端建立SoCke3服务器端创建监听套接字,
9、准备接收连接,ATM终端建立创建套接字,请求连接到服务器,其源代码主要如下:(1)服务器端建立监听Socket弹出初始话对话框CInitD1gdig;if(dig.DoModa1OIDOK)创建监听套节字npSocket=newC1istenSocketCthis);if(npSocket-Create(d1g.nnPort+700)1isten()AfXMeSSageBOXr初始化失败,请稍候再试,ExitProcess(I);e1seAfXMeSSageBoXr初始化失败,请稍候再试,,);ExitProcess(I);e1seExitProcess(I);(2)ATM终端建立Socket
10、uoidCATMD1g-On1ogOCreate()iF(mpSocket-Connect(mstrfiddressfmnPort)(n_sError=_T(Unab1etoconnecttoSerUer);AFXMeSSageBO对木起,连接熊务器木版功,请稍候,试,“);1StrID=-T(,);UpdateDataiFfi1SE);return;3.2.2收发数据建立连接后,服务器端接收ATM终端发来的命令或数据,ATM终端发送命令或数据到服务器,等待服务器响应,其源代码主要如下:(1)服务器端接收数据:处理客户端的连接信息uoidCBankSeruerD1g:ProCeSSPendin
11、gACCePt(),生成一个新的套节字与客户端通讯CC1ientSocket*pSocket=newCC1ientSocket(this);if(m_pSocket-Accept(*pSocket)e1sede1etepSocket;(2)ATM终端发送数据:BOO1CATMD1g:get_response(UINTeecuted-action)Receiue(response_buF,RESPONSE_BUFFER_SIZE);if(nChars=SOCKET_ERROR)n_sResponse=responsebuf;n_sResponse=m_sResponse.1eFt(nChars)
12、;if(m-sResponse.1eft(4)=,-ERR)(n_sError=error_tab1eexecuted_action;returnFA1SE;returnTRUE;3.2.3关闭SOCket数据收发完后,要关闭SoCket,其源代码主要如下:(1)服务器端关闭套接字:uoidCBankSeruerD1g:OnOK()/TODO:Addextrava1idationhere停止服务CC1ientSocket*pC1ientSocket=NU11;whi1e(?n_connection1ist.IsEmptyO)pC1ientSocket=(CC1ientSocket*)m_con
13、nection1ist.RemoueHead();de1etepC1ientSocket;if(m_pSocket=NU11)C1ose();de1etenpSocket;UUUJnU1y显示“欢迎下次光临”m_str1nfo=s1eaue;In1Str1D-T(,i);n_ct1ID.Enab1eWindow(FA1SE);n_ct11og.Enab1eWindow(FA1SE);m-ct1Cance1.Enab1eWindovj(FA1SE);UpdateData(FA1SE);ShowWindow(SW_SHOW);SetTier(1,3000,NU11);return;3.3ATM终端操作和服务器端响应程序3.3.1查询ATM终端操作选择“查询”时,向服务器端发出查询命令,服务器收到命令后做出相应的响应,源代码如下所示:(1)ATM终端“查询”操作代码:doub1eCATMD1g:requery()CStringbuff;buFF.Fornat(d,REQERV);n_pSocket-Send(1PCSTR)buFF,buFF.Get1ength();if(get_response(REQUERV)msResponse=msRespo