/*
上传案例的客户端.
步骤:
1. 创建一个字节输入流FileInputStream,用来读取自己电脑上的文件。
2. 创建客户端Socket,并指定要连接的服务器和端口号。
3. 调用Socket的getOutputStream,用来向服务器写数据。
4. 一边读一边写,每从本地读取一个字节数组,就将读取到的内容写到服务器。
5. 调用Socket的getInputStream,获取一个输入流,用来读取服务器发送过来的数据。
6. 调用read方法,读取数据。
*/
public class Demo01UploadClient {
public static void main(String[] args) throws IOException {
// 创建一个字节输入流FileInputStream,用来读取自己电脑上的文件。
FileInputStream fis = new FileInputStream("E:\\mm.jpg");
// 创建客户端Socket,并指定要连接的服务器和端口号。
Socket socket = new Socket("127.0.0.1", 9900);
//调用Socket的getOutputStream,用来向服务器写数据。
OutputStream out = socket.getOutputStream();
byte[] bArr = new byte[1024];
int len;
while ((len = fis.read(bArr)) != -1) {
out.write(bArr, 0, len);
}
//如果循环结束,就意味着不再向服务器写数据, 就告诉服务器,我以后不会再写了。
socket.shutdownOutput();
fis.close();
//5. 调用Socket的getInputStream,获取一个输入流,用来读取服务器发送过来的数据
InputStream in = socket.getInputStream();
len = in.read(bArr);
System.out.println(new String(bArr, 0, len));
//释放资源
socket.close();
}
}
/* 上传案例的服务器端
步骤:
1. 创建ServerSocket服务器对象
2. 调用accept方法,监听并获取客户端的Socket。
3. 调用Socket对象的getInputStream得到输入流,用来读取客户端发来的数据。
4. 创建FileOutputStream用来向自己电脑(服务器端)写数据
5. 开始读写,一次读写一个字节数组,每读取一个字节数组,就把读取到的字节数组写到本地。
6. 调用Socket对象的getOutputStream得到输出流,用来向客户度写数据。
7. 调用输出流的write方法,向客户端发送。 (上传成功)
8. 释放资源
*/
public class Demo02UploadServer {
public static void main(String[] args) throws IOException {
// 1. 创建ServerSocket服务器对象
ServerSocket serverSocket = new ServerSocket(9900);
while(true){
// 2. 调用accept方法,监听并获取客户端的Socket。
Socket socket = serverSocket.accept();
// 3. 调用Socket对象的getInputStream得到输入流,用来读取客户端发来的数据。
InputStream in = socket.getInputStream();
// 4. 创建FileOutputStream用来向自己电脑(服务器端)写数据
FileOutputStream fos = new FileOutputStream("F:\\"+ UUID.randomUUID().toString()+".jpg");
//5. 开始读写,一次读写一个字节数组,每读取一个字节数组,就把读取到的字节数组写到本地。
// FileOutputStream fos = new FileOutputStream("d:\\server\\" + UUID.randomUUID().toString() + ".jpg");
byte[] bArr = new byte[1024];
int len;
while ((len = in.read(bArr)) != -1) {
fos.write(bArr, 0, len);
}
fos.close();
//6. 调用Socket对象的getOutputStream得到输出流,用来向客户度写数据
OutputStream out = socket.getOutputStream();
out.write("上传成功".getBytes());
//释放资源
socket.close();
}
}
}