java Socket 編程執行個體

來源:互聯網
上載者:User

一、用戶端

        

package net.socketTest;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.io.Reader;import java.io.Writer;import java.net.Socket;import java.net.UnknownHostException;import java.util.Random;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class MultiThreadClient_jiaohu {        public static void main(String[] args) throws InterruptedException {        int numTasks = 2120;                ExecutorService exec = Executors.newCachedThreadPool();        for (int i = 0; i < numTasks; i++) {        Thread.sleep(5L);            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() {            Socket clinet = null;               int task_ID=taskID;try {clinet = new Socket("192.168.252.155",port);} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}        Reader reader = null;try {reader = new InputStreamReader(clinet.getInputStream());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}        BufferedReader clinetin=new BufferedReader(reader);        Writer writer = null;try {writer = new OutputStreamWriter(clinet.getOutputStream());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}        PrintWriter clientout=new PrintWriter(writer);                int i=0;        while(true){        i++;        try {        int ran=new Random().nextInt(20*60)+1;Thread.sleep(ran*1000L);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}        String str=" 線程編號:"+task_ID;        clientout.println(str);        clientout.flush();                String newStr = null;try {newStr = clinetin.readLine();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}        System.out.println("  --:"+newStr);        if(i>=100000)break;        }                        try {clinetin.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}        clientout.close();        System.out.println("  ===發送結束===");                                                            }        };    }}

二、服務端

 

package net.socketTest;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=2200;//單個CPU線程池大小 也是最大串連數,否則超出此數量的串連數無法連上    private int count=0;    public SocketServer() throws IOException{        serverSocket=new ServerSocket(port);        //Runtime的availableProcessor()方法返回當前系統的CPU數目.        executorService=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE);        System.out.println("start Socket Server at port: "+port);    }        public void start(){        while(true){            Socket socket=null;            try {                //接收客戶串連,只要客戶進行了串連,就會觸發accept();從而建立串連                socket=serverSocket.accept();                count++;                System.out.println("                                                          "+count);                executorService.execute(new Handler(socket));                            } catch (Exception e) {                e.printStackTrace();            }        }    }        public static void main(String[] args) throws IOException {        new SocketServer().start();    }}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 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(msg);            }        } catch (IOException e) {            e.printStackTrace();        }finally{            try {                if(socket!=null)                    socket.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.