java Socket多线程服务器源代码介绍

开发 后端
java Socket多线程在我们进行相关学习的时候需要注意不断出现的问题,下面我们就来看看在java Socket多线程中服务器的代码编写。

java Socket多线程需要我们不断的学习,在学习的时候我们就会发现在服务器的配置上有不少的问题。下面我们就来看看服务器源代码是如何编写的,以便大家更好的使用java Socket多线程。

  1. import java.io.BufferedReader;   
  2. import java.io.IOException;   
  3. import java.io.InputStreamReader;   
  4. import java.io.PrintWriter;   
  5. import java.net.ServerSocket;   
  6. import java.net.Socket;   
  7. import java.util.ArrayList;   
  8. import java.util.List;   
  9. import java.util.concurrent.ExecutorService;   
  10. import java.util.concurrent.Executors;   
  11. public class ChatServer {   
  12. private static final int PORT = 1234; // 端口号   
  13. private static List<Socket> list = new ArrayList<Socket>(); 
    // 保存连接对象   
  14. private ExecutorService exec;   
  15. private ServerSocket server;   
  16. public static void main(String[] args) {   
  17. new ChatServer();   
  18. }   
  19. public ChatServer() {   
  20. try {   
  21. server = new ServerSocket(PORT);   
  22. exec = Executors.newCachedThreadPool();   
  23. System.out.println(“服务器已启动!”);   
  24. Socket client = null;   
  25. while (true) {   
  26. client = server.accept(); // 接收客户连接   
  27. list.add(client);   
  28. exec.execute(new ChatTask(client));   
  29. }   
  30. } catch (IOException e) {   
  31. e.printStackTrace();   
  32. }   
  33. }   
  34. static class ChatTask implements Runnable {   
  35. private Socket socket;   
  36. private BufferedReader br;   
  37. private PrintWriter pw;   
  38. private String msg;   
  39. public ChatTask(Socket socket) throws IOException {   
  40. this.socket = socket;   
  41. br = new BufferedReader(new InputStreamReader(socket   
  42. .getInputStream()));   
  43. msg = “【” + this.socket.getInetAddress() + “】
    进入聊天室!当前聊天室有【”   
  44. + list.size() + “】人”;   
  45. sendMessage();   
  46. }   
  47. public void run() {   
  48. try {   
  49. while ((msg = br.readLine()) != null) {   
  50. if (msg.trim().equals(“bye”)) {   
  51. list.remove(socket);   
  52. br.close();   
  53. pw.close();   
  54. msg = “【” + socket.getInetAddress() + “】
    离开聊天室!当前聊天室有【”   
  55. + list.size() + “】人”;   
  56. socket.close();   
  57. sendMessage();   
  58. break;   
  59. } else {   
  60. msg = “【” + socket.getInetAddress() + “】说:” + msg;   
  61. sendMessage();   
  62. }   
  63. }   
  64. } catch (IOException e) {   
  65. e.printStackTrace();   
  66. }   
  67. }   
  68. /**   
  69. * 群发消息给聊天室的所有人   
  70. */   
  71. private void sendMessage() throws IOException {   
  72. System.out.println(msg);   
  73. for (Socket client : list) {   
  74. pw = new PrintWriter(client.getOutputStream(), true);   
  75. pw.println(msg);   
  76. }   
  77. }   
  78. }   
  79. }   
  80. import java.io.BufferedReader;   
  81. import java.io.InputStreamReader;   
  82. import java.io.PrintWriter;   
  83. import java.net.Socket;   
  84. import java.util.concurrent.ExecutorService;   
  85. import java.util.concurrent.Executors;   
  86. public class ChatClient {   
  87. private static final int PORT = 7891;   
  88. private static ExecutorService exec = 
    Executors.newCachedThreadPool();   
  89. public static void main(String[] args) throws Exception {   
  90. new ChatClient();   
  91. }   
  92. public ChatClient() {   
  93. try {   
  94. Socket socket = new Socket(“221.130.165.41″, PORT);   
  95. exec.execute(new Sender(socket));   
  96. System.out.println(“【” + socket.getInetAddress() + “】
    您好,欢迎来到简易聊天室!”);   
  97. BufferedReader br = new BufferedReader(new 
    InputStreamReader(socket.getInputStream()));   
  98. String msg;   
  99. while ((msg = br.readLine()) != null) {   
  100. System.out.println(“收到—->”+msg);   
  101. }   
  102. } catch (Exception e) {   
  103. }   
  104. }  

 

以上就是对java Socket多线程的相关介绍。

【编辑推荐】

  1. Java多线程程序设计初步
  2. Java进阶:Java多线程之ThreadLocal
  3. 初学Java多线程:线程简介
  4. 深入浅出Java多线程程序设计
  5. 实战Java多线程编程之不提倡的方法
责任编辑:张浩 来源: 互联网
相关推荐

2010-03-19 14:01:55

Java Socket

2010-03-19 16:51:53

Java Socket

2010-03-19 15:01:23

Java Socket

2010-03-19 09:26:34

Java Socket

2009-02-18 10:41:16

多线程服务器稳定Java

2010-03-18 20:00:35

Java socket

2009-02-27 11:15:00

多线程服务器MTS专用服务器

2010-03-17 19:24:38

Java多线程循环

2010-03-16 10:50:21

Java多线程服务器

2011-03-01 16:19:27

FileZilla

2011-03-01 16:01:08

FileZilla

2011-03-01 16:32:58

FileZilla

2011-12-08 13:04:06

JavaNIO

2011-03-01 16:25:37

FileZilla

2010-03-16 15:54:52

2010-03-16 13:47:48

Java多线程服务器

2010-03-18 19:39:44

Java Socket

2011-06-30 18:03:58

QT 多线程 服务器

2018-12-20 09:36:24

2011-07-22 14:55:20

多线程
点赞
收藏

51CTO技术栈公众号