网络传输--socket

一,socket

  1.socket 通常也称作”套接字“,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过”套接字”向网络发出请求或者应答网络请求

  2.客户端接收

    public class ReadThread extends Thread{ //创建一个接收线程,继承Thread线程

      private Socket socket; //创建socket对象

      public ReadThread(Socket socket){ //构造方法

        this.socket = socket;

      }

      @override

      public void run(){  //覆写run方法

      BufferedReader reader = null; //设置读取字符流为空

      try{

        InputStream is = socket.getInputStream;//创建字节流对象

        reader = new BufferReader(new InputStreamReader(is));//创建对象

        String line = "";//创建一个空字符串

        while((line = reader.readerLine()) != null){  //循环读取数据

        System.out.println(line); //打印数据

        }

      }catch (IOException e) { //捕获异常

        e.printStackTrace();//在控制台输出异常情况

      }finally{

        if(reader != null){

          try{

            reader.close();//关闭字符流

            socket.colse();//关闭套接字

          }catch (IOException e){

            e.printStackTrace();

          }

        }

         }

      }

    }

  3,客户端发送数据

    Socket socket = new Socket();//创建socket对象,这个对象会自动绑定本地的一个没有被占用的端口号

    PrinterWriter pw = null;//创建字符流输出的对象并赋值为null

    Scanner scanner = new Scanner(System.in);//

    try{

      //客户端连接到远程服务器需要指定服务器的ip地址和端口号

      socket.connect(new InetSocketAddress("127.0.0.1",2333));

      new ReadThread(socket).start();//开启线程读取数据

      //输出数据

      OutputSream os = socket.getOutputStream();//socket的输出流赋值给字节流变量

      pw = new PrintWriter(new OutputStreamWriter(os));//创建字符流对象

      while(true){

        String line = scanner.nextLine();//键盘输入信心

        pw.println(line);//输出给服务端的信息

        pw.flush();//清空缓冲区的数据流

      }

      

    }

  4,服务器端--并发ECHO服务器

    Echo是一种小型服务器,将客户端的数据原封不动发回给客户端,这样客户端可判定服务器是否好用

    public class EchoThread extends Thread{ //创建服务器线程,继承Thread类

      private Socket client;//定义了一个Socket类型变量

      public EchoThread(Socket client){ //构造方法

        this.client = client;

      }

      @override

      public void run(){  //覆写父类方法

        BufferedReader reader = null;

        PrintWriter pw = null;

        try{

          OutputStream os = client.getOutputStream();//socket的输出流赋值给os

          InputStream is = client.getInputStream();//socket的输入流赋值给is

          reader = new BufferedReader(new InputStreamReader(is));//创建输入字符流对象

          is = new PrinterWriter(new OutputStreamWriter(os));//创建输出字符流对象

          String line = "";//创建空字符串

          while((line= reader.readerLine()) != null){

            String echo = "ECHO" + line;

            pw.println(echo);

            pw.flush();

          }

        }

      }

    }

    

    

posted on 2018-04-20 19:11  北冥丶中郎将  阅读(180)  评论(0编辑  收藏  举报