zoukankan      html  css  js  c++  java
  • java_day17_socket,tcp协议传输

    网络传输--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();

              }

            }

          }

        }

        

        

  • 相关阅读:
    三 zookeeper集群搭建
    一 linux 基本操作
    linux x64 安装 node
    docker nginx/1.7.4
    搭建Portainer可视化界面
    Swarm搭建 Docker集群
    在 Centos7.4上安装docker
    js 处理json对象数据
    生产者消费者模式及其存在的问题
    多线程
  • 原文地址:https://www.cnblogs.com/memo-song/p/8893031.html
Copyright © 2011-2022 走看看