400-028-6601
建站资讯

网站建设资讯

为你提供网站建设行业资讯、网站优化知识、主机域名邮箱、网站开发常见问题等。

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

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

创新互联成立于2013年,先为锡山等服务建站,锡山等地企业,进行企业商务咨询服务。为锡山企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

来看服务端的代码:

 
 
 
  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. }
  150. }

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

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


本文名称:Java多客户端通信服务端代码介绍
当前网址:http://www.hnjierui.cn/article/cdjcpij.html

其他资讯