首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java Socket Server-client端多线程处置代码示例

2014-01-03 
Java Socket Server-client端多线程处理代码示例package cn.outofmemory.socket.serverimport java.io.Bu

Java Socket Server-client端多线程处理代码示例
package cn.outofmemory.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 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(); }}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(); } } }}

?java socket客户端代码

package cn.outofmemory.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 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();                }            }        };    }}

?

热点排行