• TCP协议发送/接收数据实现[TCP/IP协议入门]


      • 背景

        Demo 基于 Java 实现简单的 TCP 传输 / 接收协议

        词义百科

        TCP 协议 (传输控制协议)

        TCP 协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,再传输数据。它提供了两台计算机之间的可靠无差错的数据传输。在 TCP 连接中必须要明确客户端与服务器,由客户端向服务器发送连接请求,每次连接的创建都需要经过 “三次握手”
        三次握手:TCP 协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠

        • 第一次握手:客户端向服务器发出连接请求,等待服务器确认
        • 第二次握手:服务器向客户端回送一个响应,通知客户端收到连接请求
        • 第三次握手:客户端再次向服务器发送确认信息,确认连接
          完成三次握手,连接建立后,客户端和服务器可以开始数据传输,由于这种面向连接的特性。TCP 协议可以保证传输数据的安全,所以应用十分广泛,比如:文件上传、文件下载、浏览页面

          三次握手示意图

          TCP协议发送/接收数据实现[TCP/IP协议入门]

          四次挥手示意图

          TCP协议发送/接收数据实现[TCP/IP协议入门]

        发送端 Demo

        package tcp;
        
        import java.io.*;
        import java.net.InetAddress;
        import java.net.Socket;
        
        /**
         * TCP 发送数据步骤
         * 1.创建客户端socket对象
         * 2.获取输出流,写数据
         * 3.释放资源
         */
        public class ClientDemo {
            public static void main(String[] args) throws IOException {
                // 创建客户端socket对象
                // 创建流套接字并将其连接到指定IP地址的指定端口号
                Socket socket = new Socket(InetAddress.getByName("192.168.31.162"),9002);
                // 获取输出流,写数据
                System.out.println("input you data");
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                // 封装输出流对象
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                String line ;
                //获取输出流,写数据;
                while ((line = br.readLine()) != null){
                    // 获取输出流对象
                    bw.write(line);
                    bw.newLine();
                    bw.flush();
                }
                // 释放资源
                socket.close();
            }
        }

        接收端 Demo

        package tcp;
        
        import java.io.*;
        import java.net.Socket;
        import java.net.ServerSocket;
        /**
         * TCP 接收数据步骤
         * 1.创建服务端socket对象
         * 2.监听客户端连接,返回一个socket对象
         * 3.获取输入流,读数据,并把数据显示在控制台
         * 4.释放资源
         */
        public class ServerDemo {
            public static void main(String[] args) throws IOException {
                // 创建服务端socket对象
                ServerSocket serverSocket = new ServerSocket(9002);
                // 监听客户端连接,返回一个socket对象
                Socket socket = serverSocket.accept();
                // 获取输入流,读数据,并把数据显示在控制台
                BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String line;
                while ((line = br.readLine()) != null){
                    System.out.println(line);
                }
                // 释放资源
                serverSocket.close();
            }
        }

        run 控制台

        TCP协议发送/接收数据实现[TCP/IP协议入门]

        TCP协议发送/接收数据实现[TCP/IP协议入门]

        注:启动客户端服务必须先启动服务端服务,否则会抛出异常

  • 相关阅读:
    基本类型
    匿名对象和匿名方法
    定时任务@SChedule详解
    docker的配置和安装
    数据库的学习
    docker的学习
    nginx的学习
    yyyy-MM-dd HH:mm:ss.SS的大小写的含义
    单例模式的学习
    layer的学习
  • 原文地址:https://www.cnblogs.com/wangsky/p/16288956.html
Copyright © 2020-2023  润新知