java - 如何在 spring boot 中创建一个 Tcp 连接来接受连接?

标签 java spring-boot tcp spring-integration

我已经通过了this并了解我需要创建一个 TcpReceivingChannelAdapter 来接受连接。 但我不知道如何继续。

有人可以指导我吗?

最佳答案

参见 tcp-client-server sample一些使用 XML 配置的指针。

用于Java配置;这是一个简单的 Spring Boot 应用程序...

package com.example;

import java.net.Socket;

import javax.net.SocketFactory;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.annotation.Transformer;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.ip.tcp.TcpReceivingChannelAdapter;
import org.springframework.integration.ip.tcp.connection.AbstractServerConnectionFactory;
import org.springframework.integration.ip.tcp.connection.TcpNetServerConnectionFactory;
import org.springframework.integration.transformer.ObjectToStringTransformer;
import org.springframework.messaging.MessageChannel;

@SpringBootApplication
public class So39290834Application {

    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext context = SpringApplication.run(So39290834Application.class, args);
        Socket socket = SocketFactory.getDefault().createSocket("localhost", 9999);
        socket.getOutputStream().write("foo\r\n".getBytes());
        socket.close();
        Thread.sleep(1000);
        context.close();
    }

    @Bean
    public TcpNetServerConnectionFactory cf() {
        return new TcpNetServerConnectionFactory(9999);
    }

    @Bean
    public TcpReceivingChannelAdapter inbound(AbstractServerConnectionFactory cf) {
        TcpReceivingChannelAdapter adapter = new TcpReceivingChannelAdapter();
        adapter.setConnectionFactory(cf);
        adapter.setOutputChannel(tcpIn());
        return adapter;
    }

    @Bean
    public MessageChannel tcpIn() {
        return new DirectChannel();
    }

    @Transformer(inputChannel = "tcpIn", outputChannel = "serviceChannel")
    @Bean
    public ObjectToStringTransformer transformer() {
        return new ObjectToStringTransformer();
    }

    @ServiceActivator(inputChannel = "serviceChannel")
    public void service(String in) {
        System.out.println(in);
    }

}

关于java - 如何在 spring boot 中创建一个 Tcp 连接来接受连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39290834/

相关文章:

java - 如何从 Java 程序而不是仅仅从 .bat 启动/停止作为 Windows 服务的 Tomcat?

java - 外部数据库更改 -> Hibernate -> 客户端

java - java 的 sed 给出错误

java - 如何在 Controller 操作中实例化 CommandLineRunner 以及所有 @Autowired 属性?

java - spring boot (webflux) rest Controller 获取远程 IP 地址

java - 如何使用 Spring Boot 开发支持中断(暂停、连接丢失等)的 get 端点?

tcp - Golang 写 net.Dial 响应给浏览器

java - 在 Eclipse 程序中编译,但不在终端中,导入库冲突,gradle/javac

java - Netty中可以压缩请求吗?

windows - CLOSE_WAIT 状态问题