• 【Java 基础篇】Java TCP通信详解


    在这里插入图片描述

    TCP(Transmission Control Protocol)是一种面向连接的、可靠的网络传输协议,它提供了端到端的数据传输和可靠性保证。TCP通信适用于对数据传输的可靠性和完整性要求较高的场景,如文件传输、网页浏览等。本文将详细介绍Java中如何使用TCP协议进行网络通信,包括TCP套接字、服务器和客户端的创建、数据传输等。

    1. TCP基础知识

    1.1. TCP工作原理

    TCP是一种面向连接的协议,它的工作原理如下:

    1. 建立连接:通信双方首先建立连接,进行三次握手,确保双方都准备好进行数据传输。
    2. 数据传输:建立连接后,数据可以在通信双方之间传输。TCP保证了数据的可靠性和顺序性。
    3. 断开连接:通信完成后,可以断开连接,进行四次挥手,释放资源。

    1.2. TCP的特点

    • 可靠性:TCP保证数据的可靠性,数据不会丢失,且按顺序传输。
    • 面向连接:TCP需要建立连接和维护状态,确保通信双方都准备好进行数据传输。
    • 高效性:TCP的头部开销较大,传输效率相对较低。
    • 适用性广泛:TCP适用于对数据传输可靠性要求较高的应用场景。

    2. Java TCP编程基础

    Java提供了用于TCP编程的相关类,主要位于java.net包中。下面是TCP编程的基本步骤:

    2.1. 创建TCP服务器

    使用ServerSocket类创建TCP服务器,并绑定到指定的端口。

    import java.net.*;
    
    • 1
    // 创建TCP服务器并绑定到指定端口
    int port = 8888;
    ServerSocket serverSocket = new ServerSocket(port);
    
    • 1
    • 2
    • 3

    2.2. 创建TCP客户端

    使用Socket类创建TCP客户端,并指定连接的服务器地址和端口。

    // 创建TCP客户端并连接到服务器
    String serverAddress = "localhost";
    int serverPort = 8888;
    Socket clientSocket = new Socket(serverAddress, serverPort);
    
    • 1
    • 2
    • 3
    • 4

    2.3. 数据传输

    在TCP通信中,可以使用输入流和输出流进行数据传输。服务器和客户端都可以使用InputStreamOutputStream来发送和接收数据。

    服务器端发送数据示例:

    OutputStream outputStream = clientSocket.getOutputStream();
    String message = "Hello, TCP!";
    outputStream.write(message.getBytes());
    
    • 1
    • 2
    • 3

    客户端接收数据示例:

    InputStream inputStream = serverSocket.getInputStream();
    byte[] buffer = new byte[1024];
    int bytesRead = inputStream.read(buffer);
    String receivedMessage = new String(buffer, 0, bytesRead);
    System.out.println("收到消息:" + receivedMessage);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.4. 关闭连接

    在完成TCP通信后,需要关闭连接以释放资源。

    // 关闭TCP服务器
    serverSocket.close();
    
    // 关闭TCP客户端
    clientSocket.close();
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3. Java TCP服务器和客户端示例

    下面是一个简单的Java TCP服务器和客户端示例:

    TCP服务器端代码:

    import java.io.*;
    import java.net.*;
    
    public class TCPServer {
        public static void main(String[] args) {
            try {
                // 创建TCP服务器并绑定到指定端口
                int port = 8888;
                ServerSocket serverSocket = new ServerSocket(port);
                System.out.println("服务器已启动,等待客户端连接...");
    
                while (true) {
                    // 等待客户端连接
                    Socket clientSocket = serverSocket.accept();
                    System.out.println("客户端连接成功");
    
                    // 创建输入流和输出流
                    InputStream inputStream = clientSocket.getInputStream();
                    OutputStream outputStream = clientSocket.getOutputStream();
    
                    // 读取客户端发送的数据
                    byte[] buffer = new byte[1024];
                    int bytesRead = inputStream.read(buffer);
                    String receivedMessage = new String(buffer, 0, bytesRead);
                    System.out.println("收到消息:" + receivedMessage);
    
                    // 发送响应数据给客户端
                    String responseMessage = "Hello, Client!";
                    outputStream.write(responseMessage.getBytes());
    
                    // 关闭连接
                    clientSocket.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    TCP客户端代码:

    import java.io.*;
    import java.net.*;
    
    public class TCPClient {
        public static void main(String[] args) {
            try {
                // 创建TCP客户端并连接到服务器
                String serverAddress = "localhost";
                int serverPort = 8888;
                Socket clientSocket = new Socket(serverAddress, serverPort);
    
                // 创建输入流和输出流
                InputStream inputStream = clientSocket.getInputStream();
                OutputStream outputStream = clientSocket.getOutputStream();
    
                // 发送数据给服务器
                String message = "Hello, Server!";
                outputStream.write(message.getBytes());
    
                // 读取服务器响应的数据
                byte[] buffer = new byte[1024];
                int bytesRead = inputStream.read(buffer);
                String receivedMessage = new String(buffer, 0, bytesRead);
                System.out.println("收到服务器响应:" + receivedMessage);
    
                // 关闭连接
                clientSocket.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    4. 总结

    本文介绍了Java中如何使用TCP协议进行网络通信,包括TCP的基础知识、TCP编程的基本步骤、创建TCP服务器和客户端、数据传输等内容。通过学习本文,您可以开始使用TCP协议来构建自己的网络应用程序,实现可靠的数据传输。希望本文能够帮助您更好地理解和应用Java中的TCP通信。

  • 相关阅读:
    【AAAI2023】Spatial-Spectral Transformer for Hyperspectral Image Denoising
    Java OutputStream类简介说明
    Node.js基础---Express
    一文详解Linux内核数据结构之kfifo
    【C++面向对象侯捷】5.操作符重载与临时对象
    【数据结构】图的遍历:广度优先(BFS),深度优先(DFS)
    探索ChatGPT在学术写作中的应用与心得
    淘宝账单导出的手工操作
    一个集成的BurpSuite漏洞探测插件1.1
    应用架构的演进 I 使用无服务器保证数据一致性
  • 原文地址:https://blog.csdn.net/qq_21484461/article/details/133151725