自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java 多客戶端通信服務(wù)端代碼介紹

開發(fā) 后端
Java 多客戶端通信需要我們不斷的學(xué)習(xí),在學(xué)習(xí)的過程中不斷的問題會讓我們十分頭痛,下面我們就看看相關(guān)問題的解決方案。

Java 多客戶端通信在很多人看來是一項很繁瑣的工作,其實我們在編寫代碼的時候只要是注意留心Java 多客戶端通信的源代碼就能發(fā)現(xiàn),我們認(rèn)為枯燥的東西其實都很簡單。

來看服務(wù)端的代碼:

  1. import java.net.*;   
  2. import java.io.*;   
  3. import java.util.*;   
  4. public class Jserver3 {   
  5. private ServerSocket server;   
  6. List sManager = new ArrayList();   
  7. public Jserver3(){}   
  8. void startServer() //運行服務(wù)器   
  9. {   
  10. try   
  11. {   
  12. server=new ServerSocket(719);   
  13. System.out.println("服務(wù)器套接字已創(chuàng)建成功!");   
  14. while(true)   
  15. {   
  16. Socket socket=server.accept();   
  17. System.out.println("已經(jīng)與客戶端連接");   
  18. new J_Thread(socket).start();   
  19. sManager.add(socket);   
  20. System.out.println("當(dāng)前客戶端連結(jié)數(shù):"+sManager.size());   
  21. }   
  22. }catch(Exception e){}finally   
  23. {   
  24. try   
  25. {   
  26. server.close();   
  27. }catch(Exception e){}   
  28. }   
  29. }   
  30. public static void main(String[] args) {   
  31. Jserver3 server=new Jserver3();   
  32. server.startServer();   
  33. }   
  34. class J_Thread extends Thread  //與客戶端進行通信的線程類   
  35. {   
  36. Socket socket;   //套接字引用變量   
  37. private DataInputStream reader;   //套接字輸入流   
  38. private DataOutputStream writer;  //套接字輸出流   
  39. J_Thread(Socket socket)   //構(gòu)造函數(shù)   
  40. {   
  41. this.socket=socket;   
  42. }   
  43. public void run()   
  44. {   
  45. try   
  46. {   
  47. reader=new DataInputStream(socket.getInputStream());//獲取套接字的輸入流   
  48. writer=new DataOutputStream(socket.getOutputStream());//獲取套接字的輸出流   
  49. String msg;   
  50. while((msg=reader.readUTF())!=null)//如果收到客戶端發(fā)來的數(shù)據(jù)   
  51. {   
  52. //向客戶端發(fā)送信息   
  53. writer.writeUTF("您的情書已經(jīng)收到");   
  54. writer.flush();   
  55. System.out.println("來自客戶端:"+msg);   
  56. }   
  57. }catch(Exception e){}finally   
  58. {   
  59. try   
  60. {   
  61. sManager.remove(socket);  //刪除套接字   
  62. //關(guān)閉輸入輸出流及套接字   
  63. if(reader!=null)reader.close();   
  64. if(writer!=null)writer.close();   
  65. if(socket!=null)socket.close();   
  66. reader=null;   
  67. writer=null;   
  68. socket=null;   
  69. System.out.println("客戶端離開");//向屏幕輸出相關(guān)信息   
  70. System.out.println("當(dāng)前客戶端的連接數(shù):"+sManager.size());   
  71. }catch(Exception e){}   
  72. }   
  73. }   
  74. }   
  75. }   
  76. import java.net.*;  
  77. import java.io.*;  
  78. import java.util.*;  
  79. public class Jserver3 {  
  80. private ServerSocket server;  
  81. List sManager = new ArrayList();  
  82. public Jserver3(){}  
  83. void startServer() //運行服務(wù)器  
  84. {  
  85. try  
  86. {  
  87. server=new ServerSocket(719);  
  88. System.out.println("服務(wù)器套接字已創(chuàng)建成功!");  
  89. while(true)  
  90. {  
  91. Socket socket=server.accept();  
  92. System.out.println("已經(jīng)與客戶端連接");  
  93. new J_Thread(socket).start();  
  94. sManager.add(socket);  
  95. System.out.println("當(dāng)前客戶端連結(jié)數(shù):"+sManager.size());  
  96. }  
  97. }catch(Exception e){}finally  
  98. {  
  99. try  
  100. {  
  101. server.close();  
  102. }catch(Exception e){}  
  103. }  
  104. }  
  105. public static void main(String[] args) {  
  106. Jserver3 server=new Jserver3();  
  107. server.startServer();  
  108. }  
  109. class J_Thread extends Thread  //與客戶端進行通信的線程類  
  110. {  
  111. Socket socket;   //套接字引用變量  
  112. private DataInputStream reader;   //套接字輸入流  
  113. private DataOutputStream writer;  //套接字輸出流  
  114. J_Thread(Socket socket)   //構(gòu)造函數(shù)  
  115. {  
  116. this.socket=socket;  
  117. }  
  118. public void run()  
  119. {  
  120. try  
  121. {  
  122. reader=new DataInputStream(socket.getInputStream());//獲取套接字的輸入流  
  123. writer=new DataOutputStream(socket.getOutputStream());//獲取套接字的輸出流  
  124. String msg;  
  125. while((msg=reader.readUTF())!=null)//如果收到客戶端發(fā)來的數(shù)據(jù)  
  126. {  
  127. //向客戶端發(fā)送信息  
  128. writer.writeUTF("您的情書已經(jīng)收到");  
  129. writer.flush();  
  130. System.out.println("來自客戶端:"+msg);  
  131. }  
  132. }catch(Exception e){}finally  
  133. {  
  134. try  
  135. {  
  136. sManager.remove(socket);  //刪除套接字  
  137. //關(guān)閉輸入輸出流及套接字  
  138. if(reader!=null)reader.close();  
  139. if(writer!=null)writer.close();  
  140. if(socket!=null)socket.close();  
  141. reader=null;  
  142. writer=null;  
  143. socket=null;  
  144. System.out.println("客戶端離開");//向屏幕輸出相關(guān)信息  
  145. System.out.println("當(dāng)前客戶端的連接數(shù):"+sManager.size());  
  146. }catch(Exception e){}  
  147. }  
  148. }  
  149. }  

嘎嘎 在這段代碼里,服務(wù)端MM為每一個連接的客戶端GG分配一個單獨的線程,而每一個線程里都持有對應(yīng)的客戶端GG的Java 多客戶端通信對象。SO,通過這些多線程,服務(wù)端MM就練就了一心N用的功力,可以同時接受N個客戶端GG發(fā)來的情書了(,真的太賤了。。。。)

客戶端的代碼和上面的客戶端代碼一模一樣的,這里就不多說啦!
 

【編輯推薦】

  1. Java線程通信簡單調(diào)試方法介紹
  2. Java線程如何才能管理好自己的“小弟”
  3. Java線程和Objec之間的不解之緣
  4. Java線程池在運行后的結(jié)果反查
  5. Java線程池在使用中的問題解疑
責(zé)任編輯:張浩 來源: 博客園
相關(guān)推薦

2009-08-21 15:59:22

服務(wù)端與客戶端通信

2009-08-21 16:14:52

服務(wù)端與客戶端通信

2010-03-19 09:26:34

Java Socket

2011-09-09 09:44:23

WCF

2010-03-19 18:17:17

Java Server

2023-03-06 08:01:56

MySQLCtrl + C

2009-08-21 15:36:41

服務(wù)端與客戶端

2009-08-21 15:54:40

服務(wù)端與客戶端

2024-03-06 14:58:52

客戶端微服務(wù)架構(gòu)

2023-04-03 08:13:05

MySQLCtrl + C

2010-11-19 14:22:04

oracle服務(wù)端

2021-10-19 08:58:48

Java 語言 Java 基礎(chǔ)

2014-08-11 16:35:35

KafkaJava客戶端

2015-01-13 10:32:23

RestfulWeb框架

2010-07-19 16:30:19

Telnet客戶端

2021-06-11 06:54:34

Dubbo客戶端服務(wù)端

2010-03-18 16:49:43

Java Socket

2010-05-28 14:11:37

SVN1.6

2021-10-14 08:39:17

Java Netty Java 基礎(chǔ)

2022-09-05 14:36:26

服務(wù)端TCP連接
點贊
收藏

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