5.4 利用 tcp 实现文件传输

16
四四四四四四四四四四 http://www.scemi.com 5.4 四四 tcp 四四四四 四四四四四 四四四 13684285460 [email protected] 156638267 Tel: Email: QQ:

Upload: nizana

Post on 19-Jan-2016

120 views

Category:

Documents


0 download

DESCRIPTION

5.4 利用 tcp 实现文件传输. 信息工程系 向模军. Tel: Email: QQ:. 13684285460 [email protected] 156638267. 1 任务引入. 在基于 UDP 的通讯模式中,通讯双方有时需要可靠的通讯(例如:文件传输)。由于 UDP 协议不保证通讯可靠性,因此在要求保障通讯可靠性的应用中,采用 TCP 协议。 TCP 协议的通讯模式是客户 / 服务方式。服务端打开一个 TCP 端口监听连接,客户端与服务端建立 TCP 连接,并在连接期间传输文件名称及文件内容信息。. 2 任务讨论. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 5.4  利用 tcp 实现文件传输

四川机电职业技术学院http://www.scemi.com

5.4 利用 tcp 实现文件传输

信息工程系 向模军[email protected]

Tel:Email: QQ:

Page 2: 5.4  利用 tcp 实现文件传输

2/16

四川机电职业技术学院http://www.scemi.com

5.4 利用 tcp实现文件传输

1 任务引入

在基于 UDP 的通讯模式中,通讯双方有时需要可靠的通讯(例如:文件传输)。由于 UDP 协议不保证通讯可靠性,因此在要求保障通讯可靠性的应用中,采用 TCP 协议。 TCP 协议的通讯模式是客户 / 服务方式。服务端打开一个 TCP端口监听连接,客户端与服务端建立 TCP 连接,并在连接期间传输文件名称及文件内容信息。

Page 3: 5.4  利用 tcp 实现文件传输

3/16

四川机电职业技术学院http://www.scemi.com

5.4 利用 tcp实现文件传输

2 任务讨论

定义客户端和服务端在传输文件时的“通讯协议”,使得服务端获知通讯流中哪一些是文件信息,哪一些是文件内容。

Page 4: 5.4  利用 tcp 实现文件传输

4/16

四川机电职业技术学院http://www.scemi.com

5.4 利用 tcp实现文件传输

3 I/O 流概述

大部分程序都需要输入 / 输出处理,比如从键盘读取数据、向屏幕中输出数据、从文件中读或者向文件中写数据、在一个网络连接上进行读写操作等。在 Java 中,把这些不同类型的输入、输出源抽象为流( Stream ),而其中输入或输出的数据则称为数据流( Data Stream ),用统一的接口来表示,从而使程序设计简单明了。

Page 5: 5.4  利用 tcp 实现文件传输

5/16

四川机电职业技术学院http://www.scemi.com

5.4 利用 tcp实现文件传输

3 字节流

字节流基本类Java 中每一种字节流的基本功能依赖于基本类 InputStream

和 OutputStream ,它们是抽象类,不能直接使用。

属于 InputStream 类的方法有:read() :从流中读入数据skip() :跳过流中若干字节数available() :返回流中可用字节数mark() :在流中标记一个位置reset() :返回标记过的位置markSupport() :是否支持标记和复位操作close() :关闭流

属于 OutputStream 类的方法有:write(int b) :将一个整数输出到流中(只输出低位字节,为抽象方法)write(byte b[]) :将字节数组中的数据输出到流中write(byte b[], int off, int len) :将数组b 中从 off 指定的位置开始,长度为len 的数据输出到流中flush() :刷空输出流,并将缓冲区中的数据强制送出close() :关闭流

Page 6: 5.4  利用 tcp 实现文件传输

6/16

四川机电职业技术学院http://www.scemi.com

5.4 利用 tcp实现文件传输

3 字节流文件流在 I/O 处理中,最常见的就是对文件的操作。 java.io 包中所提供的文件操作类包括:

File 、 FileDescriptor 描述本地文件系统中的文件或目录FilenameFilter :接口,主要用于实现文件名查找模式的匹配。RandomAccessFile :提供对本地文件系统中文件的随机访问支持。FileInputStream 、 FileOutputStream 用于读写本地文件系统中的文件

FileInputStream 类用来打开一个输入文件,若要打开的文件不存在,则会产生例外 FileNotFoundException ,这是一个非运行时例外,必须捕获或声明抛弃;

FileOutputStream 类用来打开一个输出文件,若要打开的文件不存在,则会创建一个新的文件,否则原文件的内容会被新写入的内容所覆盖。

在进行文件的读 / 写操作时,会产生非运行时例外 IOException ,必须捕获或声明抛弃(其它的输入 / 输出流处理时也同样需要进行输入 / 输出例外处理)。

Page 7: 5.4  利用 tcp 实现文件传输

7/16

四川机电职业技术学院http://www.scemi.com

5.4 利用 tcp实现文件传输

3 字节流

过滤流java.io 中提供类 FilterInputStream 和 FilterOutputStream 分别对其他输入 / 输出流进行特殊处理,它们在读 / 写数据的同时可以对数据进行特殊处理。另外还提供了同步机制,使得某一时刻只有一个线程可以访问一个输入 / 输出流。

Page 8: 5.4  利用 tcp 实现文件传输

8/16

四川机电职业技术学院http://www.scemi.com

5.4 利用 tcp实现文件传输

3 字节流

缓冲流类 BufferedInputStream 和 BufferedOutputStream 实现了带缓冲的过滤流,它提供了缓冲机制,把任意的 I/O 流“捆绑”到缓冲流上,可以提高该 I/O 流的读取效率。

Page 9: 5.4  利用 tcp 实现文件传输

9/16

四川机电职业技术学院http://www.scemi.com

5.4 利用 tcp实现文件传输

3 字节流

数据流接口 DataInput 和 DataOutput ,设计了一种较为高级的数据输入输出方

式:除了可处理字节和字节数组外,还可以处理 int 、 float 、 boolean 等基本数据类型,这些数据在文件中的表示方式和它们在内存中的一样,无须转换,如 read(), readInt(), readByte() … ; write(), writeChar(), writeBoolean()… 。此外,还可以用 readLine() 方法读取一行信息。

数据流类 DataInputStream 和 DataOutputStream 的处理对象除了是字节或字节数组外,还可以实现对文件的不同数据类型的读写,分别实现了DataInput 和 DataOutput 接口。在提供了字节流的读写手段的同时,以统一的通用的形式向输入流中写入 boolean , int , long , double 等基本数据类型,并可以在次把基本数据类型的值读取回来。提供了字符串读写的手段。

Page 10: 5.4  利用 tcp 实现文件传输

10/16

四川机电职业技术学院http://www.scemi.com

5.4 利用 tcp实现文件传输

3 字符流

同类 InputStream 和 OutputStream 一样, Reader 和 Writer 也是抽象类,只提供了一系列用于字符流处理的接口。它们的方法与类 InputStream 和 OutputStream 类似,只不过其中的参数换成字符或字符数组。

基类: Reader 主要方法void close()void mark(int readAheadLimit)boolean markSupported() :int read() int read(char[] cbuf) int read(char[] cbuf, int off, int

len) boolean ready() void reset() long skip(long n)

基类 : Writer 主要方法void close() void flush() void write(char[] cbuf) void write(char[] cbuf, int off, int

len) void write(int c) void write(String str) void write(String str, int off, int

len)

Page 11: 5.4  利用 tcp 实现文件传输

11/16

四川机电职业技术学院http://www.scemi.com

5.4 利用 tcp实现文件传输

3 文件操作 / 随机访问文件

文件操作主要涉及的类包括:File :以文件路径名的形式代表一个文件FileDescriptor :代表一个打开文件的文件描述FileFilter & FilenameFilter :用于列出满足条件的文件FileInputStream & FileReader :顺序读文件FileOutputStream & FileWriter :顺序写文件RandomAccessFile :提供对文件的随机访问支持。

Page 12: 5.4  利用 tcp 实现文件传输

12/16

四川机电职业技术学院http://www.scemi.com

5.4 利用 tcp实现文件传输

4 任务实施

在 JBuilder 中新建项目。在项目中建立以下 2 个包 ( 服务器端,客户端 ) 。

服务器端:1. “ 连接监听” tcpServer 类 ( 线程 ) ,在指定地址、端口监听客户端

的连接请求,并创建 Socket套接口,创建、启动 tcpreceive 线程 。 2. “ 文件接收服务 ” tcpreceive 类 ( 线程 ) ,利用 Socket套接口,负责接收文件,完成客户、服务端之间的文件传输,在传输文件前,与客户端协商获取文件名称,文件长度信息,最后传输文件内容。

3. “ 服务端主程序” mainThread 类,负责启动和停止 tcpServer 线程。

客户端:1. “ 客户端文件传输 ” tcpfiletransmit 类 ( 线程 ) ,负责创建到指定

地址、端口的 Socket ,并通过 Socket发送指定的文件 。2. “ 客户端主控程序” mainThread 类,启动 tcpfiletransmit 线程 。

Page 13: 5.4  利用 tcp 实现文件传输

13/16

四川机电职业技术学院http://www.scemi.com

5.4 利用 tcp实现文件传输

5 任务点评

客户端在正式发送文件前,应向服务端正确发送文件名称,文件长度信息,否则服务端无法正确接收文件。

客户端通过缓冲区在读文件的同时,发送缓存区数据,反复直到文件结尾。

服务端通过缓冲区在接收数据的同时,将缓冲区数据写入到文件中,直到接收到指定长度的信息。

Page 14: 5.4  利用 tcp 实现文件传输

14/16

四川机电职业技术学院http://www.scemi.com

5.4 利用 tcp实现文件传输

6 试一试 练一练

改写项目,利用两个 Socket ,一个用于交换文件信息和控制传输,另一个用于传输文件内容。

Page 15: 5.4  利用 tcp 实现文件传输

15/16

四川机电职业技术学院http://www.scemi.com

5.4 利用 tcp实现文件传输

7 课外拓展

分析 FTP工作原理。

Page 16: 5.4  利用 tcp 实现文件传输

四川机电职业技术学院http://www.scemi.com