计算机网络文件传输及管理系统课程设计报告
计算机网络课程设计(文件传输)

能可靠工作的文件传输工具1 理论知识(一级标题,黑体四号,加粗,单倍行距,段前后6磅)1.1 传输文件工具工作原理分析(二级标题,宋体四号,加粗,单倍行距,段前后6磅)程序使用的是基于TCP/IP的协议,用套接字来实现文件的传输。
1.1.1 TCP/IP的网络体系结构TCP/IP协议采用层次体系结构,如图2所示,从图中可以看出,每一层在逻辑上都与通信端的对应层相连接。
图中所示的服务器程序持续监听通信客户端;客户端仅周期性地与服务器相连接以交换数据,其中TCP协议层提供相当于OSI参考模型中传输层的服务,为收、发端应用程序提供通信;IP协议层负责提供统一的数据报;链路层主要功能是收、发IP层的IP数据报;TCP/IP之上是该协议提供的各种服务,而底层网络可以是不同的物理网络,如Ethernet、Token Ring、X.25公共分组交换网等。
图1 TCP/IP协议层模型(LAN)1.1.2 套接字(Sockets)套接字(Sockets)最早是由Berkeley大学提出在UNIX操作系统下实现TCP/IP通信协议的开发接口,随着Internet在全球范围内的广泛使用,Sockets已成为网络编程的通用接口。
Microsoft 公司以Sockets为基础开发的Winsock建立了Windows环境下网络间的编程接口。
套接字是对网络中不同主机上应用进程之间进行双向通信的端点的抽象,一个套接口就是网络上进程通信的一端,提供了应用层进程利用网络协议栈交换数据的机制。
套接字可以分为流式套接字(Stream Sockets)、数据报套接字(Datagram Sockets)和原始套接字(Raw Sockets)。
流式套接字最常用的套接字,提供面向连接的、无差错的、发送顺序一致的、包长度不限和非重复的网络信息的传输;数据报套接字提供无连接的服务,以独立的数据报进行传输,不保证顺序性、可靠性和无重复性;原始套接字提供对下层网络的通信协议的访问,主要用于开发新的协议或用于提取较隐蔽的功能。
《计算机网络系统实践》课程设计报告-网络文件传输

《计算机网络系统实践》报告设计题目:网络文件传输学生姓名:专业班级:计算机科学与技术2016 年 1 月一、设计要求1. 实现单线程文件传输功能;2. 在以上基础上,掌握多线程技术,在文件网络传输时,可选择单线程或多线程;3. 加入异常控制依据,增强程序的鲁棒性(Robust);4. 了解如何提高套接字传输的速率,以及如何加强传输的稳定性。
二、开发环境与工具Eclips+java三、设计原理1.文件共享传输方式原理:主要采用TCPIP协议访问资源,一般是利用名字解析NETBIOS,dns,wins获得对方的IP地址,获取对方共享资源列表,当点击共享资源时候,客户机对服务器端点发出建立会话请求,这发生在传输层。
为了在服务端和客户端之间传送TCP数据,必须先建立一个虚拟电路,也就是TCP连接,建立TCP连接的标准过程是这样的:第一步,请求端(客户端)发送一个包含SYN标志的TCP报文,SYN即同步(Synchronize),同步报文会指明客户端使用的端口以及TCP连接的初始序号;第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgement)。
第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。
以上的连接过程在TCP协议中被称为三次握手(Three-way Handshake)。
会话连接建立后,对方检查共享资源的设置,通过注册表中的共享级别。
2.客户端:通过ss.socket()这个方法获取服务器的socket对象,并同过BufferReader来获取通道中的字节流中的内容3.服务器:将要发送的文件事先封装到通道内,并通过BufferWriter写入通道中四、系统功能描述及软件模块划分网络文件传输所实现的主要功能:网络文件传输主要由两个方面组成:1.客户端 2.服务器1.客户端:接受服务器发来的文件2.服务器:发送要发送的文件五、设计步骤1.服务器端的设计:①创建服务器对象ServerSocket ss = new ServerSocket (11111);②循环等待客户端的连接,若有客户端访问,就单独为它创建一个线程While(true){Socket s = ss.accept();New thread(new UserThread(s).start());}③封装字节流BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));④给出反馈bwServer.write(“文件上传成功”);⑤释放资源bw.close();2.客户端的设计①创建客户端对象Sockert s = new Socket();②封装文件BufferedWriter bw = new BUfferWriter(newOutputStreamWriter(s.getOutputStream()));③从通道中接受并反馈String client = brClient.readLine();System.out.println(client);④释放资源s.colse();六、关键问题及其解决方法1.怎样实现多线程的问题:While(true){Socket s = ss.accept();New thread(new UserThread(s).start());}2.怎样让// 封装通道内的流BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));// 封装文本文件// BufferedWriter bw = new BufferedWriter(new// FileWriter("Copy.java"));// 为了防止名称冲突String newName = System.currentTimeMillis() + ".txt";BufferedWriter bw = new BufferedWriter(new FileWriter(newName));String line = null;while ((line = br.readLine()) != null) { // 阻塞bw.write(line);bw.newLine();bw.flush();}客户端与服务器端运用TCP协议进行连接七、设计结果1.功能:实现客户端与服务器之间进行文件的传输2.课后思考题①套接字有基于阻塞和非阻塞的工作方式,试问你编写的程序是基于阻塞还是非阻塞的?各有什么优缺点?我编写的程序是基于阻塞的。
计算机网络课程设计报告文件传输协议的简单实现

课程设计课程名称计算机网络课程设计题目名称文件传输协议的简单设计与实现学生学院专业班级___ _学号学生姓名______ _________指导教师______ _____2010 年 1 月 5 日设计摘要关键词:SOCKET编程,FTPclient/server程序摘要:本课程设计包含了文件传输协议的简单设计与实现。
文件传送是各种计算机网络实现的基本功能,文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一。
文件传输协议的简单设计与实现建立在计算机网络实验环境TCP/IP 网络体系结构之上,使用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c),实现下述命令功能:get , put, pwd, dir, cd, ?, quit 等,利用了已有网络环境设计并实现简单应用层协议。
本设计包括了具体设计任务,基本思路及所涉及的相关理论,设计流程图,调试过程中出现的问题及相应解决办法,实验运行结果,核心程序,个人体会及建议等。
目录1、文件传输协议的简单设计与实现------------------------------181. 1 具体设计任务----------------------------------------------18 1.2 基本思路及所涉及的相关理论--------------------------------181.2.1基本思路-------------------------------------------------182.2.2 相关理论--------------------------------------------18 1.3设计流程图------------------------------------------------191.4实验运行情况----------------------------------------------191.5 核心程序--------------------------------------------------222.5.1 服务器(sever)程序---------------------------------222.5.2 客户(client)程序----------------------------------291.6心得体会-----------------------------------------------------------------------------37参考文献--------------------------------------------------------382、文件传输协议的简单设计与实现2. 1 具体设计任务计算机网络实验环境建立在TCP/IP 网络体系结构之上。
计算机网络文件传输及管理系统课程设计报告

目录摘要 (3)第一章课程设计要求 (4)一、设计任务 (4)课程设计内容 (4)、课程设计的基本要求 (4)二、设计基本思路及相关理论 (4)、TCP/IP协议 (4)]、客户机/服务器模型 (5)、设计基本思路 (5)第二章设计概要 (6)功能设计 (6)程序系统功能模块 (7)功能分析 (8)功能流程图: (8)程序主要功能说明 (8))第三章调试分析与测试结果 (24)服务器端与客户端 (24)文件管理的过程 (27)第四章设计总结 (29)参考文献 (29)课程设计评分表 (30)~*摘要网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。
Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。
Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。
要学Internet 上的TCP/IP网络编程,必须理解Socket接口。
Socket接口设计者最先是将接口放在Unix操作系统里面的。
如果了解Unix系统的输入和输出的话,就很容易了解Socket了。
常用的Socket类型有两种:流式Socket (SOCK_STREAM)和数据报式Socket (SOCK_DGRAM)。
流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。
Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。
要学Internet上的TCP/IP网络编程,必须理解Socket接口。
关键字:Socket、文件传输、多线程第一章课程设计要求]一、设计任务1.1.1 课程设计内容文件传输协议的简单设计与实现:学会利用已有网络环境设计并实现简单应用层协议,掌握TCP/IP网络应用程序基本的设计方法和实现技巧,加深对客户/服务器的工作模式的认识。
计算机网络课程设计实验报告

计算机网络课程设计实验报告1. 引言计算机网络是现代信息技术的基石,它的设计与实现对于计算机科学与技术专业的学生来说尤为重要。
本次实验旨在通过一个计算机网络课程设计项目,帮助学生进一步深入理解计算机网络的原理与实践,提升实际操作能力。
2. 实验目标本实验的目标是设计一个简单的局域网内部共享文件的系统。
具体要求如下:1.实现一个服务器程序,能够提供文件的上传与下载功能;2.实现一个客户端程序,能够通过命令行界面与服务器进行交互;3.实现文件的断点续传功能,确保文件可以在网络断开后继续传输;4.实现基本的权限管理功能,确保只有授权用户才能够上传和下载文件。
3. 实验环境本次实验的开发环境与工具如下:•操作系统:Windows 10•开发语言:Python 3.8•开发环境:PyCharm 2020.1•版本控制:Git4. 实验过程与方法4.1 系统架构设计本实验的系统架构包括服务器程序和客户端程序两个部分。
服务器程序采用C/S模型,在指定端口上监听客户端的请求,根据客户端发送的指令进行相应的操作,如上传文件、下载文件、断点续传等。
服务器程序使用了Python的socket模块实现网络通信。
客户端程序通过命令行界面与服务器进行交互,用户可以输入不同的指令来实现上传、下载、断点续传等功能。
客户端程序使用了Python的argparse模块处理命令行参数,使用socket模块与服务器进行通信。
4.2 文件传输实现文件的传输采用TCP协议进行,对于较大的文件,可以采用分片传输的方式,确保文件能够在网络断开后继续传输。
客户端程序在向服务器请求下载文件时,会先发送文件的元信息(如文件名、大小等),服务器会根据元信息判断文件是否存在、是否需要断点续传等。
对于需要断点续传的文件,服务器会记录已传输的字节数,并将剩余部分发送给客户端。
4.3 权限管理实现服务器程序实现了基本的权限管理功能,通过在服务器端维护一个用户列表,每次上传或下载文件时,都会要求用户进行身份验证。
网络文件传输的实训报告

一、实训背景随着互联网的普及,网络文件传输已经成为人们日常生活中不可或缺的一部分。
为了提高工作效率,降低成本,许多企业和个人都选择了网络文件传输的方式。
本次实训旨在让学生掌握网络文件传输的基本原理和操作方法,提高实际应用能力。
二、实训目的1. 了解网络文件传输的基本原理和常用协议;2. 掌握FTP、SFTP、FTPS等网络文件传输协议的使用方法;3. 学会使用常见的网络文件传输工具,如FileZilla、WinSCP等;4. 提高网络文件传输的安全性和效率。
三、实训内容1. 网络文件传输基本原理(1)TCP/IP协议:网络文件传输的基础协议,负责数据的传输和路由;(2)FTP(File Transfer Protocol):文件传输协议,是最常用的网络文件传输协议之一;(3)SFTP(Secure File Transfer Protocol):安全文件传输协议,基于SSH协议,具有更高的安全性;(4)FTPS(FTP Secure):基于SSL/TLS的FTP协议,提供了加密传输功能。
2. 网络文件传输工具使用(1)FTP客户端:FileZilla、FlashFXP等;(2)SFTP客户端:WinSCP、Cygwin等;(3)FTPS客户端:FileZilla、SecureCRT等。
3. 网络文件传输安全与效率(1)选择安全的传输协议,如SFTP、FTPS等;(2)使用强密码,并定期更换;(3)采用加密文件传输,提高数据安全性;(4)合理规划文件传输路径,提高传输效率。
四、实训步骤1. 安装FTP服务器:在虚拟机或本地计算机上安装FTP服务器,如WAMP、XAMPP 等;2. 配置FTP服务器:设置用户权限、目录权限等;3. 使用FTP客户端连接FTP服务器:在FileZilla、FlashFXP等FTP客户端中输入FTP服务器地址、端口、用户名和密码,连接服务器;4. 上传和下载文件:在FTP客户端选择需要上传或下载的文件,点击上传或下载按钮;5. 使用SFTP客户端进行安全文件传输:在WinSCP、Cygwin等SFTP客户端中输入SFTP服务器地址、端口、用户名和密码,连接服务器;6. 使用FTPS客户端进行加密文件传输:在FileZilla、SecureCRT等FTPS客户端中输入FTPS服务器地址、端口、用户名和密码,连接服务器。
文件传输系统课程设计

文件传输系统课程设计一、课程目标知识目标:1. 理解文件传输系统的基本概念,掌握其工作原理;2. 学习并掌握常用的文件传输协议,如FTP、SFTP、FTPS等;3. 了解文件传输过程中的安全性和权限控制方法。
技能目标:1. 能够独立搭建简单的文件传输系统,并进行基本配置;2. 学会使用不同文件传输协议进行文件的上传和下载;3. 掌握对文件传输过程进行监控和管理的方法。
情感态度价值观目标:1. 培养学生对计算机网络知识的学习兴趣,增强其探究网络技术的欲望;2. 培养学生具备良好的网络素养,尊重知识产权,自觉抵制非法文件传输行为;3. 培养学生的团队协作精神,使其在合作中共同进步。
分析课程性质、学生特点和教学要求:1. 课程性质:本课程属于计算机网络技术领域,具有较强的理论性和实践性;2. 学生特点:学生具备一定的计算机网络基础知识,对实际操作有较高的兴趣;3. 教学要求:注重理论与实践相结合,强调学生动手能力,提高学生的实际应用能力。
二、教学内容1. 文件传输系统概述- 了解文件传输系统的基本概念和发展历程;- 学习文件传输系统的基本组成和功能。
2. 常用文件传输协议- FTP协议:学习FTP的工作原理、命令和应答;- SFTP协议:了解SFTP的安全特性,掌握SFTP的连接和操作方法;- FTPS协议:学习FTPS的加密机制,了解其在文件传输中的应用。
3. 文件传输安全与权限控制- 学习文件传输过程中的加密技术,如SSL/TLS;- 掌握基于用户身份验证的权限控制方法;- 了解常见文件传输安全问题和应对措施。
4. 文件传输系统的搭建与配置- 学习如何安装和配置文件服务器;- 掌握客户端连接文件服务器的操作方法;- 学习对文件传输系统进行监控和管理的方法。
5. 实践操作与案例分析- 搭建一个简单的文件传输系统,进行实际操作练习;- 分析典型的文件传输案例,了解实际应用场景;- 学习解决文件传输过程中可能遇到的问题。
文件传输课程设计

文件传输课程设计一、课程目标知识目标:1. 让学生理解文件传输的基本概念,掌握不同传输方式的优缺点;2. 使学生掌握使用常见文件传输软件和工具,如FTP、网盘等;3. 引导学生了解网络通信协议中与文件传输相关的内容。
技能目标:1. 培养学生能够独立选择合适的文件传输方式,并进行实际操作;2. 提高学生解决文件传输过程中遇到问题的能力;3. 培养学生具备一定的网络通信协议分析和配置能力。
情感态度价值观目标:1. 培养学生对网络技术的兴趣,激发他们探索新技术的热情;2. 引导学生树立正确的网络安全意识,遵守网络道德规范;3. 培养学生具备团队协作精神,善于与他人分享和交流。
课程性质:本课程为信息技术课程,旨在帮助学生掌握文件传输的相关知识和技能,提高他们在实际应用中解决问题的能力。
学生特点:考虑到学生所在年级,已具备一定的计算机操作基础和网络知识,对新鲜事物充满好奇,但可能对网络通信协议等较为抽象的概念理解困难。
教学要求:结合学生特点,课程设计应注重实践操作与理论知识的结合,以实例讲解和操作演示为主,注重启发式教学,引导学生主动探究和解决问题。
同时,关注学生的情感态度价值观培养,提高他们的综合素质。
通过分解课程目标为具体学习成果,为后续教学设计和评估提供依据。
二、教学内容1. 文件传输基本概念:介绍文件传输的定义、分类和常用传输方式;教材章节:第一章 网络基础知识 第三节 文件传输与网络应用2. 常见文件传输工具:讲解FTP、网盘等工具的使用方法和操作步骤;教材章节:第二章 网络应用实践 第四节 文件传输工具的使用3. 网络通信协议:分析TCP/IP协议中与文件传输相关的内容,如HTTP、FTP 协议;教材章节:第三章 网络通信协议 第二节 常用网络协议介绍4. 文件传输的安全与隐私:探讨如何确保文件传输过程中的安全性和保护用户隐私;教材章节:第四章 网络安全 第一节 文件传输的安全与隐私5. 实践操作:安排学生进行实际操作,包括FTP服务器搭建与访问、网盘的使用等;教材章节:第五章 实践操作 第二节 文件传输实践6. 案例分析与讨论:通过案例分析,使学生了解文件传输在实际应用中的问题及解决方法;教材章节:第六章 案例分析 第四节 文件传输案例分析教学内容安排和进度:第一课时:文件传输基本概念第二课时:常见文件传输工具的使用第三课时:网络通信协议与文件传输第四课时:文件传输的安全与隐私第五课时:实践操作及案例分析讨论三、教学方法1. 讲授法:对于文件传输的基本概念、网络通信协议等理论知识,采用讲授法进行教学。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录摘要 (3)第一章课程设计要求 (4)一、设计任务 (3)1.1.1 课程设计内容 (3)1.1.2、课程设计的基本要求 (3)二、设计基本思路及相关理论 (3)1.2.1、TCP/IP协议 (3)1.2.2、客户机/服务器模型 (4)1.2.3、设计基本思路 (4)第二章设计概要 (5)2.1 功能设计 (5)2.2 程序系统功能模块 (6)2.3 功能分析 (7)2.3.1 功能流程图: (7)2.3.2 程序主要功能说明 (7)第三章调试分析与测试结果 (23)3.1服务器端与客户端 (23)3.2文件管理的过程 (26)第四章设计总结 (28)参考文献 (28)课程设计评分表 (30)摘要网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。
Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。
Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。
要学Internet上的TCP/IP网络编程,必须理解Socket接口。
Socket接口设计者最先是将接口放在Unix操作系统里面的。
如果了解Unix系统的输入和输出的话,就很容易了解Socket了。
常用的Socket类型有两种:流式Socket (SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。
流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。
Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。
要学Internet上的TCP/IP网络编程,必须理解Socket接口。
关键字:Socket、文件传输、多线程第一章课程设计要求一、设计任务1.1.1 课程设计内容文件传输协议的简单设计与实现:学会利用已有网络环境设计并实现简单应用层协议,掌握TCP/IP网络应用程序基本的设计方法和实现技巧,加深对客户/服务器的工作模式的认识。
用socket 编程接口编写程序,分别为客户程序(ftpclient.cpp)和服务器程序(ftpserver.cpp)和管理程序。
1.1.2、课程设计的基本要求○1.巩固和加深对计算机网络原理的理解,提高综合运用本课程所学知识的能力。
○2.培养选用参考书,查阅手册及文献资料的能力。
培养独立思考,深入研究,分析问题、解决问题的能力。
○3.通过实际分析设计、编程调试,掌握计算机网络通信的基本规程,以及协议的利用方法,体会体系结构分层的思路。
○4.能够按要求编写课程设计报告书,能正确阐述设计和设计结果、正确绘制系统和程序框图。
○5.通过课程设计,培养严谨的科学态度,严肃认真的工作作风,和团队协作精神。
二、设计基本思路及相关理论1.2.1、TCP/IP协议T CP/IP协议是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。
TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。
协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。
TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于点对点的通讯。
TCP提供的是一种可靠的数据流服务,采用一种称为“滑动窗口”的方式进行流量控制。
TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。
应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP 层,设备驱动程序和物理介质,最后到接收方。
1.2.2、客户机/服务器模型网络应用层程序一般都是以客户机/服务器模型的方式工作的,而因特网便是客户机/服务器模型的一个典型应用。
在这种工作方式中,一个服务器程序先启动,并在一个熟知端口侦听对服务器的请求,当客户机应用程序需要某种服务时,须向提供这种服务的服务器发出请求,服务器在接收到请求后,向客户机发出响应请求信息。
这样客户机用用程序和服务器程序之间变建立了连接,此后可以进行数据通信。
通信任务完成后需要关闭它们之间的通信连接。
图1 客户机/服务器模型的工作流程1.2.3、设计基本思路设计程序使客户端连接的时候,服务器将会向客户端发回一条消息告知它的IP地址,然后关闭连接并继续接收端口的连接。
建立各个命令功能对应的函数,发送请求,等待服务器端的服务。
服务器端初始化WinSock,创建SOCKET,获取主机信息,并对客户端进行会话,发送回复讯息给客户端,响应完毕后关闭连接,释放WinSock。
模拟TCP/IP协议的工作模式,在双方工作的时候开设一个熟知端口(4523),进行数据的传送与接收。
模拟TCP工作机制,确定数据端口传送数据时,进行分组传送。
服务器从打开开始,保持监听控制端口,当用户登陆成功后,主动分配该用户服务线程。
在传送数据的时候,为了确保不影响原程序的工作,应独立分配线程。
本设计基本图如下:第二章设计概要2.1 功能设计本项目是为了实现基于Socket进行文件传输的功能。
项目的分析及设计要求如下:1)整个系统中分为服务器端(Server)和客户端(Client)2)服务器端可以对文件进行管理,包括上传,下载,删除文件,重命名等3)客服端可以实现文件的上传、下载以及查看服务器下默认目录的文件列表4)在程序中应用多线程来实现多个客户端同时对一个服务器端进行请求操作2.2 程序系统功能模块图2.12.3 功能分析2.3.1 功能流程图:图2.2 面向连接的客户机/服务器程序工作模型2.3.2 程序主要功能说明主要功能实现代码如下:1.服务器端//server.cpp#include <stdio.h>#include <stdlib.h>#include <WinSock2.h>#include <io.h>#define LISTENPORT 12345#pragma comment(lib,"Wsock32")#pragma comment(lib,"ws2_32")sendFile(SOCKET conSock){printf("Prapare to send file\n");char *sendBuf = new char[100];FILE *in;char infile[50] ;printf("选择要传输的文件");scanf("%[^\n]s",infile);if((in=fopen(infile,"rb"))==NULL){printf("Can't open the source file");exit(0);}printf("File name is %s\n", infile);// send file name to the clientsend(conSock, infile, sizeof(infile), 0);int handle = open(infile, 0x0001);long file_len = filelength(handle);long file_len_bak = file_len;printf("Size of the file is %d\n", file_len);// store the length of the file in sendBuffer int i;for (i = 0; file_len > 9; i++){sendBuf[i] = (file_len % 10);file_len = file_len / 10;}sendBuf[i] = file_len % 10;send(conSock, sendBuf, i + 1, 0);printf("Transmission started\n");Sleep(1);char ch;char chack;while (file_len_bak != 0){ch = fgetc(in);send(conSock, &ch, 1, 0);recv(conSock, &chack, 1, 0);file_len_bak--;printf(".");}ch = EOF;send(conSock, &ch, 1, 0);printf("\nTransmission finished");}int main(){WSADATA words;if(WSAStartup(MAKEWORD(2,2),&words)!=0){printf("Winsock init failed!\n");}SOCKET listenSock, conSock;sockaddr_in remoteAddr;int remoteAddrLen, int ServerAddrLen;listenSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (listenSock == INVALID_SOCKET){printf("ListenSocket create failed!\n");return 0;}sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(LISTENPORT);sin.sin_addr.S_un.S_addr = INADDR_ANY;ServerAddrLen = sizeof(sin);if (bind(listenSock, (sockaddr *)&sin, ServerAddrLen) == SOCKET_ERROR) {printf("Bind error!\n");return 0;}if (listen(listenSock, 2) == SOCKET_ERROR){printf("Can't listen!\n");return 0;}remoteAddrLen = sizeof(remoteAddr);while (TRUE){conSock = accept(listenSock, (sockaddr *)& remoteAddr, &remoteAddrLen);if (conSock == INVALID_SOCKET){printf("Accept failed!\n");continue;}else{printf("Accept a new connect : %s \r\n", inet_ntoa(remoteAddr.sin_addr));sendFile(conSock);}}closesocket(conSock);closesocket(listenSock);WSACleanup();return 1;}2.客户端//client.cpp#include <stdio.h>#include <stdlib.h>#include <WinSock2.h>#include <fstream>using namespace std;#define SERVERPORT 12345#pragma comment(lib, "Wsock32")#pragma comment(lib, "ws2_32")receiveFile(SOCKET consock){printf("Prepare to receive file\n");FILE *dest;char destfile[50];char recvBuff[100];// Receive name of the fileint namelen = recv(consock, recvBuff, 100, 0);memcpy(destfile, recvBuff, namelen);printf("Name of the file is %s \n", destfile);if((dest=fopen(destfile,"wb"))==NULL){printf("Can't open the dest file");exit(0);}// Receive size of the fileint flag_file_len = recv(consock, recvBuff, 100, 0); long file_len = 0;for (int i = 0; flag_file_len != 0; i++){long temp = recvBuff[i];for (int j = 0; j != i; j++){temp = temp * 10;}file_len = file_len + temp;flag_file_len--;}printf("Size of the file is %ld\n", file_len);printf("Ready to receive file\n");char ch;char chack = 1;int n;while ( recv(consock, &ch, 1, 0)){fputc(ch, dest);send(consock, &chack, 1, 0);file_len--;if (file_len == 0){break;}printf(".");}printf("\nTransmission finished\n");}int main(){WSADATA words;if(WSAStartup(MAKEWORD(2,2),&words)!=0){printf("Winsock init failed\n");}SOCKET conSock;conSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (conSock == INVALID_SOCKET){printf("Socket create failed\n");return 0;}sockaddr_in servAddr;servAddr.sin_family = AF_INET;servAddr.sin_port = htons(SERVERPORT);servAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");if (connect(conSock, (sockaddr *)& servAddr, sizeof(servAddr)) == -1) {printf("Connect failed\n");return 0;}else{printf("Connect to server succeed\n");receiveFile(conSock);}closesocket(conSock);WSACleanup();return 1;}3.管理系统#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <string.h>#include <time.h>#define SYS_SIZE 0XFFFFF*100#define BLOCK_SIZE 512FILE *f;struct filsys{int s_nfree;long s_free[100];int s_ninode;int s_inode[96];}*p;struct index_block{int s_nfree;long s_free[96];}q;struct filelist{char name[14];int inode_num;}file;struct inode{int i_size;int block_amount;long i_addr[16];char create_time[25];}inode;struct fcb{char name[12];int inode_num;int used;int i_size;int block_amount;long i_addr[16];}fcb[5],*ptr;struct open_file_table{int offset;struct fcb* f_node;}table[5];struct fd{struct open_file_table* t_node;}fd[5];FILE* apply_room(char *sys_name){f = fopen(sys_name,"w+b"); //创建一个新的可读写的二进制文件 fseek(f,SYS_SIZE,SEEK_SET);fputc(EOF, f);fclose(f);return fopen(sys_name,"r+b"); //打开一个可读写的二进制文件}void myfree(long block_num){int i;if(p->s_nfree<100){p->s_free[p->s_nfree]=block_num;p->s_nfree++;}else{q.s_nfree=p->s_nfree;for(i=0;i<100;i++)q.s_free[i]=p->s_free[i];fseek(f,(block_num-1)*BLOCK_SIZE,SEEK_SET); fwrite(&q,sizeof(struct index_block),1,f); p->s_nfree=1;p->s_free[0]=block_num;}}long myalloc(){int i;long a;p->s_nfree--;if(p->s_nfree==0){a=p->s_free[0];fseek(f,(a-1)*BLOCK_SIZE,SEEK_SET);fread(&q,sizeof(struct index_block),1,f); p->s_nfree=q.s_nfree;for(i=0;i<100;i++)p->s_free[i]=q.s_free[i];return a;}else return p->s_free[p->s_nfree];}void init(){int j;long i;p->s_nfree=1;p->s_free[0]=0;p->s_ninode=96;for(i=0;i<96;i++)p->s_inode[i]=-1;for(i=22;i<=SYS_SIZE/BLOCK_SIZE;i++)myfree(i);j=p->s_nfree+1;while(j<100)p->s_free[j++]=0;fseek(f,0,SEEK_SET);fwrite(p,sizeof(struct filsys),1,f);}int ialloc(){int i=0;while(p->s_inode[i]>=0) i++;p->s_inode[i]=0;p->s_ninode--;return i;}int namei(char *name){int k=0;while(k<96){if(p->s_inode[k]!=-1){fseek(f,BLOCK_SIZE+k*16,SEEK_SET);fread(&file,sizeof(struct filelist),1,f); if(!strcmp(,name))return file.inode_num;}k++;};return -1;}int name_i(char *name){int k=0;do{if(fcb[k].used==1){if(!strcmp(fcb[k].name,name))return fcb[k].inode_num;}k++;}while(k<5);return -1;}void create(){int i,inode_num;long t;char name[12];printf("input file name:");scanf("%s",name);getchar();if(namei(name)!=-1) printf("file exited!\n");else{inode_num=ialloc();strcpy(,name);file.inode_num=inode_num;fseek(f,BLOCK_SIZE+inode_num*16,SEEK_SET);fwrite(&file,sizeof(struct filelist),1,f);inode.i_size=0;inode.block_amount=0;for(i=0;i<16;i++) inode.i_addr[i]=0;time(&t);strcpy(inode.create_time,ctime(&t));fseek(f,4*BLOCK_SIZE+inode_num*sizeof(struct inode),SEEK_SET); fwrite(&inode,sizeof(struct inode),1,f);p->s_inode[inode_num]=0;printf("create sucessfully!\n");}}void display(){int k;for(k=0;k<96;k++){if(p->s_inode[k]>=0){fseek(f,BLOCK_SIZE+k*16,SEEK_SET);fread(&file,sizeof(struct filelist),1,f);printf("%s ",);fseek(f,4*BLOCK_SIZE+file.inode_num*sizeof(structinode),SEEK_SET);fread(&inode,sizeof(struct inode),1,f);printf("size:? ",inode.i_size);printf("time:%s\n",inode.create_time);}};printf("\n");getchar();}void open_file(){ int i=0,j=0,k=0;int m,n;char name[12];printf("input file's name:");scanf("%s",name);getchar();n=namei(name);if(n==-1) printf("file not exits!\n");else if(p->s_inode[n]>0) printf("file have already been opened!\n"); else{while(fcb[i].used==1) i++;while(table[j].f_node) j++;while(fd[k].t_node) k++;fd[k].t_node=&table[j];table[j].f_node=&fcb[i];strcpy(fcb[i].name,name);fcb[i].inode_num=n;fcb[i].used=1;fseek(f,4*BLOCK_SIZE+n*sizeof(struct inode),SEEK_SET);fread(&inode,sizeof(struct inode),1,f);fcb[i].i_size=inode.i_size;fcb[i].block_amount=inode.block_amount;for(m=0;m<16;m++) fcb[i].i_addr[m]=inode.i_addr[m];p->s_inode[n]=k+100;printf("file is open!\n");}}void write_file(){ int sizeQ2;int k,block_amount,n,size=0,i=0;long block_num;char ch,name[12];printf("input file's name:");scanf("%s",name);getchar();n=name_i(name);if(n==-1) printf("file not exits or not open!\n");else{k=p->s_inode[n]-100;ptr=fd[k].t_node->f_node;while(i<ptr->block_amount){block_num=ptr->i_addr[i];myfree(block_num);i++;}block_amount=0;printf("input the context of the file:(end the file with '*')\n"); while((ch=getchar())!='*'&&block_amount<16){size++;if(sizeQ2==1){block_num=myalloc();inode.i_addr[block_amount]=ptr->i_addr[block_amount]=block_num;block_amount++;fseek(f,(block_num-1)*BLOCK_SIZE,SEEK_SET);}fputc(ch,f);}getchar();inode.i_size=ptr->i_size=size;inode.block_amount=ptr->block_amount=block_amount;fseek(f,4*BLOCK_SIZE+n*sizeof(struct inode),SEEK_SET);fwrite(&inode,sizeof(struct inode),1,f);}}void read_file(){int k,n,block_amount,size;int i=0;long block_num;char name[12],buf[512];printf("input file's name:");scanf("%s",name);getchar();n=name_i(name);if(n==-1) printf("file not exits or not open!");else{k=p->s_inode[n]-100;ptr=fd[k].t_node->f_node;size=ptr->i_size;block_amount=ptr->block_amount;for(i=0;i<block_amount;i++){block_num=ptr->i_addr[i];fseek(f,(block_num-1)*BLOCK_SIZE,SEEK_SET);if(size>512) {fread(buf,sizeof(char),512,f); size=size-512;} else{fread(buf,sizeof(char),size,f);buf[size]='\0';}printf("%s",buf);}}printf("\n");}void del_file(){ int n,i=0;long block_num;char name[12];printf("input file's name:");scanf("%s",name);getchar();n=namei(name);if(n==-1) printf("file not exits!\n");else if(p->s_inode[n]>0) printf("file is open now!Close it first\n"); else{p->s_inode[n]=-1;fseek(f,4*BLOCK_SIZE+n*sizeof(struct inode),SEEK_SET);fread(&inode,sizeof(struct inode),1,f);while(i<inode.block_amount){block_num=inode.i_addr[i];myfree(block_num);i++;}strcpy(,"");file.inode_num=0;fseek(f,BLOCK_SIZE+n*16,SEEK_SET);fwrite(&file,sizeof(struct filelist),1,f);printf("file is deleted\n");}}void close_file(){ int k,n;char name[12];printf("input file's name:");scanf("%s",name);getchar();n=name_i(name);if(n==-1) printf("file not exits or not open\n");else{k=p->s_inode[n]-100;fd[k].t_node->f_node->used=0;fd[k].t_node->f_node=NULL;fd[k].t_node=NULL;p->s_inode[n]=0;printf("file is closed!\n");}}void myexit(){ int i=0;char ch;while(fcb[i].used==0) i++;if(i<5){getchar();printf("some files are still open\n");printf("input 'q' to quit or other key to return:\n"); scanf("%c",&ch);if(ch=='q'){while(i<5){if(fcb[i].used==1) p->s_inode[fcb[i].inode_num]=0; i++;}fseek(f,0,SEEK_SET);fwrite(p,sizeof(struct filsys),1,f);exit(0);}getchar();}else{fseek(f,0,SEEK_SET);fwrite(p,sizeof(struct filsys),1,f);exit(0);}}void main(){int i;char ch,sys_name[15];p=(struct filsys *)malloc(sizeof(struct filsys));while(1){printf("1:Create a new file system\n");printf("2:open an existed file system\n");printf("choose:");if((ch=getchar())=='1'){printf("input file system's name:");scanf("%s",sys_name);getchar();f=apply_room(sys_name);init();break; //这里的break用来跳出while(1)的循环}else if(ch=='2'){printf("input file system's name:");scanf("%s",sys_name);getchar();f=fopen(sys_name,"r+b");fseek(f,0,SEEK_SET);fread(p,sizeof(struct filsys),1,f);break;}else{printf("wrong input!\n");getchar();}};for(i=0;i<5;i++){fcb[i].used=0;table[i].f_node=NULL;fd[i].t_node=NULL;}while(1){printf("--------------------------------------------------------------------\n");printf("1:create 2:open 3:write 4:read 5:close 6:delete 7:display 8:exit\n");printf("choose:");switch(getchar()-'0'){case 1:create();break;case 2:open_file();break;case 3:write_file();break;case 4:read_file();break;case 5:close_file();break;case 6:del_file();break;case 7:display();break;case 8:myexit();break;default:getchar(); printf("wrong input!\n"); break;}};free(p);fclose(f);}第三章调试分析与测试结果3.1服务器端与客户端需要传输的文件服务器和客户端建立连接的初始状态服务器传输文件及客户端接收文件的过程客户端接收到的文件3.2文件管理的过程文件管理创建的文件第四章设计总结这次课程设计可谓收获颇大,首先从一开始对编程只有肤浅的认识,到做完实验后有了一定程度的了解,并能够进行简单的程序设计和编写。