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

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot中,可以使用Netty框架来实现TCP连接。下面是一个简单的示例: 1.添加依赖 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.25.Final</version> </dependency> ``` 2.创建TCP服务器 ```java @Component public class TcpServer { private static final Logger LOGGER = LoggerFactory.getLogger(TcpServer.class); @Value("${tcp.port}") private int port; @Autowired private TcpServerHandler tcpServerHandler; @PostConstruct public void start() throws InterruptedException { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap serverBootstrap = new ServerBootstrap(); serverBootstrap.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .option(ChannelOption.SO_BACKLOG, 128) .childOption(ChannelOption.SO_KEEPALIVE, true) .childHandler(new ChannelInitializer<SocketChannel>() { @Override public void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(tcpServerHandler); } }); ChannelFuture channelFuture = serverBootstrap.bind(port).sync(); LOGGER.info("TCP服务器已启动,监听端口:{}", port); channelFuture.channel().closeFuture().sync(); } finally { workerGroup.shutdownGracefully(); bossGroup.shutdownGracefully(); } } } ``` 3.创建TCP服务器处理程序 ```java @Component @ChannelHandler.Sharable public class TcpServerHandler extends ChannelInboundHandlerAdapter { private static final Logger LOGGER = LoggerFactory.getLogger(TcpServerHandler.class); @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { ByteBuf byteBuf = (ByteBuf) msg; try { byte[] bytes = new byte[byteBuf.readableBytes()]; byteBuf.getBytes(0, bytes); String message = new String(bytes, Charset.forName("UTF-8")); LOGGER.info("接收到消息:{}", message); // TODO 处理消息 } finally { byteBuf.release(); } } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { LOGGER.error("TCP服务器发生异常:", cause); ctx.close(); } } ``` 4.配置端口号 在application.properties文件中添加以下配置: ``` tcp.port=8888 ``` 以上代码实现了一个简单的TCP服务器,可以接收客户端发送的消息并进行处理。需要注意的是,这只是一个示例,实际应用中需要根据具体需求进行修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值