问题阻塞
优化:
◆ 文件名不重复,防止被覆盖
- 命名规则:域名+毫秒值+随机数+后缀
String fileName ="copy"+System.currentTimeMillis()+new Random().nextInt(999999)+".jpg";
◆ 服务器一直处于监听状态(死循环)
- 加上死循环,去掉
close()
◆ 使用多线程,提高服务端效率,可以接受多个客户同时上传
客户端:
package File_Upload;
import java.io.*;
import java.net.Socket;
public class Client01 {
public static void main(String[] args) throws IOException {
Socket client01 = new Socket("127.0.0.1",6666);
FileInputStream file = new FileInputStream("G:\\Java\\测试文件夹\\copy.jpg");
InputStream fileIn = client01.getInputStream();
OutputStream fileOut = client01.getOutputStream();
int fileLen=0;
byte[] fileBytes = new byte[1024];
while ((fileLen=file.read(fileBytes))!=-1){
fileOut.write(fileBytes);
}
client01.shutdownOutput();
int severLen =0;
byte[] severBytes = new byte[1024];
while ((severLen=fileIn.read(severBytes))!=-1){
System.out.println(new String(severBytes,0,severLen));
}
file.close();
client01.close();
}
}
服务器
package File_Upload;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
public class Sever {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(6666);
while (true) { //让服务器一直处于监听状态
Socket client = server.accept();
new Thread(){ //使用多线程,让多个客户端可以同时上传
@Override
public void run() {//使用多线程,让多个客户端可以同时上传
try {
InputStream In = client.getInputStream();
OutputStream Out = client.getOutputStream();
String fileName = "copy" + System.currentTimeMillis() + new Random().nextInt(999999) + ".jpg";
FileOutputStream fileOut = new FileOutputStream("G:\\Java\\测试文件夹\\新建文件夹\\" + fileName);
int Len = 0;
byte[] bytes = new byte[1024];
while ((Len = In.read(bytes)) != -1) {
fileOut.write(bytes);
fileOut.flush();
}
Out.write("文件已经收到".getBytes());
fileOut.close();
client.close();
// server.close(); 让服务器一直处于监听状态
}catch (IOException e){
e.toString();
}
}
}.start();
}
}
}