您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > 计算机网络综合实验周报告
计算机科学与技术学院——计算机科学与技术专业《计算机网络综合实验周报告》(2013/2014学年第一学期)学生姓名:学生班级:学生学号:指导教师:2013年12月24日Linux环境下基于TCP/IP及Socket技术的远程文件传送控制编程报告0目录一、编程目的.................................................................1二、通信原理.................................................................1(一)TCP/IP.............................................................1(二)Socket.............................................................2三、Linux虚拟环境安装.......................................................5(一)VMware简介........................................................5(二)Linux简介.........................................................6(三)Linux虚拟环境安装.................................................7四、设计过程.................................................................7(一)服务器端创建监听与文件管理.........................................7(二)客户端连接与文件传输...............................................8五、代码开发.................................................................8(一)服务器端...........................................错误!未定义书签。六、结束语..................................................................17Linux环境下基于TCP/IP及Socket技术的远程文件传送控制编程报告1一、编程目的这次程序设计的目标是在以Linux为内核的操作系统下,实现多线程文件传输系统功能模块。系统模块分为服务器和客户端两部分,客户端实现对文件的上传、下载和查看服务器默认路径下的文件列表;服务器可以对文件进行管理操作,包括创建、删除和重命名等。多线程文件传输是一种一对多或者多对多的关系,一般是一个服务器对应着多个客户端。客户端通过socket连接服务器,服务器要为客户端创建一个单独进程(线程)监听每个客户端的请求。创建好连接之后文件就可以通过流的形式传输。linux内核中为我们提供了两种不同形式的读写流,包括read()、write()和send()、recv()。客户机对文件的查看指令也是通过流传递给服务器,服务器根据请求类型返回不同相应流。根据socket原理和特点绘画出链接流程图,将客户机与服务器的相互通信划分为不同的模块,每个模块负责独立的功能项。服务器输入指令管理目录下的文件,createfilename是创建文件命令,renameoldnamenewname是删除文命令,deletefilename是删除文件命令,同时监听着客户端的请求;客户端向服务器发送上传、下载和查看请求,从而得到不同的相应,包括将文件下载到当前路径下,从当前路径下上传文件给服务器,列出服务器的文件列表。二、通信原理Linux是计算机使用的主流操作系统之一,TCP/IP是广为应用的互联网协议,Linux为TCP/IP网络编程提供了一种网络进程通信机制:套接字接口(SocketsInterface)。以下将介绍Linux环境下套接字的基本概念及编程技术,并结合实例说明在Linux下如何用套接字实现客户机/服务器方式的进程通信。(一)TCP/IPTCP/IP即传输控制协议/网际协议(TransmissionControlProtocol/InternetProtocol),是一个由多种协议组成的协议族,他定义了计算机通过网络互相通信及协议族各层次之间通信的规范。TCP是一种面向连接的、可靠的、双向的通信数据流,说他可靠,是因为他使用3段握手协议传输数据,并且在传输时采用“重传肯定确认”机制保证数据的正确发送:接收端收到数据后要发出一个肯定确认,而发送端必须要能接收到这个肯定信号,否则就要将数据重发。在此原理基础之上,设计了基于Linux操作系统下TCP/IP编程实现文件传输的实例。我们采用客户机/务器模式通信时,通信双方发送/接收数据的工作Linux支持BSD的套接字和全部的TCP/IP协议,是通过网络协议将其视为一组相连的软件层来实现的。BSD套接字(BSDSocket)由通用的套接字管理软件支持,该软件是INET套接字层,用来管理基于IP的TCP与UDP端口到端口的互联问题。从协议分层来看,IP是网络层协议,TCP是一个可靠的端口到端口的传输层协议,他是利用IP层进行传接报文的;同时也是面向连接的,通过建立一条虚拟电路在不同的网络问传输报文,保证所传输报文的无丢失性和无重复性。用户数据报文协议(UserDatagramProtocol,UDP)也是利用IP层Linux环境下基于TCP/IP及Socket技术的远程文件传送控制编程报告2传输报文,但他是一个非面向连接的传输层协议。利用IP层传输报文时,当目的方网际协议层收到IP报文后,必须能够识别出该报文所使用的上层协议(即传输层协议)。因此,在IP报头中,设有一个“协议”域(Protoco1)。通过该域的值,即可判明其上层协议类型。传输层与网络层在功能上的最大区别是前者提供进程通信能力,而后者则不能。在进程通信的意义上,网络通信的最终地址不仅仅是主机地址,还包括可以描述进程的某种标识符。为此,TCP/UDP提出了协议端口(ProtocolPort)的概念,用于标识通信的进程。例如,Web服务器进程通常使用端口80,在/etc/serv~ices文件中有这些注册了的端口地址。对于TCP传输,传输节点问先要建立连接,然后通过该连接传输已排好序的报文,以保证传输的正确性。IP层中的代码用于实现网际协议,这些代码将IP头增加到传输数据中,同时也把收到的IP报文正确地转送到TCP层或UDP层。TCP是一个面向连接协议,而UDP则是一个非面向连接协议,当一个UDP报文发送出去后,Linux并不知道也不去关心他是否成功地到达了目的主机。IP层之下,是支持所有Linux网络应用的网络设备层,例如:点到点协议(PointtoPointProtocol,PPP)和以太网层。网络设备并非总代表物理设备,其中有一些(例如回送设备)则是纯粹的软件设备,网络设备与标准的Linux设备不同,他们不是通过Mknod命令创建的,必须是底层软件找到并进行了初始化之后,这些设备才被创建并可用。因此只有当启动了正确设置的以太网设备驱动程序的内核后,才会有/dev/eth0文件。ARP协议位于IP层和支持地址解析的协议层之间。(二)Socket1、套接字简介套接字(Socket)是网络通信的基本操作单元,它提供了不同主机间进程双向通信的端点,这些进程在通信前各自建立一个Socket,并通过对Socket的读/写操作实现网络通信功能。套接字分为以下3种类型。1)字节流套接字这是最常用的套接字类型,TCP/IP协议簇中的TCP(TransportControlProtocol)协议使用此类接口,它提供面向连接的(建立虛电路)、无差错的、发送先后顺序一致的、包长度不限和非重复的网络信包传输。2)数据报套接字TCP/IP协议族中的UDP(UserDatagramProtocol)协议使用此类接口,它是无连接的服务,以独立的信包进行网络传输,信包最大长度为32KB,传输不保证顺序性、可靠性和无重复性,它通常用于单个报文传输或可靠性不重要的场合。3)原始数据报套接字提供对网络下层通讯协议(如IP协议)的直接访问,它一般不是提供给普通用户的,主要用于开发新的协议或用于提取协议较隐蔽的功能。2、套接字编程方法这里将分别介绍面向连接协议的字节流套接字与非连接协议的数据报套接字的编程方法,因原始数据报套接字在实际工作中较少,在此不作讨论。不论何种套接字编程均采用客户机/服务器的协作模式,即由客户进程向服务器进程发出请求,服务器进程执行被请求的任务并将结果返回给客户进程。字节流套接字的服务进程和客户进程在通信前必须建立连接。建立连接及通信的步骤见图1。1)服务进程首先调用Socket()创建一个字节流套接字,并调用bind()将服务器地址捆扎在该套接字上,接着调用listen()监听连接请求,随后调用accept()做好与客户进程建立连接的准备,无连接请求时,服务进程被阻塞;Linux环境下基于TCP/IP及Socket技术的远程文件传送控制编程报告32)客户进程调用Socket()创建字节流套接字,然后调用connect()向服务进程发出连接请求;3)当连接请求到来后,服务进程被唤醒,生成一个新的字节流套接字,并用新套接字同客户进程的套接字建立连接,而服务进程最早生成的套接字则继续用于监听网络上的服务请求;4)服务进程和客户进程通过调用read()和write()交换数据;5)服务进程和客户进程通过调用close()撤消套接字并中断连接。数据套接字的服务进程客户进程通信前不必建立连接,通信的步骤见图2。1)服务进程首先调用Socket()创建一个数据套接字,并调用Bind()将服务器地址捆扎在该套接字上,然后调用Recvfrom()等待客户进程发来的请求;2)客户进程在调用Socket()创建一个数据报套接字后,调用Bind()将客户机地址捆扎在此套接字上,接着调用Sendto()向服务进程发送请求,然后调用Recvfrom()等待服务进程返回该请求的处理结果;3)服务进程在执行客户进程所请求的任务后,调用Sendto()将处理结果返回给客户进程;Linux环境下基于TCP/IP及Socket技术的远程文件传送控制编程报告44)服务进程和客户进程通过调用Close()撤消套接字。3、套接字编程示例下面给出一个运用字节流套接字在TCP/IP网络上实现客户机/服务器方式进程通信的实例。在此例中,服务进程先于客户进程运行,当双方建立连接后,服务进程通过该连接向客户进程不断发送一个连续增长的序列数,客户进程每接收到50个序列数就在屏幕上显示一个‘.’,显示至20个点后换行,直至任意一方进程被中断为止。#includesys/types.h#includesys/socket.h#includenetinet/in.h#includenetdb.h#includestdio.hmain(){intsock,namelen,seq,netint;structsockaddr-inserver;//存服务器的internet地址charmsgsock;Linux环境下基于TCP/IP及Socket技术的远程文件传送控制编程报告5charbuf[1024];//创建internet域的TCP协议的字节流套接字sock=socket(AF-INET,SOCK-STREAM,IPPROTO-TCP);if(sock0){perror(socket);exit(1);}//将本地主机(服务器)的地址捆扎到创建的套接字上server.sinfamil
本文标题:计算机网络综合实验周报告
链接地址:https://www.777doc.com/doc-2060572 .html