一、技术点:IO流、套接字
二、案例代码
1、客户端
package com.mollen.upload;
import java.io.*;
import java.net.Socket;
/**
* @ClassName: com.mollen.upload.Client
* @Auther: Mollen
* @CreateTime: 2018-09-11 08:36:31
* @Description:
* 文件上传客户端
*/
public class Client {
public static void main(String[] args) throws IOException {
//1.创建socke对象
Socket client = new Socket("127.0.0.1",6666);
//2.创建读入数据流对象
FileInputStream fis = new FileInputStream("H:\\1001.avi");
//3.获取写出数据流
OutputStream os = client.getOutputStream();
//4.读入客户端本地文件,写出到数据流
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();
}
}
2、服务端
package com.mollen.upload;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @ClassName: com.mollen.upload.Server
* @Auther: Mollen
* @CreateTime: 2018-09-11 08:36:53
* @Description:
* 文件上传服务端
*/
public class Server {
public static void main(String[] args) throws IOException {
//1.创建serversocket对象
ServerSocket server = new ServerSocket(6666);
while(true) {
//2.监听客户端
Socket client = server.accept();
//3.数据源
InputStream is = client.getInputStream();
//4.创建数据写出流对象
FileOutputStream fos = new FileOutputStream("E:\\upload\\" + System.currentTimeMillis() + ".avi");
//5.读入数据流,写出到服务器本地磁盘
int len = 0;
byte[] bytes = new byte[10240];
while ((len = is.read(bytes)) != -1) {
fos.write(bytes, 0, len);
}
//提示信息
System.out.println("接受完成!");
//回执信息
client.getOutputStream().write("上传成功!".getBytes());
//释放资源
is.close();
fos.close();
client.close();
}
}
}
三、注意事项
1、数据运输路径:
客服端磁盘
–>(读入)
–>(写出)
–>数据流
–>(读入)
–>(写出)
–>客户端磁盘
。
2、客户端创建Socket
,服务端创建ServerSocket
。
3、数据写出完毕必须有结束标志
。
4、测试先启动服务端再启动客户端。