/* 使用多线程完成服务器端。 */ public class Demo03UploadServerLoad { public static void main(String[] args) throws IOException { //1创建serversocker对象, ServerSocket serverSocket=new ServerSocket(9900); //调用accept,监听或获取客户端socket while(true) { Socket socket = serverSocket.accept(); //如果监听到了客户端的请求,就开启一个新的线程给这个请求执行上传任务 //创建线程任务对象 Task t=new Task(socket); Thread p=new Thread(t); p.start(); } } }
* 上传案例Lambda表达式版本 */ public class Demo04UploadServer { public static void main(String[] args) throws IOException { // method();//匿名内部类 method2();//lambada表达式 } @SuppressWarnings("all") public static void method2() throws IOException { // 创建服务器对象 ServerSocket serverSocket = new ServerSocket(9900); //创建FieloutputThream 对象,将读取到的存储到本地 FileOutputStream fos = new FileOutputStream("E:\\就业班代码\\day11\\src\\cn\\itcast\\demo02_upload\\aa.jpg"); //调用accept方法,获取客户端 socket Socket socket = serverSocket.accept(); new Thread(() -> { try { while (true) { InputStream in = socket.getInputStream(); // 每次读取一个字节数组,创建字节数组 byte bArr[] = new byte[1024]; int len; while ((len = in.read(bArr)) != -1) { //len 返回字节数组的长度,读了一个字符数组的长度,写入一个字符数组长度、 fos.write(bArr, 0, len); } //给客户端回消息 OutputStream out = socket.getOutputStream(); out.write("上传完成了".getBytes()); // 关闭流 socket.close(); fos.close(); } } catch (IOException e) { e.printStackTrace(); } }).start(); } public static void method() throws IOException { //创建服务器对象 ServerSocket serverSocket = new ServerSocket(9900); //创建FieloutputThream 对象,将读取到的存储到本地 FileOutputStream fos = new FileOutputStream("E:\\就业班代码\\day11\\src\\cn\\itcast\\demo02_upload\\aa.jpg"); //调用accept方法,获取客户端 socket Socket socket = serverSocket.accept(); //接收客户端信息 new Thread(new Runnable() { @Override public void run() { try { while (true) { InputStream in = socket.getInputStream(); // 每次读取一个字节数组,创建字节数组 byte bArr[] = new byte[1024]; int len; while ((len = in.read(bArr)) != -1) { //len 返回字节数组的长度,读了一个字符数组的长度,写入一个字符数组长度、 fos.write(bArr, 0, len); } //给客户端回消息 OutputStream out = socket.getOutputStream(); out.write("上传完成了".getBytes()); // 关闭流 socket.close(); fos.close(); } } catch (IOException e) { e.printStackTrace(); } } }).start(); } }
public class Task implements Runnable { private Socket socket; public Task() { } public Task(Socket socket) { this.socket = socket; } @Override public void run() { try { InputStream in = socket.getInputStream(); // 4. 创建FileOutputStream用来向自己电脑(服务器端)写数据 FileOutputStream fos = new FileOutputStream("F:\\wo.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()); //释放资源 fos.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }