/* 上传案例的客户端. 步骤: 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(); } } }