socket 多客户端程序

来源:互联网 发布:2016网络关键词 编辑:程序博客网 时间:2024/06/03 19:11

所谓可以多客户端,就是需要在服务器端进行多线程编程,每一个客户端对应一个线程。如果要实现时时通讯和话,无论是客户端还是服务器端都要至少两个线程,主线程进行发送信息,子线程进行获取信息,这样可以保证时时通信.

下面贴出我的代码:

客户端:

[java] view plaincopy
  1. package com.lip;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.BufferedWriter;  
  5. import java.io.IOException;  
  6. import java.io.InputStreamReader;  
  7. import java.io.OutputStreamWriter;  
  8. import java.io.PrintWriter;  
  9. import java.net.Socket;  
  10. import java.util.Scanner;  
  11.   
  12. public class Client  
  13.     {  
  14.   
  15.         /** 
  16.          * Author: Lip  
  17.          * 客户端 
  18.          */  
  19.         public static void main(String[] args)  
  20.             {  
  21.                 Socket socket = null;  
  22.                 BufferedReader br = null;  
  23.                 PrintWriter pw = null;  
  24.                 Scanner scanner = new Scanner(System.in);// 从键盘读取  
  25.                 try  
  26.                     {  
  27.                         // 创建客户端socket  
  28.                         socket = new Socket(Server.HOST, Server.PORT);  
  29.                         // 读取从客户端发来的消息  
  30.                         br = new BufferedReader(new InputStreamReader(  
  31.                                 socket.getInputStream()));  
  32.                         // 写入信息到服务器端  
  33.                         pw = new PrintWriter(  
  34.                                 new BufferedWriter(new OutputStreamWriter(  
  35.                                         socket.getOutputStream())));  
  36.                         new ReadServerMessage(br);// 从服务器读取消息  
  37.                         while (true)  
  38.                             {  
  39.                                 String temp = scanner.nextLine();// 从键盘读取一行  
  40.                                 pw.println(temp);// 写到服务器  
  41.                                 pw.flush();  
  42.                                 if (temp.equals("q"))  
  43.                                     break;  
  44.                             }  
  45.                     }  
  46.                 catch (Exception e)  
  47.                     {  
  48.                         e.printStackTrace();  
  49.                     }  
  50.                 finally  
  51.                     {  
  52.                         try  
  53.                             {  
  54.                                 System.out.println("close......");  
  55.                                 br.close();  
  56.                                 pw.close();  
  57.                                 socket.close();  
  58.                             }  
  59.                         catch (IOException e)  
  60.                             {  
  61.                                 e.printStackTrace();  
  62.                             }  
  63.                     }  
  64.   
  65.             }  
  66.   
  67.     }  
  68.   
  69. class ReadServerMessage extends Thread//从服务器读取消息  
  70. {  
  71.     BufferedReader bReader;  
  72.     Socket socket;  
  73.     public ReadServerMessage(BufferedReader br)  
  74.         {  
  75.             this.bReader = br;  
  76.             start();  
  77.         }  
  78.   
  79.     public void run()  
  80.         {  
  81.             String str = "";  
  82.             while (true)//一直等待着服务器的消息  
  83.                 {  
  84.                     try  
  85.                         {  
  86.                             str = bReader.readLine();  
  87.                             if (str.equals("q"))  
  88.                                 {  
  89.                                   bReader.close();  
  90.                                   socket.close();  
  91.                                   break;  
  92.                                 }  
  93.                         }  
  94.                     catch (IOException e)  
  95.                         {  
  96.                             e.printStackTrace();  
  97.                         }  
  98.                     System.out.println("Server Message:" + str);  
  99.                 }  
  100.         }  
  101. }  

服务器端:

[java] view plaincopy
  1. package com.lip;  
  2.   
  3. import java.io.IOException;  
  4. import java.net.ServerSocket;  
  5. import java.net.Socket;  
  6.   
  7. public class Server  
  8.     {  
  9.   
  10.         /** 
  11.          * Author:Lip Desc:SSD8_exercise1 
  12.          */  
  13.         public static int PORT = 8000;  
  14.         public static String HOST = "127.0.0.1";  
  15.   
  16.         public static void main(String[] args)  
  17.             {  
  18.                 ServerSocket serverSocket = null;  
  19.                 Socket socket = null;  
  20.                 try  
  21.                     {  
  22.                         serverSocket = new ServerSocket(PORT);  
  23.                         // 等待请求,无请求一直等待  
  24.                         while (true)  
  25.                             {  
  26.                                 System.out.println("Waiting Client");  
  27.                                 socket = serverSocket.accept();// 接受请求  
  28.                                 System.out.println("Client Conect!");  
  29.                                 new ThreadedServer(socket);  
  30.                             }  
  31.                     }  
  32.                 catch (Exception e)  
  33.                     {  
  34.                         try  
  35.                             {  
  36.                                 socket.close();  
  37.                             }  
  38.                         catch (IOException e1)  
  39.                             {  
  40.                                 e1.printStackTrace();  
  41.                             }  
  42.                     }  
  43.                 finally  
  44.                     {  
  45.                        try  
  46.                         {  
  47.                             serverSocket.close();  
  48.                         }  
  49.                     catch (IOException e)  
  50.                         {  
  51.                             e.printStackTrace();  
  52.                         }  
  53.                     }  
  54.   
  55.             }  
  56.   
  57.     }  

辅助线程:

[java] view plaincopy
  1. package com.lip;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.BufferedWriter;  
  5. import java.io.IOException;  
  6. import java.io.InputStreamReader;  
  7. import java.io.OutputStreamWriter;  
  8. import java.io.PrintWriter;  
  9. import java.net.Socket;  
  10. import java.util.Scanner;  
  11.   
  12. public class ThreadedServer extends Thread  
  13.     {  
  14.   
  15.         private Socket socket = null;  
  16.         private BufferedReader br = null;  
  17.         private PrintWriter pw = null;  
  18.         private Scanner scanner = null;  
  19.   
  20.         public ThreadedServer(Socket s)  
  21.             {  
  22.                 socket = s;  
  23.                 try  
  24.                     {  
  25.                         br = new BufferedReader(new InputStreamReader(  
  26.                                 socket.getInputStream()));  
  27.                         pw = new PrintWriter(  
  28.                                 new BufferedWriter(new OutputStreamWriter(  
  29.                                         socket.getOutputStream())), true);  
  30.                         scanner = new Scanner(System.in);// 从键盘读取数据  
  31.                         start();  
  32.                     }  
  33.                 catch (Exception e)  
  34.                     {  
  35.   
  36.                         e.printStackTrace();  
  37.                     }  
  38.             }  
  39.   
  40.         public void run()  
  41.             {  
  42.                 new ReadClientMessage(br, socket);//读取客户端数据  
  43.                 while (true)//向客户端发送数据  
  44.                     {  
  45.                         try  
  46.                             {  
  47.                                 pw.println(scanner.nextLine());  
  48.                                 pw.flush();  
  49.                             }  
  50.                         catch (Exception e)  
  51.                             {  
  52.                                 try  
  53.                                     {  
  54.                                         br.close();  
  55.                                         pw.close();  
  56.                                         socket.close();  
  57.                                     }  
  58.                                 catch (IOException e1)  
  59.                                     {  
  60.                                         e1.printStackTrace();  
  61.                                     }  
  62.                             }  
  63.                     }  
  64.             }  
  65.   
  66.     }  
  67.   
  68. class ReadClientMessage extends Thread  
  69.     {  
  70.         BufferedReader bReader;  
  71.         Socket socket;  
  72.         public ReadClientMessage(BufferedReader br,Socket s)  
  73.             {  
  74.                 this.bReader = br;  
  75.                 this.socket=s;  
  76.                 start();  
  77.             }  
  78.   
  79.         public void run()  
  80.             {  
  81.                 String str = "";  
  82.                 while (true)  
  83.                     {  
  84.                         try  
  85.                             {  
  86.                                 str = bReader.readLine();  
  87.                                 if (str.equals("q"))  
  88.                                     {  
  89.                                       bReader.close();  
  90.                                       socket.close();  
  91.                                       break;  
  92.                                     }  
  93.                             }  
  94.                         catch (IOException e)  
  95.                             {  
  96.                                 e.printStackTrace();  
  97.                             }  
  98.                         System.out.println("Client Message:" + str);  
  99.                     }  
  100.             }  
  101.     }  
0 0
原创粉丝点击