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握手的基本原理。实际应用中,可以在此基础上进行扩展,如添加异常处理、日志记录、配置管理等功能,以满足特定需求。


相关文章
|
10月前
|
网络协议 Java
SpringBoot快速搭建TCP服务端和客户端
由于工作需要,研究了SpringBoot搭建TCP通信的过程,对于工程需要的小伙伴,只是想快速搭建一个可用的服务.其他的教程看了许多,感觉讲得太复杂,很容易弄乱,这里我只讲效率,展示快速搭建过程。
999 58
|
10月前
|
编解码 网络协议 算法
SpringBoot × TCP 极速开发指南:工业级TCP通信协议栈操作手册
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程的SpringBoot × TCP 极速开发指南,废话不多说直接开始~
706 0
|
网络协议 Java 物联网
Spring Boot与Netty打造TCP服务端(解决粘包问题)
Spring Boot与Netty打造TCP服务端(解决粘包问题)
2024 2
|
消息中间件 缓存 网络协议
使用 Netty+SpringBoot 打造的 TCP 长连接通讯方案 上
使用 Netty+SpringBoot 打造的 TCP 长连接通讯方案 上
使用 Netty+SpringBoot 打造的 TCP 长连接通讯方案 上
|
消息中间件 缓存 网络协议
使用 Netty+SpringBoot 打造的 TCP 长连接通讯方案 下
使用 Netty+SpringBoot 打造的 TCP 长连接通讯方案 下
|
5月前
|
JavaScript Java 关系型数据库
基于springboot的项目管理系统
本文探讨项目管理系统在现代企业中的应用与实现,分析其研究背景、意义及现状,阐述基于SSM、Java、MySQL和Vue等技术构建系统的关键方法,展现其在提升管理效率、协同水平与风险管控方面的价值。
|
5月前
|
搜索推荐 JavaScript Java
基于springboot的儿童家长教育能力提升学习系统
本系统聚焦儿童家长教育能力提升,针对家庭教育中理念混乱、时间不足、个性化服务缺失等问题,构建科学、系统、个性化的在线学习平台。融合Spring Boot、Vue等先进技术,整合优质教育资源,提供高效便捷的学习路径,助力家长掌握科学育儿方法,促进儿童全面健康发展,推动家庭和谐与社会进步。
|
5月前
|
JavaScript Java 关系型数据库
基于springboot的古树名木保护管理系统
本研究针对古树保护面临的严峻挑战,构建基于Java、Vue、MySQL与Spring Boot技术的信息化管理系统,实现古树资源的动态监测、数据管理与科学保护,推动生态、文化与经济可持续发展。
|
5月前
|
监控 安全 JavaScript
2025基于springboot的校车预定全流程管理系统
针对传统校车管理效率低、信息不透明等问题,本研究设计并实现了一套校车预定全流程管理系统。系统采用Spring Boot、Java、Vue和MySQL等技术,实现校车信息管理、在线预定、实时监控等功能,提升学校管理效率,保障学生出行安全,推动教育信息化发展。