zoukankan      html  css  js  c++  java
  • [Java ] 通信

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

    下面贴出我的代码:

    客户端:

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


    现在就可以实现多客户端和服务器端通信了 ,不过客户端和客户端的通信暂时还没有搞懂,还要继续去学习

  • 相关阅读:
    利用guava来实现本地的cache缓存
    加减乘除工具类BigDecimalUtil
    linux使用apache发布静态html网页
    为什么从pycharm中打开的html文件会显示404?
    unittest测试框架生成可视化测试报告-BeautifulReport
    python虚拟环境迁移
    linux查看系统版本
    Webhook到底是个啥?
    钩子函数和回调函数的区别
    LookupError: "gw_lt" is not among the defined enum values
  • 原文地址:https://www.cnblogs.com/feifeidxl/p/4745850.html
Copyright © 2011-2022 走看看