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

Posted

技术标签:

【中文标题】C++Builder 6 和 Indy 10 的 TCP 问题【英文标题】:TCP issue with C++Builder 6 and Indy 10 【发布时间】:2016-02-15 06:24:53 【问题描述】:

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

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

我有几个问题:

    TCP/IP 堆栈能否与发送到其他模块的 UDP 数据包并行运行?

    TIdTCPClient::Disconnect()方法会影响UDP吗?

应用程序在没有控制 Marantz 的情况下使用 UDP 正常工作。但是交换所谓正确的 TCP 消息会吓坏应用程序。我尝试了不同的方式来断开堆栈(断开之前清除 IO 缓冲区等)。

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于C++Builder 6 和 Indy 10 的 TCP 问题的主要内容,如果未能解决你的问题,请参考以下文章

Indy TCP 客户端示例?

C++ Builder 2009 - IndySystem120.bpl - 未找到入口点

Delphi中Indy 10的安装和老版本的卸载

Delphi中Indy 10的安装和老版本的卸载

C++Builder 6.0 学习资料收集整理

THttpCli发送和接受数据,代替indy10 TidHttp解决超时时间无效的问题