首页 > 代码库 > 多线程Java Socket编程示例
多线程Java Socket编程示例
package org.merit.test.socket;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.Socket;public 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 accepted "+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 org.merit.test.socket;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 MultiThreadClient { public static void main(String[] args) { int numTasks = 10; 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(); } } }; }}
package org.merit.test.socket;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class MultiThreadServer { private int port = 8821; private ServerSocket serverSocket; private ExecutorService executorService;// 线程池 private final int POOL_SIZE = 10;// 单个CPU线程池大小 public MultiThreadServer() 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 MultiThreadServer().service(); }}
多线程Java Socket编程示例
多线程Java Socket编程示例
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。