要求:
客户端:将本地文件上传到服务器。接收服务器的反馈。 服务器:接收客户端上传的文件,上传完毕之后给出反馈。
代码如下:
客户端:
import java.io.*;
import java.net.Socket;
public class client3 {
public static void main(String[] args) throws IOException {
//客户端:将本地文件上传到服务器。接收服务器的反馈。
// 服务器:接收客户端上传的文件,上传完毕之后给出反馈。
Socket socket=new Socket("127.0.0.1",10000);
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D:\\Java file\\black hourse\\Day-code\\day01\\image\\background.png"));
BufferedOutputStream bos=new BufferedOutputStream(socket.getOutputStream());
byte[] buf=new byte[1024];
int len;
while((len=bis.read(buf))!=-1){
bos.write(buf,0,len);
}
//往服务器写结束标志
socket.shutdownOutput();
//接受服务器的回写反馈
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = br.readLine();
System.out.println(line);
socket.close();
}
}
服务器端:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.UUID;
import java.util.concurrent.*;
public class server3 {
public static void main(String[] args) throws IOException {
ThreadPoolExecutor pool=new ThreadPoolExecutor(
3,//核心线程数量
16,//线程池总大小
60,//空闲时间
TimeUnit.SECONDS,//空闲时间(单位)
new ArrayBlockingQueue<>(2),//队列
Executors.defaultThreadFactory(),//线程工厂,让线程池如何创建线程对象
new ThreadPoolExecutor.AbortPolicy()//阻塞队列
);
//1.创建服务端口
ServerSocket ss = new ServerSocket(10000);
//2.等待客户端来连接
while(true) {
//开启一个线程,一个用户对应一个服务端的一个线程
Socket s = ss.accept();
// new Thread(new MyRunnable(s)).start();
pool.submit(new MyRunnable(s));
}
}
}
线程类:
import java.io.*;
import java.net.Socket;
import java.util.UUID;
public class MyRunnable implements Runnable {
Socket s;
public MyRunnable(Socket s) {
this.s = s;
}
public void run() {
try{
BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
String name= UUID.randomUUID().toString().replace("-","");
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\Java file\\black hourse\\Day-code\\day01\\image\\animal"+name+".jpg"));
int len;
byte[] buffer = new byte[1024];
while ((len = bis.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
//4.回写数据
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bw.write("文件上传成功");
bw.newLine();
bw.flush();
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}finally {
if(s!=null) {
try {
s.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
}