Android 开发手册 / 基于TCP协议的Socket通信(2)

基于TCP协议的Socket通信(2)

本节引言:

上节中我们给大家接触了Socket的一些基本概念以及使用方法,然后写了一个小猪简易聊天室的 Demo,相信大家对Socket有了初步的掌握,本节我们来学习下使用Socket来实现大文件的断点续传! 这里讲解的是别人写好的一个Socket上传大文件的例子,不要求我们自己可以写出来,需要的时候会用 就好!


1.运行效果图:

先把我们编写好的Socket服务端运行起来:

1.png

2.将一个音频文件放到SD卡根目录下:

2.png

3.运行我们的客户端:

3.gif

4.上传成功后可以看到我们的服务端的项目下生成一个file的文件夹,我们可以在这里找到上传的文件: .log那个是我们的日志文件

4.png


2.实现流程图:

6.jpg


3.代码示例:

先编写一个服务端和客户端都会用到的流解析类:

StreamTool.java

public class StreamTool {

	public static void save(File file, byte[] data) throws Exception {
		FileOutputStream outStream = new FileOutputStream(file);
		outStream.write(data);
		outStream.close();
	}

	public static String readLine(PushbackInputStream in) throws IOException {
		char buf[] = new char[128];
		int room = buf.length;
		int offset = 0;
		int c;
		loop:       while (true) {
			switch (c = in.read()) {
				case -1:
				case '\n':
					break loop;
				case '\r':
					int c2 = in.read();
					if ((c2 != '\n') && (c2 != -1)) in.unread(c2);
					break loop;
				default:
					if (--room < 0) {
						char[] lineBuffer = buf;
						buf = new char[offset + 128];
						room = buf.length - offset - 1;
						System.arraycopy(lineBuffer, 0, buf, 0, offset);

					}
					buf[offset++] = (char) c;
					break;
			}
		}
		if ((c == -1) && (offset == 0)) return null;
		return String.copyValueOf(buf, 0, offset);
	}

	/**
	 * 读取流
	 * @param inStream
	 * @return 字节数组
	 * @throws Exception
	 */
	public static byte[]