客户端需求:把一个图片文件发送到服务端并读取回馈信息。要求判断文件是否存在及格式是否为jpg并要求文件小于2M。
代码:
public class ClientTest { @Test public void test01() { File file = new File("D:\\img\\mn4.jpg"); //进行文件的判断 if (file.exists() && file.toString().endsWith("jpg") && (file.length() < 1024 * 1024 * 2)) { try { //创建文件输入流,从文件中读取一个图片 InputStream in = new FileInputStream(file); //创建socket对象和服务器端连接 Socket socket = new Socket("127.0.0.1", 28888); //创建网络输出流 OutputStream netout = socket.getOutputStream(); //将文件传给服务器端,上传完毕关闭输出流 byte[] bytes = new byte[1024 * 9]; int len =0; while ((len = in.read(bytes)) != -1) { netout.write(bytes,0,len); } socket.shutdownOutput();//关闭输出流 //创建输入流接收服务器端发来的反馈 InputStream netIn = socket.getInputStream(); len = netIn.read(bytes); String str = new String(bytes, 0, len); System.out.println("反馈信息: "+str); netIn.close(); netout.close(); in.close(); } catch (IOException e) { e.printStackTrace(); } }else { System.out.println("文件不合法!!!"); } } }
服务端需求:接收客户端发送过来的图片数据。进行存储后,回馈一个“上传成功”字样。支持多用户的并发访问。
代码:
public class ServerTest { @Test public void test01(){ try (ServerSocket server = new ServerSocket(28888)) {//创建服务端的套接字对象 Socket socket = server.accept(); InputStream netIn = socket.getInputStream();//获取网络输入流 byte[] bytes = new byte[1024 * 34]; int len =0; //创建文件输出流,将客户端传过来的文件保存 OutputStream out = new FileOutputStream("mn.jpg"); while ((len = netIn.read(bytes)) != -1) { out.write(bytes,0,len); } //给客户端发送反馈 OutputStream netOut = socket.getOutputStream(); netOut.write("文件收到".getBytes()); netOut.close(); netIn.close(); out.close(); socket.close(); server.close(); } catch (IOException e) { e.printStackTrace(); } } }