




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于TCP的C/S模式程序设计一课程设计基本介绍(1)设计内容及目的在VMware Workstation上运行Linux操作系统,在Linux系统下使用Socket编程实现两个进程之间的通信,两个进程间使用TCP建立可靠连接,熟悉TCP协议以及套接字编程原理;两个进程间使用C/S工作模式,在此结合并发服务器原理,实现服务器同时与多进程之间进行通信,深入了解C/S工作模式。(2)开发平台介绍VMware Workstation 是一款功能强大的桌面虚拟计算机软件,提供用户可在单一的桌面上同时运行不同的操作系统,和进行开发、测试 、部署新的应用程序的最佳解决方案。VMware Workstati
2、on可在一部实体机器上模拟完整的网络环境,以及可便于携带的虚拟机器,其更好的灵活性与先进的技术胜过了市面上其他的虚拟计算机软件。对于企业的 IT开发人员和系统管理员而言, VMware 在虚拟网路,实时快照,拖曳共享文件夹,支持 PXE 等方面的特点使它成为必不可少的工具。VMware Workstation 允许操作系统(OS)和应用程序(Application)在一台虚拟机内部运行。虚拟机是独立运行主机操作系统的离散环境。在 VMware Workstation 中,你可以在一个窗口中加载一台虚拟机,它可以运行自己的操作系统和应用程序。你可以在运行于桌面上的多台虚拟机之间切换,通过一个网络
3、共享虚拟机(例如一个公司局域网),挂起和恢复虚拟机以及退出虚拟机 这一切不会影响你的主机操作和任何操作系统或者它正在运行的应用程序。(3)发展前景VMware Workstation是一款可运行多种操作系统的虚拟机,方便用户的多种需求,此软件在实现用户需求的同时不会影响电脑原操作系统的使用,这个特点为其在以后的发展道路上有更好的前景。TCP是传输层的应用协议,可通过多方面来保证数据传输的可靠性,它采用了停止等待方式来回应数据的接收,只有当接收到数据时,用户才发送数据确认报文,同时此协议使用滑动窗口方法来控制网络拥塞,提高数据传输的可靠性。二相关原理(1)TCP/IP体系结构TCP/IP的中文译
4、名为传输控制协议/网际协议,又叫网络通讯协议,这个协议是Internet最基本的协议,Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的。TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的七层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上互相通信。这七层是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而TCP/IP通讯协议采用了四层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求,如下图所示。图1 计算机网络体系结构应用层:应用程序间沟通的
5、层,如简单电子邮件传输(SMTP),文件传输协议(FTP),网络远程访问协议(Telnet)等。传输层:在此层中,它提供了节点间的数据传送,应用程序之间的通信服务,主要功能是数据格式化,数据确认和丢失、重传等。如传输控制协议(TCP),用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被传送并到达接收。网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否正确而接收),如网际协议(IP)。网络接口层:接收IP数据包并进行传输,从网络上接收物理帧,抽取IP数据报转交给上一层,对实际的网络媒体的管理
6、,定义如何使用实际网络(如Ethernet)来传送数据。(2)TCP传输ACK N+1FIN NACK M+1FIN M应答ACK数据应答,请求ACK数据请求ACK K+1SYN K,ACK J+1SYN J2MSLsocket, bind, listenLISTENaccept阻塞SYN_RCVDESTABLISHEDaccept返回Read阻塞Read返回WriteRead阻塞CLOSE_WAITRead返回0CloseLAST_ACKCLOSEDSocketConnectSYN_SENTESTABLISHEDWriteRead阻塞Read返回CloseFIN_WAIT1FIN_WAIT2
7、TIME_WAIT客户端服务器端图2 TCP连接中分组交换以及客户端与服务器的状态转换TCP协议在IP协议之上,提供可靠的传输服务。这种服务的特点:可靠、全双工、流式和无结构传输。TCP协议使用了积极确认和重传送的技术来实现可靠传输。接收者在收到发送者发送的数据后,必须发送一个相应的确认(ACK)消息,表示他已经收到数据。发送者保存发送的数据的记录,在发送下一个数据之前等待这个数据的确认消息在他发送这个数据的同时,启动了一个计时器。在一定时间内没有接收到确认消息,就认为这个数据在传输过程中丢失了,接着就会发送这个数据。同时TCP实体又采用了滑动窗口协议。当发送方传送一个数据报到达目的地时,接收
8、方的TCP实体向发送方发送一个数据报,其中包含一个确认序号,它等于希望收到的下一个数据报的顺序号。建立了一个TCP连接,需要三次握手过程,连接才能成功建立,如图二所示。握手过程的第一段的代码位设置为SYN,序号为J,表示开始一次握手。接收方收到此报文断后,向发送方回发一个报文段,代码位为SYN和ACK,序号为K,确认序号为J+1,表示接收方同意建立此连接。发送者收到此报文段后,发送ACK建立连接,完成三次握手以后,双方就开始正式传送数据。在通信完成阶段,两方通过四次断开来释放连接,如图二,客户端请求释放连接,发送有效位为FIN,服务器端给一个确认信号,若服务器端没有数据发送,便向客户端发送FI
9、N请求,客户端对此回应,等待2MSL,彻底断开连接。(3)C/S模式鉴于此次设计目的,采用Linux环境下使用TCP实现点到点的可靠连接,实现基于TCP/IP协议的面向连接的通信,连接双方分为客户端和服务器端,主要实现过程如图3所示。图3 TCP客户/服务器的套接字连接TCP套接字编程中,服务器实现的步骤:(1) 使用socket()函数创建套接字。(2) 将创建的套接字绑定到指定的地址结构。(3) Listen()函数设置套接字为监听模式,使服务器进入被动打开的状态。(4) 接受客户端的连接请求,建立连接。(5) 接收、应答客户端的数据请求。(6) 终止连接。客户端实现的步骤:(1) 使用s
10、ocket()函数创建套接字。(2) 调用connect()函数建立一个与TCP服务器的连接。(3) 发送数据请求,接收服务器的数据应答。(4) 终止连接。综上所述,TCP/IP应用中的服务器必须先于客户端进程启动,直到对客户端的响应结束或强迫终止。(4)并发服务器服务器按处理方式分为迭代服务器和并发服务器,为提高资源利用常采用并发服务器对客户端的请求进行处理,当服务器接收到客户请求时生成一个子进程处理客户请求,而父进程继续接受客户请求,实现多个进程并发进行,并发服务器的工作原理如图4所示。图4 TCP并发服务器父进程使用fork()函数生成子进程,父、子进程共享父进程在调用fork()之前的
11、所有描述符。一般情况下,接下来父进程只负责接受客户端的请求,子进程只负责处理客户端的请求。关闭不需要的描述符可以节省系统资源,又可防止父、子进程同时对共享描述符进行处理,产生不可预计的后果。此外,由于fork()函数返回后,与监听和已连接描述符相关联的文件表项的访问计数值均加1,父进程调用close()后计数器减1,而描述符只在访问计数器为0的情况下才真正关闭,为了正确关闭连接,当调用fork()函数后父进程关闭不需要的已连接描述符,子进程关闭不需要的监听描述符。父子进程在接受请求后对描述符的动态操作如图5。(1)accept返回前双方的状态(2)accept返回后双方的状态(3)fork返回
12、后双方的状态(4)父、子进程关闭相应的套接字后双方的状态图5 父、子进程对描述符的操作图5中listenfd为监听描述符,connfd为已连接描述符,父进程拥有监听套接字用于接听客户端的连接,子进程的已连接套接字用于处理客户端的请求。三总体设计(1)服务器端等待客户端请求连接,连接成功后,接收客户端信息并显示,然后接收来自客户的信息(字符串),将字符串反转并将结果送回客户端。服务器可同时处理多个客户端的请求,准确区分每个用户的信息。图6 服务器端的程序流程图(2)客户端与服务器相连接,用户输入客户的名称并发给服务器,然后向服务器发送字符串,接收服务器返回的经处理的字符串,并显示。当用户输入by
13、e时断开连接。四具体设计客户端在命令行中应输入欲连接服务器的IP地址或域名(图7),通过gethostbyname()函数获得服务器端的信息,对其进行处理,服务器显示请求连接的客户端的IP地址,如图8所示。图7 客户端命令行格式图8 服务器显示客户端IP用户给出客户端名称,服务器端显示,如图9所示,服务器端通过用户名来显示信息的来源,并对信息进行处理返回客户端,客户端在屏幕输出,如图10。图9 服务器显示客户端名称图10 服务器对字符串进行反转客户端可通过输入bye来释放连接(图11),在程序中通过if语句,字符串比较来确定是否释放两者之间的连接。图11 断开连接服务器可以同时处理多个客户端的
14、请求,并通过用户名准确显示信息的来源,如图12展示出一个服务器同时处理两个客户端进程的过程:建立连接、数据传送、释放连接。图12 并发服务器的实现五结论基于TCP/IP协议和套接字编程原理为服务器端完成基本数据配置,主要采用套接字编程原理以及VMware的使用,通过调试运行并且经过完善后,实现并发服务器的功能。在这次课程设计的过程中,对于网络编程有了更深一步的了解。首先是对于计算机网络基础这方面,对于网络体系中的几种分层方法,每层的作用都由了系统的理解,VMware的使用也更加的熟练,特别是对于Socket编程这一块,套接字的创建、绑定以及使用,基于TCP、UDP的编程以及并发服务器的原理都有
15、了深一步的理解,这次课程设计对于以后进行网络的开发有很大的帮助。六附录(1)服务器端server.c#include #include #include #include #include #include #include #include #define PORT 1234#define BACKLOG 5#define MAXDATASIZE 1000void process_cli(int connfd, struct sockaddr_in client);main()int listenfd, connfd;pid_t pid;struct sockaddr_in server;s
16、truct sockaddr_in client;int len;if(listenfd=socket(AF_INET, SOCK_STREAM,0)=-1)perror(Creating socket failed.);exit(1);int opt = SO_REUSEADDR;setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt);bzero(&server, sizeof(server);server.sin_family=AF_INET;server.sin_port=htons(PORT);server.si
17、n_addr.s_addr = htonl(INADDR_ANY);if(bind(listenfd, (struct sockaddr *)&server, sizeof(server)=-1)perror(Bind() error.);exit(1);if(listen(listenfd,BACKLOG)=-1)perror(listen() errorn);exit(1);len=sizeof(client);while(1)if(connfd=accept(listenfd,(struct sockaddr *)&client, &len)=-1)perror(accept() err
18、orn);exit(1);if(pid=fork()0)/parent processclose(connfd);continue;else if(pid=0)/child processclose(listenfd);process_cli(connfd, client);exit(0);elseprintf(fork() errorn);exit(0);close(listenfd);void process_cli(int connfd, struct sockaddr_in client)int num;char recvbufMAXDATASIZE, sendbufMAXDATASI
19、ZE, cli_nameMAXDATASIZE;printf(You got a connection from %s.n,inet_ntoa(client.sin_addr);num=recv(connfd, cli_name,MAXDATASIZE,0);if(num=0)close(connfd);printf(Client disconnected.n);return;cli_namenum-1=0;printf(Clients name is %s.n,cli_name);while(num=recv(connfd, recvbuf, MAXDATASIZE,0)recvbufnum
20、=0;printf(Received client( %s ) message: %s,cli_name,recvbuf);/printf(%s,recvbuf);/printf(%dn,num);if(!strncmp(recvbuf,bye,3) send(connfd,recvbuf,strlen(recvbuf),0); printf(client%s FIN!n,cli_name);break; else/send(connfd,hello,5,0);int i;for(i=0;inum;i+)sendbufi=recvbufnum-i-2;/change turnsendbufnu
21、m=0;/printf(%sn,sendbuf);send(connfd,sendbuf,strlen(sendbuf),0);close(connfd);(2)客户端client.c#include #include #include #include #include #include #include #include #include #define PORT 1234#define MAXDATASIZE 1000void process(FILE *fp, int sockfd);char * getMessage(char* sendline, int len, FILE* fp
22、);int main(int argc, char * argv)int sockfd;struct hostent *he;struct sockaddr_in server;if(argc!=2)printf(Usage: %s n,argv0);exit(1);if(he=gethostbyname(argv1)=NULL)printf(gethostbyname() errorn);exit(1);if(sockfd=socket(AF_INET, SOCK_STREAM, 0)=-1)printf(socket() errorn);exit(1);bzero(&server, sizeof(server);server.sin_family=AF_INET;server.sin_port=htons(PORT);server.sin_addr = *(struct in_addr*)he-h_a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 松江区绩效管理办法
- 反洗钱渠道管理办法
- 新销售管理办法来了
- 水道镇河道管理办法
- 汽车直播间管理办法
- 台球房灯光管理办法
- 新客户导入管理办法
- 室内装修管理办法版
- 四川省工程管理办法
- 学校专业部管理办法
- 西北工业大学固定资产验收报告
- 六年级下册综合实践活动教学设计-我们的毕业季 全国通用
- 【课件】Unit+2Reading+for+writing+课件人教版(2019)选择性必修第四册
- 大学英语六级词汇表(全)含音标
- 历年农商行考试真题及答案(DOC)
- 2014红星美凯龙建材品类系列知识培训:卫浴篇
- 卫生部手术分级目录(2023年1月份修订)
- GB/T 9576-2013橡胶和塑料软管及软管组合件选择、贮存、使用和维护指南
- 神经康复学教学大纲
- 煤矿用防爆电气设备防爆检查标准培训课件
- 护士注册健康体检表下载【可直接打印版本】
评论
0/150
提交评论