java Socket和ServerSocket多线程编程



java Socket和ServerSocket多线程编程

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

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

服务器端。

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

客户端:

Java代码  收藏代码
  1. package net.tcp;
  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.InputStreamReader;
  5. import java.io.OutputStreamWriter;
  6. import java.io.PrintWriter;
  7. import java.net.Socket;
  8. public class Client extends Thread
  9. {
  10.     Socket sk = null;
  11.     BufferedReader reader = null;
  12.     PrintWriter wtr = null;
  13.     BufferedReader keyin = null;
  14.     public Client()
  15.     {
  16.         keyin = new BufferedReader(new InputStreamReader(System.in));
  17.         try
  18.         {
  19.             sk = new Socket(“127.0.0.1″, 1987);
  20.         }
  21.         catch (Exception e)
  22.         {
  23.             e.printStackTrace();
  24.         }
  25.     }
  26.     public void run()
  27.     {
  28.         try
  29.         {
  30.             reader = new BufferedReader(new InputStreamReader(sk
  31.                     .getInputStream()));
  32.             wtr = new PrintWriter(sk.getOutputStream());
  33.             String get = keyin.readLine();
  34.             while (true)
  35.             {
  36.                 if (get != null & get.length() > 0)
  37.                 {
  38.                     wtr.println(get);
  39.                     wtr.flush();
  40. //                  wtr.close();
  41. //                  System.out.println(get + ”发送完毕”);
  42.                 }
  43.                 if (reader != null)
  44.                 {
  45.                     String line = reader.readLine();
  46.                     System.out.println(“从服务器来的信息:” + line);
  47.                 }
  48.             }
  49.         }
  50.         catch (Exception e)
  51.         {
  52.             e.printStackTrace();
  53.         }
  54.     }
  55.     public static void main(String [] args)
  56.     {
  57.         new Client().start();
  58.     }
  59. }