Java 多客户端通信服务端代码介绍

开发 后端
Java 多客户端通信需要我们不断的学习,在学习的过程中不断的问题会让我们十分头痛,下面我们就看看相关问题的解决方案。

Java 多客户端通信在很多人看来是一项很繁琐的工作,其实我们在编写代码的时候只要是注意留心Java 多客户端通信的源代码就能发现,我们认为枯燥的东西其实都很简单。

来看服务端的代码:

  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() //运行服务器   
  9. {   
  10. try   
  11. {   
  12. server=new ServerSocket(719);   
  13. System.out.println("服务器套接字已创建成功!");   
  14. while(true)   
  15. {   
  16. Socket socket=server.accept();   
  17. System.out.println("已经与客户端连接");   
  18. new J_Thread(socket).start();   
  19. sManager.add(socket);   
  20. System.out.println("当前客户端连结数:"+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)   //构造函数   
  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)//如果收到客户端发来的数据   
  51. {   
  52. //向客户端发送信息   
  53. writer.writeUTF("您的情书已经收到");   
  54. writer.flush();   
  55. System.out.println("来自客户端:"+msg);   
  56. }   
  57. }catch(Exception e){}finally   
  58. {   
  59. try   
  60. {   
  61. sManager.remove(socket);  //删除套接字   
  62. //关闭输入输出流及套接字   
  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("客户端离开");//向屏幕输出相关信息   
  70. System.out.println("当前客户端的连接数:"+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() //运行服务器  
  84. {  
  85. try  
  86. {  
  87. server=new ServerSocket(719);  
  88. System.out.println("服务器套接字已创建成功!");  
  89. while(true)  
  90. {  
  91. Socket socket=server.accept();  
  92. System.out.println("已经与客户端连接");  
  93. new J_Thread(socket).start();  
  94. sManager.add(socket);  
  95. System.out.println("当前客户端连结数:"+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)   //构造函数  
  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)//如果收到客户端发来的数据  
  126. {  
  127. //向客户端发送信息  
  128. writer.writeUTF("您的情书已经收到");  
  129. writer.flush();  
  130. System.out.println("来自客户端:"+msg);  
  131. }  
  132. }catch(Exception e){}finally  
  133. {  
  134. try  
  135. {  
  136. sManager.remove(socket);  //删除套接字  
  137. //关闭输入输出流及套接字  
  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("客户端离开");//向屏幕输出相关信息  
  145. System.out.println("当前客户端的连接数:"+sManager.size());  
  146. }catch(Exception e){}  
  147. }  
  148. }  
  149. }  

嘎嘎 在这段代码里,服务端MM为每一个连接的客户端GG分配一个单独的线程,而每一个线程里都持有对应的客户端GG的Java 多客户端通信对象。SO,通过这些多线程,服务端MM就练就了一心N用的功力,可以同时接受N个客户端GG发来的情书了(,真的太贱了。。。。)

客户端的代码和上面的客户端代码一模一样的,这里就不多说啦!
 

【编辑推荐】

  1. Java线程通信简单调试方法介绍
  2. Java线程如何才能管理好自己的“小弟”
  3. Java线程和Objec之间的不解之缘
  4. Java线程池在运行后的结果反查
  5. Java线程池在使用中的问题解疑
责任编辑:张浩 来源: 博客园
相关推荐

2009-08-21 16:14:52

服务端与客户端通信

2009-08-21 15:59:22

服务端与客户端通信

2010-03-19 09:26:34

Java Socket

2011-09-09 09:44:23

WCF

2010-03-19 18:17:17

Java Server

2009-08-21 15:36:41

服务端与客户端

2009-08-21 15:54:40

服务端与客户端

2023-03-06 08:01:56

MySQLCtrl + C

2024-03-06 14:58:52

客户端微服务架构

2010-11-19 14:22:04

oracle服务端

2021-10-19 08:58:48

Java 语言 Java 基础

2023-04-03 08:13:05

MySQLCtrl + C

2014-08-11 16:35:35

KafkaJava客户端

2015-01-13 10:32:23

RestfulWeb框架

2021-06-11 06:54:34

Dubbo客户端服务端

2010-03-18 16:49:43

Java Socket

2010-07-19 16:30:19

Telnet客户端

2022-01-05 08:03:23

C#通信Rest

2013-01-05 11:30:55

FacebookFacebook客户端

2022-09-05 14:36:26

服务端TCP连接
点赞
收藏

51CTO技术栈公众号