Проблема TCP с C++Builder 6 и Indy 10

Я пишу приложение, используя C++Builder 6 и Indy 10. Приложение использует протокол UDP для связи с модулями (AVR). Все работает нормально. К сожалению, теперь мне нужно управлять внешним устройством (ресивером Marantz), которое вместо этого использует TCP.

Устройство начинает отвечать на кадры, отправленные по TCP, все хорошо .... но затем приложение зависает и вылетает. Все, что я пытаюсь сделать, вылетает с ошибкой нарушения прав доступа.

У меня есть несколько вопросов:

  1. Может ли стек TCP/IP работать параллельно с UDP-пакетами, отправляемыми другим модулям?

  2. Влияет ли метод TIdTCPClient::Disconnect() на UDP?

Приложение корректно работает с UDP без управления Marantz. Но обмен якобы правильными TCP-сообщениями выводит приложение из себя. Я пробовал другой способ отключения стека (очистка буфера ввода-вывода перед отключением и т. д.).


person r00ti    schedule 15.02.2016    source источник


Ответы (1)


TCP отлично работает параллельно с UDP. Однако обратите внимание, что Indy использует все сокеты в режиме блокировки, поэтому, если вы хотите одновременно использовать TCP и UDP в одном приложении, вам придется использовать рабочие потоки, чтобы они не блокировали друг друга.

Сам протокол TCP никак не влияет на протокол UDP и наоборот.

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

person Remy Lebeau    schedule 17.02.2016