偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Java Socket線程的設(shè)計(jì)原理介紹

開發(fā) 后端
Java Socket線程如何才能更好的使用相關(guān)的技術(shù)應(yīng)用呢?下面我們就看看如何才能更好的使用。希望大家有所收獲。

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

下面看看如何開發(fā)一個(gè)可以實(shí)時(shí)傳遞消息的程序。

Java Socket線程的設(shè)計(jì)原理:

服務(wù)器端接受客戶端的連接請求,同時(shí)啟動(dòng)一個(gè)線程處理這個(gè)連接,線程不停的讀取客戶端輸入,然后把輸入加入隊(duì)列中,等候處理。在線程啟動(dòng)的同時(shí)將線程加入隊(duì)列中,以便在需要的時(shí)候定位和取出。

{源碼}

 

 

  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線程的詳細(xì)介紹。這就是程序運(yùn)行后,多用戶登陸并且輸入信息后的屏幕。實(shí)現(xiàn)了信息的實(shí)時(shí)廣播。用戶輸入"l"就可以列出在線人員表。

【編輯推薦】

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

2010-03-18 18:20:34

Java Socket

2010-03-19 17:18:07

Java Socket

2010-03-18 20:13:03

Java socket

2012-05-15 02:18:31

Java線程池

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結(jié)構(gòu)化

2009-08-18 16:45:40

C# Raw Sock

2010-03-18 14:09:20

Java線程同步

2010-03-18 15:47:07

Java創(chuàng)建線程

2010-03-17 19:24:38

Java多線程循環(huán)

2010-03-19 14:28:58

Java Socket

2011-07-22 14:55:20

多線程

2012-02-15 10:34:29

JavaJava Socket

2021-07-16 11:35:20

Java線程池代碼

2010-03-15 19:11:39

Java多線程語句
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)