成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java Socket線程的設計原理介紹

開發 后端
Java Socket線程如何才能更好的使用相關的技術應用呢?下面我們就看看如何才能更好的使用。希望大家有所收獲。

Java Socket線程我們經常會用到的技術,但是有很多程序員還是有不少的使用問題,下面我們就看看如何才能進行有關的代碼編寫,希望大家又說收獲。網絡的偉大之一也是信息共享,Server可以主動向所有Client廣播消息,同時Client也可以向其它Client發布消息。

下面看看如何開發一個可以實時傳遞消息的程序。

Java Socket線程的設計原理:

服務器端接受客戶端的連接請求,同時啟動一個線程處理這個連接,線程不停的讀取客戶端輸入,然后把輸入加入隊列中,等候處理。在線程啟動的同時將線程加入隊列中,以便在需要的時候定位和取出。

{源碼}

 

 

  1. import java.io.*;   
  2. import java.net.*;   
  3. import java.util.*;   
  4. import java.lang.*;   
  5. public class Server extends ServerSocket   
  6. {   
  7. private static ArrayList User_List = new ArrayList();   
  8. private static ArrayList Threader = new ArrayList();   
  9. private static LinkedList Message_Array = new LinkedList();   
  10. private static int Thread_Counter = 0;   
  11. private static boolean isClear = true;   
  12. protected static final int SERVER_PORT = 10000;   
  13. protected FileOutputStream LOG_FILE = new FileOutputStream("d:/connect.log", true);   
  14. public Server() throws FileNotFoundException, IOException   
  15. {   
  16. super(SERVER_PORT);   
  17. new Broadcast();   
  18. //append connection log   
  19. Calendar now = Calendar.getInstance();   
  20. String str = "[" + now.getTime().toString() + "] Accepted a connection1512";   
  21. byte[] tmp = str.getBytes();   
  22. LOG_FILE.write(tmp);   
  23. try   
  24. {   
  25. while (true)   
  26. {   
  27. Socket socket = accept();   
  28. new CreateServerThread(socket);   
  29. }   
  30. }   
  31. finally   
  32. {   
  33. close();   
  34. }   
  35. }   
  36. public static void main(String[] args) throws IOException   
  37. {   
  38. new Server();   
  39. }   
  40. //--- Broadcast   
  41. class Broadcast extends Thread   
  42. {   
  43. public Broadcast()   
  44. {   
  45. start();   
  46. }   
  47. public void run()   
  48. {   
  49. while (true)   
  50. {   
  51. if (!isClear)   
  52. {   
  53. String tmp = (String)Message_Array.getFirst();   
  54. for (int i = 0; i < Threader.size(); i++)   
  55. {   
  56. CreateServerThread client = (CreateServerThread)Threader.get(i);   
  57. client.sendMessage(tmp);   
  58. }  
  59. Message_Array.removeFirst();   
  60. isClear = Message_Array.size() > 0 ? false : true;   
  61. }   
  62. }   
  63. }   
  64. }   
  65. //--- CreateServerThread   
  66. class CreateServerThread extends Thread   
  67. {   
  68. private Socket client;   
  69. private BufferedReader in;   
  70. private PrintWriter out;   
  71. private String Username;   
  72. public CreateServerThread(Socket s) throws IOException   
  73. {   
  74. client = s;   
  75. in = new BufferedReader(new InputStreamReader(client.getInputStream()));   
  76. out = new PrintWriter(client.getOutputStream(), true);   
  77. out.println("--- Welcome to this chatroom ---");   
  78. out.println("Input your nickname:");   
  79. start();   
  80. }   
  81. public void sendMessage(String msg)   
  82. {   
  83. out.println(msg);   
  84. }   
  85. public void run()   
  86. {   
  87. try   
  88. {   
  89. int flag = 0;   
  90. Thread_Counter++;   
  91. String line = in.readLine();   
  92. while (!line.equals("bye"))   
  93. {   
  94. if (line.equals("l"))   
  95. {   
  96. out.println(listOnlineUsers());   
  97. line = in.readLine();   
  98. continue;   
  99. }   
  100. if (flag++ == 0)   
  101. {   
  102. Username = line;   
  103. User_List.add(Username);   
  104. out.println(listOnlineUsers());   
  105. Threader.add(this);   
  106. pushMessage("[< " + Username + " come on in >]");   
  107. }   
  108. else   
  109. {   
  110. pushMessage("<" + Username + ">" + line);   
  111. }   
  112. line = in.readLine();   
  113. }   
  114. out.println("--- See you, bye! ---");   
  115. client.close();   
  116. }   
  117. catch (IOException e)   
  118. {}   
  119. finally   
  120. {   
  121. try   
  122. {  
  123. client.close();   
  124. }   
  125. catch (IOException e)   
  126. {}   
  127. Thread_Counter--;   
  128. Threader.remove(this);   
  129. User_List.remove(Username);   
  130. pushMessage("[< " + Username + " left>]");   
  131. }   
  132. }   
  133. private String listOnlineUsers()   
  134. {   
  135. String s ="-+- Online list -+-1512";   
  136. for (int i = 0; i < User_List.size(); i++)   
  137. {   
  138. s += "[" + User_List.get(i) + "]1512";   
  139. }   
  140. s += "-+---------------------+-";   
  141. return s;   
  142. }   
  143. private void pushMessage(String msg)   
  144. {   
  145. Message_Array.addLast(msg);   
  146. isClear = false;   
  147. }   
  148. }   
  149. }  

以上就是對Java Socket線程的詳細介紹。這就是程序運行后,多用戶登陸并且輸入信息后的屏幕。實現了信息的實時廣播。用戶輸入"l"就可以列出在線人員表。

【編輯推薦】

  1. Java Socket編程關鍵代碼詳解
  2. java Socket多線程服務器源代碼介紹
  3. java Socket多線程客戶端配置方案
  4. Java Socket通訊實際操作手冊
  5. Java Socket通訊客戶端代碼編寫教程
責任編輯:張浩 來源: 博客園
相關推薦

2010-03-18 18:20:34

Java Socket

2010-03-19 17:18:07

Java Socket

2012-05-15 02:18:31

Java線程池

2010-03-18 20:13:03

Java socket

2010-03-17 17:54:25

java Socket

2009-06-11 10:00:05

Java Socket

2010-03-19 16:51:53

Java Socket

2013-03-27 10:32:53

iOS多線程原理runloop介紹GCD

2010-03-19 16:16:28

Java Socket

2011-12-07 14:25:33

JavaNIO

2023-10-09 08:18:08

域值Java 21結構化

2009-08-18 16:45:40

C# Raw Sock

2010-03-17 19:24:38

Java多線程循環

2010-03-18 14:09:20

Java線程同步

2010-03-18 15:47:07

Java創建線程

2011-07-22 14:55:20

多線程

2010-03-19 14:28:58

Java Socket

2021-07-16 11:35:20

Java線程池代碼

2012-02-15 10:34:29

JavaJava Socket

2010-03-15 19:11:39

Java多線程語句
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 7777久久| 免费在线成人网 | 91短视频网址 | 国产精品欧美一区喷水 | 成人羞羞国产免费视频 | 免费高潮视频95在线观看网站 | 久久性色 | 国产精品自拍视频网站 | 成人在线播放 | 久久久久国产一区二区三区 | 亚州av在线 | 亚洲视频中文字幕 | 中文字幕亚洲在线 | 久久久久国产精品免费免费搜索 | 狠狠躁18三区二区一区 | 亚洲精品一区二区网址 | 国产精品一区二区三区久久久 | 精品视频成人 | 国产美女永久免费无遮挡 | 秋霞在线一区二区 | 国产综合久久久久久鬼色 | 欧美一级二级在线观看 | 四虎最新视频 | 性福视频在线观看 | 成年人视频免费在线观看 | 啪视频在线| 久久久夜 | 亚洲视频免费 | 99久久国产免费 | 国产精品视频久久久 | 日韩视频免费看 | 成人免费共享视频 | 亚洲日韩中文字幕一区 | 久久国内 | 欧美一区二 | 天天操天天玩 | 国产精品一区二区三区久久 | 亚洲一av | 91久久国产综合久久 | 欧美亚洲网站 | 日日人人 |