Я реализовал сервер сокетов TCP, который принимает входящие сообщения XML от клиента. Я мог отправлять сообщения через телнет.

Но когда я пытаюсь установить соединение и отправить сообщение через скрипт python, я получал IOException: CRLF не найден до максимальной длины сообщения: 2048. Поэтому я добавил ByteArrayLengthHeaderSerializer для сериализации и десериализации, но теперь я получаю ошибку ниже.

IOException: длина сообщения 1014132591 превышает максимальную длину сообщения: 2048

Хотя я увеличиваю максимальную длину сообщения, я получаю исключение IOException: поток закрыт после 46 из 1014132591

Может ли кто-нибудь сообщить мне, как решить проблему.

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

Я реализовал использование Spring Integration. Ниже приведен фрагмент моего входящего адаптера.

@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;
}
0
merla 15 Мар 2018 в 03:11

1 ответ

Лучший ответ

Я думаю, может быть лучше послать именно этот CRLF в вашем скрипте после сообщения. Это будет точный разделитель сообщений для десериализации. Это то, что используется упомянутым Telnet. Однако вам нужно вернуться к десериализатору по умолчанию в конфигурации фабрики соединений.

1
Artem Bilan 15 Мар 2018 в 03:23