国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - Java Socket實現簡易聊天室

Java Socket實現簡易聊天室

2021-08-25 10:44快樂鍵盤俠 Java教程

這篇文章主要為大家詳細介紹了Java Socket實現簡易聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

Java-Socket編程實現簡易聊天室(TCP),供大家參考,具體內容如下

實現一個服務器接收多個客戶端

測試:

首先啟動服務器,然后啟動三個客戶端,輸入三個不同的用戶名,分別在聊天室發消息
看其他客戶端是否能接收到消息

效果如下圖:

一號發消息

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.  
  12. public class Server1 {
  13.  
  14. static public List<Client> list = new ArrayList<Client>();
  15.  
  16. static ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
  17.  
  18. public static void main(String[] args) {
  19. //創建一個ServerSocket監聽端口
  20. try (ServerSocket server = new ServerSocket(5678)) {
  21.  
  22. while (true) { // 利用死循環不停的監聽端口
  23.  
  24. Socket s = server.accept();// 利用Socket服務器的accept()方法獲取客戶端Socket對象。
  25. addClient(s);
  26.  
  27. }
  28.  
  29. } catch (IOException e) {
  30. e.printStackTrace();
  31. }
  32. }
  33.  
  34. // 添加客戶端
  35. private static void addClient(Socket s) {
  36. String name;
  37.  
  38. try {
  39. BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
  40. name = in.readLine();
  41. Client c = new Client(name, s);// 創建客戶端處理線程對象
  42. System.out.println(name);
  43. list.add(c);
  44.  
  45. cachedThreadPool.execute(c);
  46.  
  47. } catch (IOException e) {
  48. e.printStackTrace();
  49. }
  50. }
  51.  
  52. static class Client implements Runnable {
  53.  
  54. String name; // 客戶端名字
  55. Socket s = null; // 保存客戶端Socket對象
  56.  
  57. BufferedReader in;
  58. PrintWriter out;
  59.  
  60. Client(String name, Socket s) {
  61.  
  62. this.s = s;
  63. this.name = name;
  64.  
  65. try {
  66. in = new BufferedReader(new InputStreamReader(s.getInputStream()));
  67. out = new PrintWriter(s.getOutputStream());
  68. } catch (IOException e) {
  69. // TODO Auto-generated catch block
  70. e.printStackTrace();
  71. }
  72. }
  73.  
  74. @Override
  75. public void run() {
  76. try {
  77. while (true) {
  78. String str = in.readLine();
  79. for (int j = 0; j < list.size(); j++) {
  80. Server1.Client c = list.get(j);
  81. if (c != this) {
  82. System.out.println(str);
  83. c.send(str+"-|1|2|-"+name);
  84. }
  85. }
  86.  
  87. if (str.equals("end"))
  88. break;
  89. }
  90.  
  91. try {
  92. s.close();
  93. } catch (IOException e) {
  94. // TODO Auto-generated catch block
  95. e.printStackTrace();
  96. }
  97. } catch (IOException e1) {
  98. // TODO Auto-generated catch block
  99. e1.printStackTrace();
  100. }
  101. }
  102.  
  103. public void send(String str) throws IOException {
  104. out.println(str);
  105. out.flush();
  106. }
  107. }
  108. }

客戶端設計

  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.io.PrintWriter;
  5. import java.net.Socket;
  6. import java.util.Scanner;
  7.  
  8. public class Client1 {
  9. public static String name = null;
  10. static Socket socket = null;
  11.  
  12. static BufferedReader in;
  13. static PrintWriter out;
  14.  
  15. public static void main(String[] args) {
  16. Scanner sc = new Scanner(System.in);
  17.  
  18. System.out.print("輸入用戶名:>");
  19. name = sc.nextLine();
  20.  
  21. try {
  22. // socket = new Socket("116.62.173.212", 5678);
  23. socket = new Socket("127.0.0.1", 5678);
  24.  
  25. System.out.println(socket);
  26.  
  27. System.out.println("已連接服務器>");
  28.  
  29. out = new PrintWriter(socket.getOutputStream());
  30. in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  31.  
  32. Thread receive = new Thread(new receiveThread());
  33. receive.start();
  34.  
  35. out.println(name);
  36. out.flush();
  37.  
  38. String msg;
  39.  
  40. while (true) {
  41. // System.out.print("你說:>");
  42. msg = sc.nextLine();
  43.  
  44. out.println(msg);
  45. out.flush();
  46.  
  47. if (msg.equalsIgnoreCase("end"))
  48. break;
  49. }
  50.  
  51. } catch (IOException e) {
  52. e.printStackTrace();
  53. }
  54. }
  55.  
  56. static class receiveThread implements Runnable{
  57.  
  58. @Override
  59. public void run() {
  60. try {
  61. while (socket!=null) {
  62.  
  63. String str = in.readLine();
  64. String message = str.split("-\\|1\\|2\\|-")[0];
  65. String name = str.split("-\\|1\\|2\\|-")[1];
  66. System.out.println(name + ":>" + message);
  67.  
  68. }
  69. }catch(Exception e) {
  70. e.printStackTrace();
  71. }
  72. }
  73. }
  74. }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持我們。

原文鏈接:https://blog.csdn.net/qq_42843894/article/details/114793283

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 男人影音 | 欧美色欧美亚洲另类七区 | 日韩在线短视频 | 亚洲免费视频网 | 免费v片 | 亚洲国产一区二区三区 | 亚洲第一成人在线视频 | 色视频亚洲| 中文字幕精品一区 | 久久精品无码一区二区三区 | 欧美日日 | 伊人亚洲 | 久久精品中文视频 | 国产成人久久 | 精品视频一区二区 | 成人久久久精品乱码一区二区三区 | 欧美精品成人一区二区在线 | av色伊人久久综合一区二区 | 99久久婷婷国产综合精品电影 | 日本久久久久久久久久久久 | 能看的av网站 | 日本欧美在线 | 成人免费在线观看网址 | 午夜精品久久久久久久久 | 色婷婷av一区二区三区大白胸 | 国产精品美女久久久久久免费 | 亚洲免费在线视频 | 激情图区在线观看 | 国产99久久精品一区二区永久免费 | 俺去俺来也www色官网cms | 国产一级在线 | 山岸逢花在线 | 欧美一区二区三区四区不卡 | 紧缚调教一区二区三区视频 | 久久人人爽人人爽人人片av不 | 亚洲好看站 | 超碰一区 | 国产黄色电影 | 九九人人| 无码日韩精品一区二区免费 | 日本精品一区二区三区在线观看 |