zoukankan      html  css  js  c++  java
  • java Socket和ServerSocket多线程编程

    这是在一本java教材上看到的,做了点修改。具体本教材记不清楚了,Sorry.放在这里,只是让自己需要的时候能够容易找到。 

         程序分两部分,服务端和客户端。先把服务端运行起来,在运行客户端。整个过程就是客户端想服务端发送String,服务端再返回。客户端的String由键盘输入得到。 

    服务器端。 

    Java代码  收藏代码
    1. package net.tcp;  
    2.   
    3. import java.io.BufferedReader;  
    4. import java.io.IOException;  
    5. import java.io.InputStreamReader;  
    6. import java.io.PrintWriter;  
    7. import java.net.ServerSocket;  
    8. import java.net.Socket;  
    9.   
    10. public class Server extends Thread  
    11. {  
    12.   
    13.     ServerSocket server = null;  
    14.     Socket sk = null;  
    15.     BufferedReader rdr = null;  
    16.     PrintWriter wtr = null;  
    17.   
    18.     public Server()  
    19.     {  
    20.         try  
    21.         {  
    22.             server = new ServerSocket(1987);  
    23.         }  
    24.         catch (IOException e)  
    25.         {  
    26.             e.printStackTrace();  
    27.         }  
    28.     }  
    29.   
    30.     public void run()  
    31.     {  
    32.   
    33.         while (true)  
    34.             {  
    35.                 System.out.println("Listenning...");  
    36.                 try  
    37.                 {  
    38. //                  每个请求交给一个线程去处理  
    39.                     sk = server.accept();  
    40.                     ServerThread th = new ServerThread(sk);  
    41.                     th.start();  
    42.                     sleep(1000);  
    43.                 }  
    44.                 catch (Exception e)  
    45.                 {  
    46.                     e.printStackTrace();  
    47.                 }  
    48.                   
    49.             }  
    50.     }  
    51.   
    52.     public static void main(String [] args)  
    53.     {  
    54.         new Server().start();  
    55.     }  
    56.   
    57.       
    58.       
    59.       
    60.       
    61.       
    62.     class ServerThread extends Thread  
    63.     {  
    64.   
    65.         Socket sk = null;  
    66.         public ServerThread(Socket sk)  
    67.         {  
    68.             this.sk = sk;  
    69.         }  
    70.         public void run()  
    71.         {  
    72.             try  
    73.             {  
    74.                 wtr = new PrintWriter(sk.getOutputStream());  
    75.                 rdr = new BufferedReader(new InputStreamReader(sk  
    76.                         .getInputStream()));  
    77.                 String line = rdr.readLine();  
    78.                 System.out.println("从客户端来的信息:" + line);  
    79. //              特别,下面这句得加上     “ ”,  
    80.                 wtr.println("你好,服务器已经收到您的信息!'" + line + "' ");  
    81.                 wtr.flush();  
    82.                 System.out.println("已经返回给客户端!");  
    83.             }  
    84.             catch (IOException e)  
    85.             {  
    86.                 e.printStackTrace();  
    87.             }  
    88.               
    89.         }  
    90.           
    91.     }  
    92.   
    93. }  



    客户端: 

    Java代码  收藏代码
      1. package net.tcp;  
      2.   
      3. import java.io.BufferedReader;  
      4. import java.io.BufferedWriter;  
      5. import java.io.InputStreamReader;  
      6. import java.io.OutputStreamWriter;  
      7. import java.io.PrintWriter;  
      8. import java.net.Socket;  
      9.   
      10. public class Client extends Thread  
      11. {  
      12.   
      13.     Socket sk = null;  
      14.     BufferedReader reader = null;  
      15.     PrintWriter wtr = null;  
      16.     BufferedReader keyin = null;  
      17.   
      18.     public Client()  
      19.     {  
      20.         keyin = new BufferedReader(new InputStreamReader(System.in));  
      21.         try  
      22.         {  
      23.             sk = new Socket("127.0.0.1", 1987);  
      24.         }  
      25.         catch (Exception e)  
      26.         {  
      27.             e.printStackTrace();  
      28.         }  
      29.   
      30.     }  
      31.   
      32.     public void run()  
      33.     {  
      34.         try  
      35.         {  
      36.             reader = new BufferedReader(new InputStreamReader(sk  
      37.                     .getInputStream()));  
      38.             wtr = new PrintWriter(sk.getOutputStream());  
      39.             String get = keyin.readLine();  
      40.   
      41.             while (true)  
      42.             {  
      43.                 if (get != null & get.length() > 0)  
      44.                 {  
      45.                     wtr.println(get);  
      46.                     wtr.flush();  
      47. //                  wtr.close();  
      48. //                  System.out.println(get + "发送完毕");  
      49.                 }  
      50.                 if (reader != null)  
      51.                 {  
      52.                     String line = reader.readLine();  
      53.                     System.out.println("从服务器来的信息:" + line);  
      54.                       
      55.                 }  
      56.                   
      57.             }  
      58.         }  
      59.         catch (Exception e)  
      60.         {  
      61.             e.printStackTrace();  
      62.         }  
      63.     }  
      64.   
      65.     public static void main(String [] args)  
      66.     {  
      67.         new Client().start();  
      68.     }  
      69. }  
  • 相关阅读:
    poj 1392 Ouroboros Snake
    poj 1780 Code
    poj 2513 Colored Sticks
    ZOJ 1455 Schedule Problem(差分约束系统)
    poj 3169 Layout (差分约束)
    ZOJ1260/POJ1364国王(King)
    poj 1201/zoj 1508 intervals 差分约束系统
    zoj 2770 Burn the Linked Camp (差分约束系统)
    构造函数和析构函数
    PHP面向对象——静态属性和静态方法
  • 原文地址:https://www.cnblogs.com/hd92/p/13553724.html
Copyright © 2011-2022 走看看