C++Builder 6 和 Indy 10 的 TCP 问题

TCP issue with C++Builder 6 and Indy 10

我正在使用 C++Builder 6 和 Indy 10 编写应用程序。该应用程序使用 UDP 协议与模块 (AVR) 通信。一切正常。 不幸的是,现在我需要控制一个使用 TCP 的外部设备(Marantz 接收器)。

设备开始响应通过 TCP 发送的帧,一切正常....但随后应用程序冻结并崩溃。无论我尝试做什么,都会因访问冲突错误而崩溃。

我有几个问题:

  1. TCP/IP 堆栈可以与发送到其他模块的 UDP 数据包并行运行吗?

  2. TIdTCPClient::Disconnect()方法是否影响UDP?

应用程序在不控制 Marantz 的情况下使用 UDP 正常工作。但是交换理应正确的 TCP 消息却让应用程序大吃一惊。我尝试了不同的方法来断开堆栈(在断开之前清除 IO 缓冲区等)。

TCP 与 UDP 并行运行得很好。但是请注意,Indy 在阻塞模式下使用所有套接字,因此如果您想在同一个应用程序中同时使用 TCP 和 UDP,则必须使用工作线程来防止它们相互阻塞。

TCP 协议本身不会以任何方式影响 UDP 协议,反之亦然。

访问冲突错误意味着您的代码在运行时访问了无效内存。这意味着您可能错误地使用了 TIdTCPClient。但是由于您没有显示任何实际代码,也没有提供任何马兰士协议的文档或示例,因此没有人能告诉您您做错了什么。