1 / 16

5.4 利用 tcp 实现文件传输

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

nizana
Download Presentation

5.4 利用 tcp 实现文件传输

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 5.4 利用tcp实现文件传输 信息工程系 向模军 Tel:Email: QQ: 13684285460xmj.cn@163.com156638267

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

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

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

  5. 3 字节流 字节流基本类 Java中每一种字节流的基本功能依赖于基本类InputStream和OutputStream,它们是抽象类,不能直接使用。 属于OutputStream类的方法有: write(int b):将一个整数输出到流中(只输出低位字节,为抽象方法) write(byte b[]):将字节数组中的数据输出到流中 write(byte b[], int off, int len):将数组b中从off指定的位置开始,长度为len的数据输出到流中 flush():刷空输出流,并将缓冲区中的数据强制送出 close():关闭流 属于InputStream类的方法有: read():从流中读入数据 skip():跳过流中若干字节数 available():返回流中可用字节数 mark():在流中标记一个位置 reset():返回标记过的位置 markSupport():是否支持标记和复位操作 close():关闭流 5/16

  6. 3 字节流 • 文件流 • 在I/O处理中,最常见的就是对文件的操作。java.io包中所提供的文件操作类包括: • File、FileDescriptor描述本地文件系统中的文件或目录 • FilenameFilter:接口,主要用于实现文件名查找模式的匹配。 • RandomAccessFile:提供对本地文件系统中文件的随机访问支持。 • FileInputStream、FileOutputStream用于读写本地文件系统中的文件 FileInputStream类用来打开一个输入文件,若要打开的文件不存在,则会产生例外FileNotFoundException,这是一个非运行时例外,必须捕获或声明抛弃; FileOutputStream类用来打开一个输出文件,若要打开的文件不存在,则会创建一个新的文件,否则原文件的内容会被新写入的内容所覆盖。 在进行文件的读/写操作时,会产生非运行时例外IOException,必须捕获或声明抛弃(其它的输入/输出流处理时也同样需要进行输入/输出例外处理)。 6/16

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

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

  9. 3 字节流 数据流 接口DataInput和DataOutput,设计了一种较为高级的数据输入输出方式:除了可处理字节和字节数组外,还可以处理int、float、boolean等基本数据类型,这些数据在文件中的表示方式和它们在内存中的一样,无须转换,如read(), readInt(), readByte() …;write(), writeChar(), writeBoolean()…。此外,还可以用readLine()方法读取一行信息。 数据流类 DataInputStream和DataOutputStream的处理对象除了是字节或字节数组外,还可以实现对文件的不同数据类型的读写,分别实现了DataInput和DataOutput接口。在提供了字节流的读写手段的同时,以统一的通用的形式向输入流中写入boolean,int,long,double等基本数据类型,并可以在次把基本数据类型的值读取回来。提供了字符串读写的手段。 9/16

  10. 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) 10/16

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

  12. 4 任务实施 • 在JBuilder中新建项目。在项目中建立以下2个包(服务器端,客户端)。 • 服务器端: • “连接监听”tcpServer类(线程),在指定地址、端口监听客户端的连接请求,并创建Socket套接口,创建、启动tcpreceive线程 。 • “文件接收服务 ” tcpreceive类(线程),利用Socket套接口,负责接收文件,完成客户、服务端之间的文件传输,在传输文件前,与客户端协商获取文件名称,文件长度信息,最后传输文件内容。 • “服务端主程序”mainThread类,负责启动和停止tcpServer线程。 • 客户端: • “客户端文件传输 ”tcpfiletransmit类(线程),负责创建到指定地址、端口的Socket,并通过Socket发送指定的文件 。 • “客户端主控程序”mainThread类,启动tcpfiletransmit线程 。 12/16

  13. 5 任务点评 客户端在正式发送文件前,应向服务端正确发送文件名称,文件长度信息,否则服务端无法正确接收文件。 客户端通过缓冲区在读文件的同时,发送缓存区数据,反复直到文件结尾。 服务端通过缓冲区在接收数据的同时,将缓冲区数据写入到文件中,直到接收到指定长度的信息。 13/16

  14. 6 试一试 练一练 改写项目,利用两个Socket,一个用于交换文件信息和控制传输,另一个用于传输文件内容。 14/16

  15. 7 课外拓展 分析FTP工作原理。 15/16

  16. Thank You !

More Related