javaSocket多线程服务器源代码介绍

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 list = new ArrayList(); 
    // 保存连接对象   
  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多线程的相关介绍。

分享标题:javaSocket多线程服务器源代码介绍
文章地址:http://www.shufengxianlan.com/qtweb/news11/327261.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联