Java基础24天--02--网络编程(TCP--客户端并发上传图片)
2011-09-30 21:35
846 查看
服务端
单线程的服务端有个局限性。当A客户端连接上以后。被服务端获取到。服务端执行具体流程。
这时B客户端连接,只有等待。
因为服务端还没有处理完A客户端的请求,不能循环回来执行下次accept方法。所以暂时获取不到B客户端对象。
为了可以让多个客户端同时并发访问服务端。
服务端最好就是将每个客户端封装到一个单独的线程中,这样就可以同时处理多个客户端请求。
如何定义线程呢?
只要明确了每一个客户端要在服务端执行的代码即可,将该代码封装在run方法中。
代码如下:
单线程的服务端有个局限性。当A客户端连接上以后。被服务端获取到。服务端执行具体流程。
这时B客户端连接,只有等待。
因为服务端还没有处理完A客户端的请求,不能循环回来执行下次accept方法。所以暂时获取不到B客户端对象。
为了可以让多个客户端同时并发访问服务端。
服务端最好就是将每个客户端封装到一个单独的线程中,这样就可以同时处理多个客户端请求。
如何定义线程呢?
只要明确了每一个客户端要在服务端执行的代码即可,将该代码封装在run方法中。
代码如下:
package day24; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; public class PicClient { public static void main(String[] args) throws UnknownHostException, IOException { Socket s = new Socket("127.0.0.1", 4000); FileInputStream fis = new FileInputStream("d:\\1.bmp"); OutputStream out = s.getOutputStream(); byte[] buf = new byte[1024]; int len = 0; while ((len = fis.read(buf)) != -1) { out.write(buf); out.flush(); } // 告诉服务端数据已写完。 s.shutdownOutput(); fis.close(); out.close(); s.close(); } } class PicServer { public static void main(String[] args) throws IOException { ServerSocket ss = new ServerSocket(4000); Socket s = null; while (true){ s = ss.accept(); new Thread(new PicThread(s)).start(); } } } class PicThread implements Runnable { Socket s = null; PicThread(Socket s) { this.s = s; } public void run() { try { InputStream in = s.getInputStream(); FileOutputStream fos; fos = new FileOutputStream("d:\\b"+Thread.currentThread().getName()+".bmp"); byte[] buf = new byte[1024]; int len = 0; while ((len = in.read(buf)) != -1) { fos.write(buf, 0, len); fos.flush(); } fos.close(); s.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
相关文章推荐
- Java基础24天--03--网络编程(TCP--客户端并发登陆)
- Java基础24天--01--网络编程(TCP--上传图片)
- java基础知识10(TCP:客户端并发上传图片)
- Java基础知识强化之网络编程笔记14:TCP之多个客户端上传到一个服务器的思考(多线程改进)
- 黑马程序员-----网络编程中Tcp客户端并发上传图片
- Java基础知识强化之网络编程笔记13:TCP之TCP协议上传图片并给出反馈
- Java基础-网络编程(TCP-上传图片)
- 网络编程二:TCP传输、TCP双向传输、文本转换、并发上传图片、客户端并发登录
- Java基础-网络编程(TCP-客户端并发登录)
- JAVA基础 day25 网络编程 IP类 UDP,TCP传输学习 简易聊天工具 TCP并发学习
- Java基础24天--04--网络编程(浏览器客户端--自定义服务端)
- 黑马程序员——Java基础——网络编程(客户端并发上传图片)
- Java基础24天--05--网络编程(浏览器客户端--Tomcat服务器)
- [javaSE] 网络编程(TCP-并发上传图片)
- Java基础知识强化之网络编程笔记12:TCP之TCP协议上传文本文件并给出反馈
- Java基础---Java---网络编程---TCP的传输、客户端和服务端的互访、建立一个文本转换器、编写一个聊天程序
- Java基础知识强化之网络编程笔记10:TCP之客户端读取文本文件服务器控制台输出
- Java基础知识强化之网络编程笔记07:TCP之服务器给客户端一个反馈案例
- JAVA基础再回首(二十九)——TCP传输、上传文件、上传图片、多并发上传
- Java基础---Java---网络编程---TCP的传输、客户端和服务端的互访、建立一个文本转换器、编写一个聊天程序