一、技术点:IO流、套接字
二、代码案例
1、客户端
package com.mollen.download;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
/**
* @ClassName: Client
* @Auther: Mollen
* @CreateTime: 2018-09-11 11:29:47
* @Description:
* 文件下载客户端
*/
public class Client {
public static void main(String[] args) throws IOException {
//1.创建socket对象
Socket client = new Socket("127.0.0.1",6666);
//2.获取读入流
InputStream is = client.getInputStream();
//3.创建写出流
FileOutputStream fos = new FileOutputStream("E:\\download\\" + System.currentTimeMillis() + ".avi");
//4.读入流数据,写出到客户端磁盘
int len =0;
byte[] bytes = new byte[10240];
while((len=is.read(bytes))!=-1){
fos.write(bytes,0,len);
}
//发送回执信息
client.getOutputStream().write("文件下载完成!".getBytes());
//释放资源
is.close();
fos.close();
client.close();
}
}
2、服务端
package com.mollen.download;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @ClassName: Server
* @Auther: Mollen
* @CreateTime: 2018-09-11 11:29:39
* @Description:
*/
public class Server {
public static void main(String[] args)throws IOException{
//1.创建serversocket
ServerSocket server = new ServerSocket(6666);
while(true) {
//2.创建读取流对象
FileInputStream fis = new FileInputStream("H:\\1002.avi");
//3.监听客户端
Socket client = server.accept();
//4.获取写出流
OutputStream os = client.getOutputStream();
//5.读入服务端文件,写入到数据流
int len = 0;
byte[] bytes = new byte[10240];
while ((len = fis.read(bytes)) != -1) {
os.write(bytes, 0, len);
}
//写出结束标志
client.shutdownOutput();
//读取回执信息
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
System.out.println(br.readLine());
//释放资源
fis.close();
os.close();
client.close();
}
}
}
三、注意事项
1、数据运输路径:
服务端磁盘
–>(读入)
–>(写出)
–>数据流
–>(读入)
–>(写出)
–>客户端磁盘
。
2、案例不考虑多线程、缓存、解析等技术的应用。
3、写出完毕必须有结束标志
。
4、测试先启动服务端再启动客户端。