练习一、一对多的服务器对客户端模式
Server:

import java.net.*;
import java.io.*;

public class Server implements Runnable{
    private ServerSocket serverSocket;

     public Server(){
            try{
                  serverSocket=new ServerSocket(1056);
                  System.out.println("server started......");

                   Thread thListener=new Thread(this);
                   thListener.start();

            }catch(IOException e){
                   e.printStackTrace();
            }
     }
     //始终监听客户端的请求的
     public void run(){
            while(true){
             try{
               Socket client=serverSocket.accept();
               System.out.println("有客户连接上服务器,客户的ip地址是"+client.getLocalAddress().getHostAddress());
               //为每个客户端的通信创建子线程
               SubThread sth=new SubThread(client);
             }catch(Exception e){
                 e.printStackTrace();
             }
            }
     }
     public static void main(String[] args){
            new Server();
     }
}

SubThread:

import java.io.*;
import java.net.*;

public class SubThread extends Thread{
      private Socket client;
      public SubThread(Socket client){
         this.client=client;
         this.start();
      }
      //实现跟客户端的信息交互
      public void run(){
          try{
            //2、接收客户端发过来的信息
            InputStream is=client.getInputStream();
            BufferedReader br=new BufferedReader(new InputStreamReader(is));
            String info=br.readLine();
            System.out.println("客户发过来的消息是"+info);
             //3、服务器向客户端发送信息:i accept your information
            OutputStream os=client.getOutputStream();
            PrintStream ps=new PrintStream(os);
            ps.println("i accept your information");
          }catch(Exception e){
              e.printStackTrace();
          }
      }
}

Client:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;

public class Client {
    private Socket clientSocket;

    public Client(){
              try{
                 clientSocket=new Socket("127.0.0.1",1056);
                 //因为服务器就在本机,所以ip地址是127.0.0.1,端口号是1056;如果这句话成功执行,就意味着已经连到了服务器
                 System.out.println("客户端连接上服务器了");
                 //1.客户端向服务器发送信息:hello,Server
                 OutputStream os=clientSocket.getOutputStream();
                 PrintStream ps= new PrintStream(os);
                 ps.println("hello server");
                 //4.客户端接收服务器端接收的信息
                 InputStream is=clientSocket.getInputStream();
                 BufferedReader br=new BufferedReader(new InputStreamReader(is));
                 String info=br.readLine();
                 System.out.println("服务器发送过来的消息是"+info);
              }catch(IOException e){
                  e.printStackTrace();
              }
    }

    public static void main(String[] args){
              new Client();
    }
}

JAVA——64.线程同步_System


练习二、对于练习一的补充,可以自定义发送的话

Server:

import java.net.*;
import java.io.*;

public class Server implements Runnable{
    private ServerSocket serverSocket;

     public Server(){
            try{
                  serverSocket=new ServerSocket(1056);
                  System.out.println("server started......");

                   Thread thListener=new Thread(this);
                   thListener.start();

            }catch(IOException e){
                   e.printStackTrace();
            }
     }
     //始终监听客户端的请求的
     public void run(){
            while(true){
             try{
               Socket client=serverSocket.accept();
               System.out.println("有客户连接上服务器,客户的ip地址是"+client.getLocalAddress().getHostAddress());
               //为每个客户端的通信创建子线程
               SubThread sth=new SubThread(client);
             }catch(Exception e){
                 e.printStackTrace();
             }
            }
     }
     public static void main(String[] args){
            new Server();
     }
}

Client:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;

public class Client {
    private Socket clientSocket;

    public Client(){
              try{
                 clientSocket=new Socket("127.0.0.1",1056);
                 //因为服务器就在本机,所以ip地址是127.0.0.1,端口号是1056;如果这句话成功执行,就意味着已经连到了服务器
                 System.out.println("客户端连接上服务器了");
                 //1.客户端向服务器发送信息:hello,Server
                 System.out.print("请输入你想对服务器说的信息:");
                 BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
                 String info1=br1.readLine();
                 OutputStream os=clientSocket.getOutputStream();
                 PrintStream ps= new PrintStream(os);
                 ps.println(info1);
                 //4.客户端接收服务器端接收的信息
                 InputStream is=clientSocket.getInputStream();
                 BufferedReader br=new BufferedReader(new InputStreamReader(is));
                 String info=br.readLine();
                 System.out.println("服务器发送过来的消息是"+info);
              }catch(IOException e){
                  e.printStackTrace();
              }
    }

    public static void main(String[] args){
              new Client();
    }
}

SubThread:

import java.io.*;
import java.net.*;

public class SubThread extends Thread{
      private Socket client;
      public SubThread(Socket client){
         this.client=client;
         this.start();
      }
      //实现跟客户端的信息交互
      public void run(){
          try{
            //2、接收客户端发过来的信息
            InputStream is=client.getInputStream();
            BufferedReader br=new BufferedReader(new InputStreamReader(is));
            String info=br.readLine();
            System.out.println("客户发过来的消息是"+info);
             //3、服务器向客户端发送信息:i accept your information
            System.out.print("请输入你想对客户说的信息:");
            BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
            String info1=br1.readLine();
            OutputStream os=client.getOutputStream();
            PrintStream ps=new PrintStream(os);
            ps.println(info1);
          }catch(Exception e){
              e.printStackTrace();
          }
      }
}

JAVA——64.线程同步_客户端_02