springboot 实现tcp多次握手

简介: springboot 实现tcp多次握手

实现TCP多次握手的Java Spring Boot示例涉及几个关键部分:服务端和客户端。以下是一个简单的示例,包括TCP连接的建立、数据传输和连接关闭。示例代码包括服务端和客户端两个部分。

1. 服务端实现

首先,我们创建一个简单的Spring Boot应用程序来实现TCP服务器。

Maven依赖

pom.xml中添加Spring Boot Starter依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
</dependencies>
服务端代码

创建一个Spring Boot应用程序类和一个TCP服务类:

package com.example.tcpserver;
 
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
 
@SpringBootApplication
public class TcpServerApplication implements CommandLineRunner {
 
    public static void main(String[] args) {
        SpringApplication.run(TcpServerApplication.class, args);
    }
 
    @Override
    public void run(String... args) throws Exception {
        int port = 9090;
        try (ServerSocket serverSocket = new ServerSocket(port)) {
            System.out.println("Server is listening on port " + port);
 
            while (true) {
                Socket socket = serverSocket.accept();
                new ServerThread(socket).start();
            }
        } catch (IOException ex) {
            System.out.println("Server exception: " + ex.getMessage());
            ex.printStackTrace();
        }
    }
}
ServerThread类

为了处理每个客户端连接,我们创建一个ServerThread类:

package com.example.tcpserver;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
 
public class ServerThread extends Thread {
    private Socket socket;
 
    public ServerThread(Socket socket) {
        this.socket = socket;
    }
 
    public void run() {
        try (BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
             PrintWriter output = new PrintWriter(socket.getOutputStream(), true)) {
 
            String text;
 
            while ((text = input.readLine()) != null) {
                System.out.println("Received: " + text);
                output.println("Server: " + text);
            }
        } catch (IOException ex) {
            System.out.println("Server exception: " + ex.getMessage());
            ex.printStackTrace();
        } finally {
            try {
                socket.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
}

2. 客户端实现

现在我们实现一个简单的TCP客户端来连接到我们的服务器。

客户端代码

创建一个Spring Boot应用程序类和一个TCP客户端类:

package com.example.tcpclient;
 
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
 
@SpringBootApplication
public class TcpClientApplication implements CommandLineRunner {
 
    public static void main(String[] args) {
        SpringApplication.run(TcpClientApplication.class, args);
    }
 
    @Override
    public void run(String... args) throws Exception {
        String hostname = "localhost";
        int port = 9090;
 
        try (Socket socket = new Socket(hostname, port)) {
            PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
            BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            Scanner scanner = new Scanner(System.in);
 
            String text;
 
            do {
                System.out.print("Enter message: ");
                text = scanner.nextLine();
                output.println(text);
 
                String response = input.readLine();
                System.out.println(response);
            } while (!text.equals("bye"));
 
        } catch (IOException ex) {
            System.out.println("Client exception: " + ex.getMessage());
            ex.printStackTrace();
        }
    }
}

3. 运行程序

编写好代码后,分别运行TcpServerApplicationTcpClientApplication类。客户端将连接到服务器并可以发送消息,服务器会回显接收到的消息。

结论

上述代码展示了如何使用Java Spring Boot实现一个简单的TCP服务器和客户端。客户端和服务器通过TCP连接进行通信,演示了TCP握手的基本原理。实际应用中,可以在此基础上进行扩展,如添加异常处理、日志记录、配置管理等功能,以满足特定需求。


相关文章
|
7天前
|
网络协议
最简单的tcp客户端和服务端 还有udp
最简单的tcp客户端和服务端 还有udp
|
2月前
|
网络协议
TCP实现原理和为什么需要三次握手?
面向连接:是指TCP是通过服务端和客户端进行连接的协议 面向字节流:TCP服务端和客户端之间的数据通讯是通过字节流数据传输的
|
5月前
|
网络协议 前端开发 Java
Websocket (帧格式, 握手过程, Spring 中使用 WebScoket 协议)
Websocket (帧格式, 握手过程, Spring 中使用 WebScoket 协议)
53 4
|
5月前
|
网络协议 Java 物联网
Spring Boot与Netty打造TCP服务端(解决粘包问题)
Spring Boot与Netty打造TCP服务端(解决粘包问题)
731 1
|
5月前
|
网络协议 架构师 Go
实战TCP三次握手
实战TCP三次握手
33 0
|
网络协议 网络性能优化 网络架构
JavaEE-轻松了解网络原理之TCP协议
JavaEE-轻松了解网络原理之TCP协议
|
消息中间件 缓存 网络协议
使用 Netty+SpringBoot 打造的 TCP 长连接通讯方案 上
使用 Netty+SpringBoot 打造的 TCP 长连接通讯方案 上
使用 Netty+SpringBoot 打造的 TCP 长连接通讯方案 上
|
消息中间件 缓存 网络协议
使用 Netty+SpringBoot 打造的 TCP 长连接通讯方案 下
使用 Netty+SpringBoot 打造的 TCP 长连接通讯方案 下
|
缓存 网络协议 算法
【web】TCP/UDP协议详解(字节二面:TCP三次握手、四次挥手)
本文介绍了计算机网络UDP/TCP协议格式和特点、重点介绍保证TCP可靠性的 确认应答机制(数据编码+超时重传)、连接管理机制(TCP三次握手、四次挥手)、流量控制机制、拥塞控制机制、快重传、延时应答、捎带应答机制等。
187 0
|
网络协议
Netty之第一次 TCP 连接时发生了什么
Netty之第一次 TCP 连接时发生了什么
165 0