夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks
          1.服務器
          package sterning;

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

              
          }


          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(
          "國際化"));
                          
          if (msg.equals("bye"))
                              
          break;
                      }

                  }

                  
          catch (IOException e)
                  
          {
                      e.printStackTrace();
                  }

                  
          finally
                  
          {
                      
          try
                      
          {
                          
          if (socket != null)
                              socket.close();
                      }

                      
          catch (IOException e)
                      
          {
                          e.printStackTrace();
                      }

                  }

              }

          }


          2.服務器處理程序
          package sterning;

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

                          }

                          
                      }
          ;
              }

          }


          posted on 2011-08-26 10:28 HUIKK 閱讀(420) 評論(0)  編輯  收藏 所屬分類: Javajava Net
          主站蜘蛛池模板: 宝山区| 九江市| 正定县| 宣恩县| 玉林市| 黄冈市| 奈曼旗| 荔浦县| 正定县| 永康市| 石屏县| 墨脱县| 昂仁县| 云南省| 额敏县| 都匀市| 康乐县| 丰顺县| 武川县| 揭西县| 西平县| 尉氏县| 沙雅县| 吴川市| 隆尧县| 玉田县| 镇巴县| 木兰县| 武强县| 凤山县| 安国市| 丰城市| 正定县| 大丰市| 阳春市| 五华县| 双牌县| 乐山市| 玛纳斯县| 陕西省| 巴里|