黑马程序员--基础加强--第四篇--TCP多线程实现图片上传
2014-01-15 21:54
489 查看
ASP.Net+Android+IOS开发.Net培训期待与您交流!
多个客户端可以并发的上传图片到服务器中
运行结果为
ASP.Net+Android+IOS开发.Net培训期待与您交流!
多个客户端可以并发的上传图片到服务器中
import java.io.*; import java.net.*; class PicClient2{ public static void main(String[] args){ try{ //获取客户端Socket,并绑定服务器主机和端口。 Socket s = new Socket(InetAddress.getLocalHost(),10003); FileInputStream fs = new FileInputStream("d:/tempFile/QQ.png"); OutputStream osOut = s.getOutputStream(); byte[] buf = new byte[1024]; int a = -1; //将图片读入流中,并写道Socket的OutputStream()流中 while((a=fs.read(buf))!= -1){ osOut.write(buf,0,a); } //给网络流加结束标记 s.shutdownOutput(); //读取服务器返回的数据信息 InputStream osIn = s.getInputStream(); byte[] arr = new byte[1024]; int b = osIn.read(buf); System.out.println(new String(arr,0,b)); osIn.close(); osOut.close(); fs.close(); s.close(); }catch(UnknownHostException e){ throw new RuntimeException("找不到服务器主机"); }catch(IOException e){ throw new RuntimeException("读写文件错误"); } } } //如何实现多线程技术呢?只需将每个客户端的代码存入run方法中即可! class SockThread implements Runnable{ private Socket s; String ip; SockThread(Socket s ){ this.s = s; } public void run(){ try{ //获取客户端ip地址 ip = s.getLocalAddress().getHostAddress(); System.out.println(ip+"connect"); InputStream isIn = s.getInputStream(); int count = 1; File f = new File("d:/tempFile/"+ip+"("+count+")"+".png"); while(f.exists()){ f = new File("d:/tempFile/"+ip+"("+(count++)+")"+".png"); } //将客户端传过来的图片保存到一个文件夹中 FileOutputStream fos = new FileOutputStream(f); byte[] buf = new byte[1024]; int a = -1; while((a = isIn.read(buf))!=-1){ fos.write(buf,0,a); } //往客户端写返回信息 OutputStream osOut = s.getOutputStream(); osOut.write("上传成功".getBytes()); fos.close(); isIn.close(); osOut.close(); s.close(); }catch(IOException e){ throw new RuntimeException(ip+"上传失败"); } } } class PicServer2{ public static void main(String[] args){ try{ ServerSocket ss = new ServerSocket(10003); while(true){ //阻塞式等待客户端发来的请求 Socket s = ss.accept(); //启动线程并把客户端的Socket对象传入处理程序中 new Thread(new SockThread(s)).start(); } }catch(IOException e){ throw new RuntimeException("服务器端接收失败"); } } }
运行结果为
ASP.Net+Android+IOS开发.Net培训期待与您交流!
相关文章推荐
- 黑马程序员--基础加强--第四篇--继承Thread类和实现Runnable接口有什么区别?
- 【java基础:net】基于多线程的TCP图片上传客户端与服务端Demonstration
- TCP--通过多线程实现客户端并发上传图片
- 黑马程序员-TCP上传图片-多线程并发上传图片-客户端并发登陆-自定义服务器
- 黑马程序员_java基础加强6_多线程加强
- 黑马程序员_Java基础:实现多线程对共有数据的同步操作
- 黑马程序员_ckeditor+ckfinder实现本地图片上传
- 黑马程序员_java基础加强7_多线程加强
- JAVA基础再回首(二十九)——TCP传输、上传文件、上传图片、多并发上传
- 多线程实现文件(图片)从客户端并行上传到服务器端--多客户端实现文件上传到服务器
- 黑马程序员_java基础加强8_多线程加强
- Java基础知识强化之网络编程笔记14:TCP之多个客户端上传到一个服务器的思考(多线程改进)
- 黑马程序员_TCP-客户端并发上传图片
- 黑马程序员--基础加强--第九篇--实现类似spring的可配置的AOP框架
- 黑马程序员 Java练习-模拟TCP客户端并发上传图片
- Java基础24天--02--网络编程(TCP--客户端并发上传图片)
- Tcp实现上传文件和图片
- Java基础-网络编程(TCP-上传图片)
- 黑马程序员_学习日记36_531基础加强(抽象类、接口实现多态)
- 黑马程序员——java基础拾遗之多线程(一) 多线程的两种实现