从http://www.blogjava.net/sterning/archive/2007/10/15/152940.html摘了篇java socket thread 的文章:
服务端:
package com.lyq.socket.server; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.*; import java.util.concurrent.*; //服务端 public class SocketServer { private int port = 8821; private ServerSocket serverSocket; private ExecutorService executorService;// 线程池 private final int POOL_SIZE = 10;// 单个CPU 线程池大小 public SocketServer() throws IOException { serverSocket = new ServerSocket(port); // Runtime 的availableProcessor()方法返 回当前系统的CPU数目. executorService = Executors.newFixedThreadPool(Runtime.getRuntime() .availableProcessors() * POOL_SIZE); System.out.println(" 服务器启动"); } public void service() { while (true) { Socket socket = null; try { // 接收客户连接,只要客户进行了连 接,就会触发accept();从而建立连接 socket = serverSocket.accept(); executorService.execute(new Handler(socket)); } catch (Exception e) { e.printStackTrace(); } } } public static void main(String[] args) throws IOException { new SocketServer().service(); } } class Handler implements Runnable { private Socket socket; public Handler(Socket socket) { this.socket = socket; } private PrintWriter getWriter(Socket socket) throws IOException { OutputStream socketOut = socket.getOutputStream(); return new PrintWriter(socketOut, true); } private BufferedReader getReader(Socket socket) throws IOException { InputStream socketIn = socket.getInputStream(); return new BufferedReader(new InputStreamReader(socketIn)); } public String echo(String msg) { return "echo:" + msg; } public void run() { try { System.out.println("New connection a ccepted " + socket.getInetAddress() + ":" + socket.getPort()); BufferedReader br = getReader(socket); PrintWriter pw = getWriter(socket); String msg = null; while ((msg = br.readLine()) != null) { System.out.println(msg); pw.println(echo(msg)); if (msg.equals("bye")) break; } } catch (IOException e) { e.printStackTrace(); } finally { try { if (socket != null) socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }
客户端代码如下:
package com.lyq.socket.client; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; //客户端 public class SocketClient { public static void main(String[] args) { int numTasks = 110; ExecutorService exec = Executors.newCachedThreadPool(); for (int i = 0; i < numTasks; i++) { exec.execute(createTask(i)); } } // 定义一个简单的任务 private static Runnable createTask(final int taskID) { return new Runnable() { private Socket socket = null; private int port = 8821; public void run() { System.out.println("Task " + taskID + ":start"); try { socket = new Socket("localhost", port); // 发送关闭命令 OutputStream socketOut = socket.getOutputStream(); socketOut.write("shutdown\r\n".getBytes()); // 接收服务器的反馈 BufferedReader br = new BufferedReader( new InputStreamReader(socket.getInputStream())); String msg = null; while ((msg = br.readLine()) != null) System.out.println(msg); } catch (IOException e) { e.printStackTrace(); } } }; } }
采用Java 5的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送请求.
从而实现了多个客户端向服务器端发送请求,服务器端采用多线程的方式来处理的情况.
相关推荐
使用java多线程实现java Socket的一个服务端,多个客户端可共同通讯的功能
java socket 多线程 简易的实现方法 细节问题没有处理 适合新手
使用java socket开发的多线程文件上传下载的实例项目,多线程并发测试中可以支持200个,可能由于我电脑的配置问题,一般在并发大于200时client端可能会出现"阻塞"问题,还请大家指教
java多线程并发控制通信,用hibernate存储信息,数据库mysql.
NULL 博文链接:https://lisanlai.iteye.com/blog/721084
java socket 多线程网络传输多个文件
Java Socket多线程实例及文档,给大家分享这个期待你的加入。Java Socket多线程实例及文档
内含2248张图片所以有点大 利用java socket多线程来轮播图片的方式实现的视频效果 先运行SocketListener.java 在运行SocketVideo.java 希望给点好评论
该软件是一个基于java语言的socket编程,可以实现单个服务器对应多个客户端的聊天。采用swt,功能还是比较完善的。
网络通信之Java Socket多线程通信.pdf
基于多线程实现的JavaSocket客户端-服务端点对点异步通信程序代码
在主线程中通过控制台读取键盘...服务器在收到一个socket连接之后,把该socket保存到队列中,并对队列中的每个socket开启各自的读写线程。测试可以在不同控制台运行server和client,服务器接收消息时,会显示消息来源
客户端的请求首先会进入请求队列,处理器线程池会向请求队列获取请求并且分配分配处理器,每个处理器分配一个线程。处理器可以指定interceptor,处理逻辑都实现在ResponseHandler中。空闲时,处理器线程会休眠直到有...
使用了多线程创建了双工的通信,控制台输入输出文字。在同一网段内先启动client,然后是server(说反了)java -jar执行可执行jar
多线程多人聊天室,在多线程的基础上建立其模块功能包括client,server,user
Java tcp通讯,运用多线程,一个服务端与多个客户端进行交互
本项目为我现在负责开发的一个项目,在多线程并发测试中可以支持200个,可能由于我电脑的配置问题,一般在并发大于200时client端可能会出现"阻塞"问题,还请大家指教
Java Socket 传输自定义对象,服务端可以接受多个客户端的连接。
服务端知识进行连接 之后调用服务端的线程 服务端并没有大的改动,在原有的基础上加上线程池, 客户端界面只有简单的传一个...调用客户端的方法,方法中有线程,线程中进行socket的链接,这样才能实现多个文件的传输。