摘要
Ubuntu是一个以桌面应用为主的Linux操作系统,想更加深人地体验Ubuntu,则需要运行虚拟机,在虚拟机中获得更完整的体验。下载安装虚拟机。成功安装后运行虚拟机,选择菜单栏中的“管理”→“导入虚拟电脑”选项,将所下载体验镜像导入虚拟机,最后运行Ubuntu虚拟机,这样就可以获得比较真实的体验。在虚拟机中几乎可以完成所有操作,没有限制。我们本次编程都是基于Vmware下运行的ubuntu终端进行的。
在计算机中,凡是提供服务的一方我们称为服务端(Server),而接受服务的另一方我们称作客户端(Client)。不过客户端及服务器端的关系不见得一定建立在两台分开的机器上,提供服务的伺服端及接受服务的客户端也有可能都在同一台机器上,这样在同一台机器上就同时扮演服务器端及客户端,所以我们采用双开ubuntu终端模拟进行本次的文件传输。
套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象。它们允许程序接受并进行连接,如发送和接受数据。为了建立通信通道,网络通信的每个端点拥有一个套接字对象极为重要。
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。
Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要进行TCP/IP网络编程,必须理解Socket接口。
一.实训系统总述
由于学生对C语言,操作系统的实际操作跟知识有所欠缺,所以进行本次实训以增强动手,动脑实践能力,摆脱以往学校的模式用契合实际工作的模式进行小项目编程,项目简单易上手,其中包括文件的上传,下载和管理,学会在windows系统上运行虚拟机以支持ununtu系统运行,以及了解linux的系统优点和搜查本课题的编程知识,拓宽自己的视野了解更多以后工作所需的知识。
2.实训要求:
进行Liunx下基于socket套接字的文件传输程序设计,包括文件的进行管理,点对点传输(上传,下载),删除文件等。查阅了解编写该程序的所有知识,理解每个代码跟函数的用法跟意义并进行总结,最后会进行答辩。
3. 开发工具与平台:
开发工具:一台windows系统电脑,C语言;
开发平台:Linux系统
二.设计原理
1.程序总体设计思路
让客户端与服务器建立链接即可实现通信
服务端建立套接字的大致步骤:
(1)建立socket;(2)bind绑定特定的端口;(3)listen监听特定的端口;(4)Accept当有客户端连接服务器端口时,accept接收信息,并返回新的套接字描述符﹐提供给操作;(5)根据实际需求进行write,read,send,recv等操作。
客户端大致步骤:
1.创建socket;2.根据服务器地址,connect连接到特定服务器;3.进行write,read等读写操作;4.关闭套接字。
2.程序总体设计框架
基础数据传输框架:
基于socket的TCP/IP协议通信框架:
3.整个文件传输系统中客户端及服务器所需实现的功能:
4.具体数据传输思路解释:
(1)服务器先用socket()函数来建立一个套接口,用这个套接口完成通信的
监听及数据的收发。
(2)服务器用bind()函数来绑定一个端口号和ip地址,是套接口与指定的
端口号和ip关联。
(3)服务器调用linsten()函数,是服务器的端口和lp处于监听状态,等待
网络中某一个客户机的连接请求。
(4)客户机用socket()函数建立一个套接口,设定远程ip和端口
(5)客户机调用connect()函数连接远程计算机指定的端口。<