课程设计要求-Linux下基于socket的文件传输程序设计_第1页
课程设计要求-Linux下基于socket的文件传输程序设计_第2页
课程设计要求-Linux下基于socket的文件传输程序设计_第3页
课程设计要求-Linux下基于socket的文件传输程序设计_第4页
课程设计要求-Linux下基于socket的文件传输程序设计_第5页
已阅读5页,还剩6页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

河北联合大学课程设计报告Linux高级开发课程设计报告课程设计题目:Linux下基于socket的文件传输程序设计学院:_________________________________专业班级:__________________________________年级:_________________________________姓名:___________________________________学号:___________________________________完成时间:_________年_________月__________日成绩:____________________________________指导教师:____________________________________

课程设计指导教师评定成绩表项目分值优秀(100>x≥90)良好(90>x≥80)中等(80>x≥70)及格(70>x≥60)不及格(x<60)评分参考标准参考标准参考标准参考标准参考标准学习态度15学习态度认真,科学作风严谨,严格保证设计时间并按任务书中规定的进度开展各项工作学习态度比较认真,科学作风良好,能按期圆满完成任务书规定的任务学习态度尚好,遵守组织纪律,基本保证设计时间,按期完成各项工作学习态度尚可,能遵守组织纪律,能按期完成任务学习马虎,纪律涣散,工作作风不严谨,不能保证设计时间和进度技术水平与实际能力25设计合理、理论分析与计算正确,实验数据准确,有很强的实际动手能力、经济分析能力和计算机应用能力,文献查阅能力强、引用合理、调查调研非常合理、可信设计合理、理论分析与计算正确,实验数据比较准确,有较强的实际动手能力、经济分析能力和计算机应用能力,文献引用、调查调研比较合理、可信设计合理,理论分析与计算基本正确,实验数据比较准确,有一定的实际动手能力,主要文献引用、调查调研比较可信设计基本合理,理论分析与计算无大错,实验数据无大错设计不合理,理论分析与计算有原则错误,实验数据不可靠,实际动手能力差,文献引用、调查调研有较大的问题创新10有重大改进或独特见解,有一定实用价值有较大改进或新颖的见解,实用性尚可有一定改进或新的见解有一定见解观念陈旧论文(计算书、图纸)撰写质量50结构严谨,逻辑性强,层次清晰,语言准确,文字流畅,完全符合规范化要求,书写工整或用计算机打印成文;图纸非常工整、清晰结构合理,符合逻辑,文章层次分明,语言准确,文字流畅,符合规范化要求,书写工整或用计算机打印成文;图纸工整、清晰结构合理,层次较为分明,文理通顺,基本达到规范化要求,书写比较工整;图纸比较工整、清晰结构基本合理,逻辑基本清楚,文字尚通顺,勉强达到规范化要求;图纸比较工整内容空泛,结构混乱,文字表达不清,错别字较多,达不到规范化要求;图纸不工整或不清晰指导教师评定成绩:指导教师签名:年月日

摘要线程(thread)技术早在60年代就被提出,但真正应用线程到操作系统中去,是在80年代中期。为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式。在Linux系统下,启动一个新的进程必须分配独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段。而运行于一个进程中的多个线程,它们之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间所需要的时间。使用多线程的理由之二是线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式费时且很不方便。由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这样快且方便。在计算机中,凡是提供服务的一方我们称为服务端(Server),而接受服务的另一方我们称作客户端(Client)。不过客户端及伺服端的关系不见得一定建立在两台分开的机器上,提供服务的伺服端及接受服务的客户端也有可能都在同一台机器上,这样在同一台机器上就同时扮演伺服端及客户端。线程间方便的通信机制可以使得在我们在服务端和客户端方便的进行通信传输与各种操作,可以通过运用多线程机制方便实现上传、下载文件;增加、删除用户;以及在服务端进行文件的管理。关键字:多线程、socket通信、服务器和客户端

·1设计要求这次课程设计的要求是在以Linux为内核的操作系统下,实现多线程文件传输系统功能模块。系统模块分为服务器和客户端两部分,客户端实现对文件的上传、下载和查看服务器默认路径下的文件列表;服务器根据客户端命令对文件进行管理操作。多线程文件传输是一种一对多或者多对多的关系,一般是一个服务器对应着多个客户端。客户端通过socket连接服务器,服务器要为客户端创建一个单独进程(线程)监听每个客户端的请求。创建好连接之后文件就可以通过流的形式传输。linux内核中为我们提供了两种不同形式的读写流,包括read()、write()和send()、recv()。客户机对文件的查看指令也是通过流传递给服务器,服务器根据请求类型返回不同相应流。根据socket原理和特点绘画出链接流程图,将客户机与服务器的相互通信划分为不同的模块,每个模块负责独立的功能项。客户端连接服务器后输入指令管理目录下的文件,客户端向服务器发送上传、下载和查看请求,将文件下载到当前路径下,从当前路径下上传文件给服务器,upload是上传文件命令,格式为upload[上传文件路径]download是下载文命令,格式为download[下载文件路径]list列出服务器的文件列表命令。

·2socket通信原理 国际标准化组织(ISO)在1978年提出开放系统互连参考模型(OSI:opensysteminterconnectionreferencemode),该模型是设计和描述网络通信的基本框架。OSI采用分层的额结构化技术将通信网络分为7层,从低到高为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP参考模型是由美国国防部创建,且发展至今最成功的通信协议模型,与OSI模型对应,它将网络功能分为4层,包括网络接口层、网络层、传输层和应用层,每一层都有对应的协议。在传输层的主要协议是TCP协议和UDP协议。socket连接就是基于TCP协议。TCP是一种可靠地数据传输协议。 socket是一种套接口,它把网络地址和端口号信息放在一个结构体中,也就是套接字地址结构。 结构图如下: 套接口与ip、端口号的关系套接口与ip、端口号的关系套接口229999229999Ip地址端口号 通用套接口地址数据结构定义在<sys/socket.h>头文件中,形式如下: structsockaddr { uint8_tsa_len; sa_family_tsa_family; charsa_data[14]; }; IPv4套接口地址数据结构以socketaddr_in命名,定义在<netinet/in.h>头文件中,形式如下: structsocketaddr_in { unit8_tsin_len; sa_family_tsin_family; in_port_tsin_port; structin_addrsin_addr; unsignedcharsin_zero[8]; } 下图是TCP套接口通信工作流程图:

结束连接通知结束连接通知应答信号服务请求三次握手过程挂起,直到有客户机的连接请求Socket()客户机进程服务器进程Bind()Listen()Accept()Recv()Send()Connect()Send()Recv()Close()Socket()Recv()TCP套接口通信工作过程通信工作的大致流程:服务器先用socket()函数来建立一个套接口,用这个套接口完成通信的监听及数据的收发。服务器用bind()函数来绑定一个端口号和ip地址,是套接口与指定的端口号和ip关联。服务器调用linsten()函数,是服务器的端口和Ip处于监听状态,等待网络中某一个客户机的连接请求。客户机用socket()函数建立一个套接口,设定远程ip和端口客户机调用connect()函数连接远程计算机指定的端口。服务器调用accept()函数来接受远程计算机的连接请求,建立起与客户机之间的通信连接。建立连接之后,客户机用write()函数(或send())想socket中写入数据。也可以用read()函数(或recv()函数)赌气服务器发送来的数据。服务器用read()函数(或recv()函数)来读取客户机发来的数据,也可以用write()函数(或send()函数)来发送数据。完成通信以后,使用close()函数关闭socket连接。

·3详细设计过程·3.1服务器端创建监听与文件管理 ·3.2客户端连接与文件传输 ·4结果演示·5实现代码5.1服务器代码 5.2客户端代码

6总结体会为期一周的Linux课程设计结束了,从中获益匪浅。一方面是检查了这一个学期来linux内核编程学习成果,将书本的理论知识运用到实践中,另一方面在实践中加深了对理论知识的理解,与此同时够让我们认清自己在学习Socket编程方面的不足之处和薄弱环节,并加以弥补和巩固,通过对线程同步程序设计,进一步的巩固用Socket编程的能力,并且也有利于更好的掌握C语言。例如在改写成tcp过程中对其他函数也要进行相应的修改。生成可执行文件,无错误后开始运行,但是不能连接,总是出错误,然后继续改正,最终发现错误在sock创建主动套接口转为被动时没有运用TCP流式套接字(SOCK_STREAM)。而且发现tcp有专用函数listen(),其仅被TCP服务器调用,将sock创建的主动套接口转换为被动套接口,TCP使用send()函数发送数据。从编程中体会颇多,学到了很多东西,懂得了怎样建立TCP套接字以及加锁解锁和条件变量的作用。也懂得了网络通信中服务器需要循环等待客户端连接进来,然后创立一个单独的线程来监听该客户端的行为动作。同时加强了我对TCP/IPSocket编程这门课程的认识,并且也复习了以前学习到的知识,自己的逻辑思维能力也得到了一定的提高。通过这次课程设计,懂得了理论与实际相结合是很重要的,只有理论是远远不够的,只有把所学的理论知识与实践相结合起来,从理论知识与实践相结合,从理论中得出结论,才是真正的知识,才能提高自己的事迹动手能力和独立思考的能力。·

参考文献[1](美)RoberLove《LinuxKernelDevelopment》(ThirdEdition)机械工业出

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论