欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java Socket Server-client端多线程处理代码示例,,这篇做为学习孙卫琴<<J

来源: javaer 分享于  点击 27392 次 点评:94

Java Socket Server-client端多线程处理代码示例,,这篇做为学习孙卫琴<

这篇做为学习孙卫琴<<Java网络编程精解>>的学习笔记吧.其中采用Java 5的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送请求.

java socket服务端

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();                }            }        };    }}

相关栏目:

用户点评