TCP套接字连接 - 即使在通过ByteArrayLengthHeaderSerializer

时间:2018-03-15 00:11:45

标签: sockets spring-boot tcp spring-integration

我已经实现了TCP套接字服务器,它接受来自客户端的传入XML消息。我可以通过telnet发送消息。

但是当我尝试建立连接并通过python脚本发送消息时,我收到了IOException:在最大消息长度之前找不到CRLF:2048。所以我添加了ByteArrayLengthHeaderSerializer来序列化和反序列化,但是现在我得到了以下错误

IOException:消息长度1014132591超过最大消息长度:2048

虽然我正在增加最大消息长度,但我收到了IOException:在1014132591之后关闭了流

有人可以告诉我如何解决问题。



final AbstractServerConnectionFactory crLfServer = context.getBean(AbstractServerConnectionFactory.class);
 ByteArrayLengthHeaderSerializer serializer = new ByteArrayLengthHeaderSerializer();
    serializer.setMaxMessageSize(1000 * 1024);
    crLfServer.setSerializer(serializer);
    crLfServer.setDeserializer(serializer);
    
    




我已经使用Spring Integration实现了.Below是我的入站适配器的片段



@Bean
public TcpReceivingChannelAdapter inboundAdapter(AbstractServerConnectionFactory connectionFactory) {
    System.out.println("Creating inbound adapter");
    TcpReceivingChannelAdapter inbound = new TcpReceivingChannelAdapter();

    inbound.setConnectionFactory(connectionFactory);
    //inbound.
    inbound.setOutputChannel(fromTcp());
  

    return inbound;
}




1 个答案:

答案 0 :(得分:1)

我认为在消息之后在您的脚本中准确发送CRLF可能会更好。这将是要反序列化的消息的完全分隔符。这是上述Telnet使用的内容之一。但是,您需要返回连接工厂配置中的默认解串器。