Client(客户端) / Server(服务端) 程序【Socket编程3】

1. 客户端程序

import java.io.*;

import java.net.*;

public class Client {

  public static void main(String args[]) {

     try{

       Socket socket=new Socket("127.0.0.1",4700);

       //向本机的4700端口发出客户请求

       BufferedReader in=new BufferedReader(new InputStreamReader(System.in));

        //由系统标准输入设备构造BufferedReader对象

       PrintWriter os=new PrintWriter(socket.getOutputStream());

        //由Socket对象得到输出流,并构造PrintWriter对象

        BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));

        //由Socket对象得到输入流,并构造相应的BufferedReader对象
                         //从系统标准输入读入一字符串
        String readline=sin.readLine(); 

       while(!readline.equals("bye")){

        //若从标准输入读入的字符串为 "bye"则停止循环

          os.println(readline);

          //将从系统标准输入读入的字符串输出到Server

          os.flush();

          //刷新输出流,使Server马上收到该字符串

          System.out.println("Client:"+readline);

          //在系统标准输出上打印读入的字符串

          System.out.println("Server:"+is.readLine());

          //从Server读入一字符串,并打印到标准输出上

          readline=sin.readLine(); //从系统标准输入读入一字符串

        } //继续循环

        os.close(); //关闭Socket输出流

        is.close(); //关闭Socket输入流

        socket.close(); //关闭Socket

      }catch(Exception e) {

        System.out.println("Error"+e); //出错,则打印出错信息

      }

  }

}    
Client

2. 服务器端程序

      import java.io.*;

  import java.net.*;

  import java.applet.Applet;

  public class TalkServer{

    public static void main(String args[]) {

                      ServerSocket server=null;
                      Socket socket=null;
                      String line;

      try{

          //创建一个ServerSocket在端口4700监听客户请求
                       server=new ServerSocket(4700);

                       //使用accept()阻塞等待客户请求,有客户
         //请求到来则产生一个Socket对象,并继续执行

         socket=server.accept();
        
                       //由Socket对象得到输入流,并构造相应的BufferedReader对象
        BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));

                  //由Socket对象得到输出流,并构造PrintWriter对象
        PrintWriter os=newPrintWriter(socket.getOutputStream());

                        //由系统标准输入设备构造BufferedReader对象
        BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));

                        //在标准输出上打印从客户端读入的字符串
        System.out.println("Client:"+is.readLine());

        //从标准输入读入一字符串
        line=sin.readLine();


        //如果该字符串为 "bye",则停止循环

        while(!line.equals("bye")){

          //向客户端输出该字符串
          os.println(line);

          //刷新输出流,使Client马上收到该字符串
          os.flush();


          //在系统标准输出上打印读入的字符串
          System.out.println("Server:"+line);

          //从Client读入一字符串,并打印到标准输出上
          System.out.println("Client:"+is.readLine());

          //从系统标准输入读入一字符串
          line=sin.readLine();

        }  //继续循环

      }catch(Exception e){

        System.out.println("Error:"+e);

        //出错,打印出错信息

      }finally{
                        os.close(); //关闭Socket输出流

        is.close(); //关闭Socket输入流

        socket.close(); //关闭Socket

        server.close(); //关闭ServerSocket
                  }

    }

  }                                     
Server

 

支持多客户的client/server程序

  前面的Client/Server程序只能实现Server和一个客户的对话。在实际应用中,往往是在服务器上运行一个永久的程序,它可以接收来自其他多个客户端的请求,提供相应的服务。为了实现在服务器方给多个客户提供服务的功能,需要对上 面的程序进行改造,利用多线程实现多客户机制。服务器总是在指定的端口上监听是否有客户请求,一旦监听到客户请求,服务器就会启动一个专门的服务线程来响 应该客户的请求,而服务器本身在启动完线程之后马上又进入监听状态,等待下一个客户的到来。

posted @ 2017-05-11 21:53  微微一笑抽了筋  阅读(765)  评论(0编辑  收藏  举报