Java Socket服务器关键代码配置手册

Java Socket服务器在很多人使用的时候会出现或多或少的问题,其实在关键代码中有不少的问题需要我们处理,下面我们就看看如何才能更好的使用Java Socket服务器的相关代码。

Procedure2相比procedure1加入了多线程的部分,一个线程负责专门去接受消息,另一个负责发送消息。当服务器端负责接收的线程因为readUTF()被阻塞不能发送消息时,负责发送消息的线程让服务器端也能发送消息。同样的原理,客户端也如此。

服务器端加入的关键代码如下:

 
 
 
  1. class ServerReadThread extends Thread{  
  2. private DataInputStream dis;  
  3. public ServerReadThread(DataInputStream dis){  
  4. this.dis = dis;  
  5. }  
  6. public void run(){  
  7. String info;  
  8. try{  
  9. while(true){  
  10. info = dis.readUTF();  
  11. System.out.println("客户端说:" + info);  
  12. if(info.equals("goodbye")){  
  13. System.out.println("客户端拜拜了!");  
  14. System.exit(0);  
  15. }  
  16. }  
  17. }catch(IOException e){  
  18. e.printStackTrace();  
  19. }  
  20. }  
  21. }  
  22. class ServerWriteThread extends Thread{  
  23. private DataOutputStream dos;  
  24. private BufferedReader br;  
  25. public ServerWriteThread(DataOutputStream dos,BufferedReader br){  
  26. this.dos = dos;  
  27. this.br = br;  
  28. }  
  29. public void run(){  
  30. String info;  
  31. try{  
  32. while(true){  
  33. info = br.readLine();  
  34. dos.writeUTF(info);  
  35. if(info.equals("bye")){  
  36. System.exit(0);  
  37. }  
  38. }  
  39. }catch(IOException e){  
  40. e.printStackTrace();  
  41. }  
  42. }  

负责接受的类ServerReadThread继承Thread,并构造一个DataInputStream对象参数的构造函数,接收对方信息。负责发送的类ServerWriteThread继承Thread,并构造一个DataInputStream对象和BufferedRead对象的双参数的构造函数,负责发送消息。new ServerReadThread(dis).start();new ServerWriteThread(dos,br).start();开启两个线程。客户端原理与服务器端类似,就不做更详细的讲解。

思考:procedure2相比procedure1已经实现了多线程聊天,虽只是运行在控制台上,但麻雀虽小,五脏俱全,这已经体现出了java Socket编程以及多线程的核心思想,此课程设计的目的已经达到。Java Socket服务器为实现更加人性化的效果,我引入javaGUI的组件awt,与之相关的技术也就随之引入了,比如基于事件的驱动,还有awt各个组件之间的调用。与此同时,代码的分布和组织结构都要做相应的调整。

【编辑推荐】

  1. Java Socket通信如何进行通用服务器代码编写
  2. Java socket通信与C++之间的不解之缘
  3. Java Socket对象原理的详细介绍
  4. Java Socket服务端具体命令编写
  5. Java Socket通讯如何进行客户端的信息通信
THE END