MultiThreadClientHandler.java
上传用户:caijun
上传日期:2022-08-05
资源大小:13k
文件大小:3k
源码类别:

加密解密

开发平台:

Java

  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.io.InputStreamReader;
  5. import java.io.OutputStream;
  6. import java.io.PrintWriter;
  7. import java.net.*;
  8. import java.util.concurrent.*;
  9. public class MultiThreadClientHandler {
  10. private int port = 8821;
  11. private ServerSocket serverSocket;
  12. private ExecutorService executorService;// thread pool
  13. private final int POOL_SIZE = 10;// thread numbers of a single pool
  14. public MultiThreadClientHandler() throws IOException {
  15. serverSocket = new ServerSocket(port);
  16. // Runtime的availableProcessor()方法返回当前系统的CPU数目.
  17. executorService = Executors.newFixedThreadPool(Runtime.getRuntime()
  18. .availableProcessors()
  19. * POOL_SIZE);
  20. System.out.println("服务器启动n"
  21. + Runtime.getRuntime().availableProcessors() * POOL_SIZE);
  22. }
  23. public void service() {
  24. while (true) {
  25. Socket socket = null;
  26. try {
  27. // 接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接
  28. socket = serverSocket.accept();
  29. executorService.execute(new Handler(socket));
  30. } catch (Exception e) {
  31. e.printStackTrace();
  32. }
  33. }
  34. }
  35. public static void main(String[] args) throws IOException {
  36. new MultiThreadClientHandler().service();
  37. }
  38. }
  39. class Handler implements Runnable {
  40. private Socket socket;
  41. public Handler(Socket socket) {
  42. this.socket = socket;
  43. }
  44. private PrintWriter getWriter(Socket socket) throws IOException {
  45. OutputStream socketOut = socket.getOutputStream();
  46. return new PrintWriter(socketOut, true);
  47. }
  48. private BufferedReader getReader(Socket socket) throws IOException {
  49. InputStream socketIn = socket.getInputStream();
  50. return new BufferedReader(new InputStreamReader(socketIn));
  51. }
  52. public String echo(String msg) {
  53. return "echo:" + msg;
  54. }
  55. public void run() {
  56. try {
  57. System.out.println("New connection accepted "
  58. + socket.getInetAddress() + ":" + socket.getPort());
  59. BufferedReader br = getReader(socket);
  60. PrintWriter pw = getWriter(socket);
  61. String msg = null;
  62. System.out.println("n++n");
  63. if(br.readLine().equals(null)){
  64. System.out.println("n-----n");
  65. }else{
  66. System.out.println("n" + br.readLine().trim() + "n");
  67. }
  68. while ((msg = br.readLine()) != null) {
  69. System.out.println(msg);
  70. pw.println(echo(msg));
  71. if (msg.equals("bye"))
  72. break;
  73. }
  74. } catch (IOException e) {
  75. e.printStackTrace();
  76. } finally {
  77. try {
  78. if (socket != null)
  79. socket.close();
  80. } catch (IOException e) {
  81. e.printStackTrace();
  82. }
  83. }
  84. }
  85. }