JAVA-IO多线程图片上传
来源:互联网 发布:淘宝网女士羊毛衣 编辑:程序博客网 时间:2024/05/23 01:20
关键在于需要熟悉各种流的操作,上传文本或者图片或者视频的区别都在于输入输出流的不同,这是IO部分的内容。
自身在IO部分基础不是特别牢靠,还需要深入了解。
服务端
import java.io.*;import java.net.ServerSocket;import java.net.Socket;public class PicUploadServer { public static void main(String[] args) { try { ServerSocket ss = new ServerSocket(23333); while (true) { Socket s = ss.accept(); //每当有客户端上传图片,开启一个线程处理 new Thread(new PicDealThread(s)).start(); } } catch (IOException e) { e.printStackTrace(); } }}class PicDealThread implements Runnable { private Socket s; PicDealThread(Socket s) { this.s = s; } @Override public void run() { try { //利用ip地址作为图片文件名 int index = 1; String ip = s.getInetAddress().getHostAddress(); File file = new File(ip + ".jpg"); //如果存在同名图片,使用数字后缀,直到不重名 while (file.exists()) { file = new File(ip + "(" + (index++) + ")" + ".jpg"); } //输出流,用于存储图片 BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream(file)); byte[] buf = new byte[1024]; int len; InputStream in = s.getInputStream(); while ((len = in.read(buf)) != -1) { bufos.write(buf, 0, len); } PrintWriter pw = new PrintWriter(s.getOutputStream(), true); pw.println("上传图片成功!"); bufos.close(); in.close(); s.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
客户端
import java.io.*;import java.net.Socket;public class PicUploadClient { public static void main(String[] args) { try { //通过输入路径选择图片 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); String fileName = bufr.readLine(); File file = new File(fileName); //必要的检测 if (!(file.exists() && file.isFile())) { System.err.println("并不是一个文件!"); return; } if (!file.getName().endsWith("jpg")) { System.err.println("图片格式错误,请重新选择!"); return; } if (file.length() > 1024 * 1024 * 5) { System.err.println("图片大小不得超过5M!"); return; } //连接服务器 Socket s = new Socket("192.168.149.1", 23333); //读取文件 BufferedInputStream bufIn = new BufferedInputStream(new FileInputStream(fileName)); //用于向服务器写入字节的输出流 OutputStream out = s.getOutputStream(); byte[] buf = new byte[1024]; int len; while ((len = bufIn.read(buf)) != -1) { out.write(buf, 0, len); } //关闭输出流,即上传完毕 s.shutdownOutput(); //获取服务器反馈信息 String info; BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream())); info = in.readLine(); System.out.println(info); buf.clone(); bufIn.close(); s.close(); } catch (IOException e) { e.printStackTrace(); } }}
END
0 0
- JAVA-IO多线程图片上传
- JSP 上传图片产生 java.io.IOException: Stream closed
- JavaSE练习-多线程、Socket(TCP协议)、IO流模拟实现服务端多线程接收客户端上传图片
- TCP-多线程并发上传图片
- Java IO图片总结
- java网络编程和io,多线程结合完成文件上传和下载案例
- Server (IO) Error 图片上传失败
- Java 上传图片和批量上传图片
- java 上传图片图片变红
- java socket多线程阻塞IO
- java 上传图片
- java中上传图片
- java上传图片代码
- java web上传图片
- java上传图片文件
- java上传图片
- java实现图片上传
- java图片上传
- AbsListView添加headerView跟footerView的问题
- Java IO : outputStream 、Writer
- NSTimer 怎么暂停继续
- info.plist文件常用属性含义
- 26个Jquery使用小技巧
- JAVA-IO多线程图片上传
- 获取最顶部的VC
- Android之Launcher分析和修改1——Launcher默认界面配置(default_workspace)
- 使用EmBitz开发STM32项目开发环境配置
- javascript 异常处理(try…catch…finally window.onerror)
- OSGI web 开发
- Android APK反编译就这么简单 详解(附图)
- Java EE 安装mysql连接以及相关配置
- java:File.deleteOnExit()实现分析塈用于多级目录时的讲究