- Java网络编程上传文件到服务器 第二弹优化
- 上一弹 Java网络将文件上传服务器案例
- 前言
- 优化内容
- 代码
- 总结
1.前言:
上次案例展示了将文件通过Java的网络字节流与本地字节流从客户端上传到服务器。
上次博客地址:java小程序-网络文件上传案例
2.优化内容:
本次优化增加了服务器端的两个功能
- 文件持续上传
- 开启多线程,优化多客户端上传
1.文件持续上传:
通过 while(true) 来实现服务器一直监听客户端来上传文件
2.开启多线程
将服务器的网络数据接收与本地写入(文件上传)的功能开启多线程来实现优化多个客户端同时上传文件的优化
3.代码:
客户端:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class TcpClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1",8888);
FileInputStream fis = new FileInputStream("E:\\JavaFileTest\\TCP\\Client\\1.jpg");
OutputStream os = socket.getOutputStream();
int len = 0;
byte[] bytes = new byte[1024];
while ((len = fis.read(bytes)) != -1) {
os.write(bytes,0,len);
}
socket.shutdownOutput();
InputStream is = socket.getInputStream();
while ((len = is.read(bytes)) != -1) {
System.out.println(new String(bytes,0,len));
}
fis.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务器端:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
public class TcpServer {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(8888);
while (true) {
Socket socket = server.accept();
new Thread(new Runnable() {
@Override
public void run() {
try {
InputStream is = socket.getInputStream();
File file = new File("E:\\JavaFileTest\\TCP\\Server");
String fileName = "\\" + "N46" + System.currentTimeMillis()+"&"+ new Random().nextInt(99999) +".jpg";
FileOutputStream fos = new FileOutputStream(file + fileName);
if (!file.exists()) {
file.mkdirs();
}
int len = 0;
byte[] bytes = new byte[1024];
while ((len = is.read(bytes)) != -1) {
fos.write(bytes,0,len);
}
OutputStream os = socket.getOutputStream();
os.write("收到 for Server".getBytes());
fos.close();
socket.close();
}catch (IOException e){
e.printStackTrace();
}
}
}).start();
}
// server.close();
// 由于使用 while(true) 来循环接收数据,所以就不用关闭server
} catch (IOException e) {
e.printStackTrace();
}
}
}
4.总结:
对于网络文件的上传,就进行了这两个小小的优化,如果有缘看到这个贴子并对你有小小的帮助的话,也请点个赞支持一下,蟹蟹。