【问题标题】:communication between two computers with 2 c++ programs [closed]两台计算机之间使用 2 个 C++ 程序进行通信 [关闭]
【发布时间】:2010-07-29 20:06:25
【问题描述】:

我有一台运行 c++ 程序来控制机器人的计算机和另一台运行计算机视觉系统(也用 c++ 编写)的计算机。我希望这两个程序能够相互交谈。通信不必很复杂,我只需要机器人计算机能够告诉视觉计算机试验何时开始和结束(何时开始和停止数据收集序列)。你们中的任何人对如何解决这个问题有什么建议吗?电脑之间的rs232通讯?某种网络解决方案?烟火信号?欢迎大家提出意见。 提前谢谢你

(编辑)如果您认为上面的陈述含糊不清:

我需要将二进制(通过/不通过)信号从一台计算机传递到另一台计算机。不幸的是,我无法更具体地说明这会是什么样子,因为(显然)我不知道有什么可用的。两台计算机都在网络上,并且两台计算机都在运行 Windows。目标是将计算机视觉系统收集的数据与机器人执行的动作同步。通信确实需要足够快,以至于不会减慢机器人或计算机视觉程序的速度。一个“好的”解决方案将是 1)易于实施 2)快速。我对网络了解不多,我正在寻找一个开始寻找的地方。

再次感谢您的帮助

【问题讨论】:

  • 太模糊了,无法给出有用的答案。
  • 如果这些计算机的历史至少是 1990 年,它们不是已经有网络连接,而且它们还没有在网络上吗?如果是这样,您的 C++ 开发人员难道不知道这个问题的答案吗?如果您是 C++ 开发人员,那么您最好开始阅读一些有关编写 TCP/IP Socket 客户端和服务器的书籍。
  • @Neil - 这怎么太含糊了?它基本上是在询问什么是跨计算机通信的好方法。
  • @Tim 好吧,正如 Fred 建议的邦戈鼓可能是一个答案。 “好”是什么意思? “沟通”是什么意思?您曾经做过系统分析师吗?

标签: c++ networking computer-vision serial-port robot


【解决方案1】:

您可以使用简单的 UDP 协议 - 优点是,如果您了解 RS232 上简单数据包协议的概念,您会发现很容易将这些知识转移到通过 UDP 发送数据包。

如果您想要两台 PC 之间的可靠(例如,系统的其他部分会担心错误和重试)字节流,那么 TCP/IP 的使用并不比 UDP 复杂多少。

UDP 和 TCP 都通过“套接字”访问。恐怕你会发现,从 C++ 开始,有很多乏味的样板文件才能让它工作,但是周围有很多很多的例子。

【讨论】:

    【解决方案2】:

    如果它们是网络连接的,你可以只使用套接字。

    【讨论】:

    【解决方案3】:

    最好的选择是使用网络通信。解决这个问题的最简单方法应该是查看 Qt 中的网络示例。

    您基本上将创建一个客户端和一个服务器应用程序。您决定客户端在看到来自服务器的特定消息时会做什么。就这样。 Qt 应该负责其余的事情。

    其他答案表明 TCP/IP、UDP、RS232、...当您使用 QtNetwork 模块时,所有这些都只是选项。我假设既然你问了你的问题,你就不知道它们之间的区别。所以最安全的选择是使用*别(免费)的库,因此建议研究 Qt。

    另一个选择是使用 Boost.Asio。我更喜欢 Qt 解决方案,因为他们的 API 更好。

    【讨论】:

      【解决方案4】:

      这对于网络套接字来说听起来相当不错。如果你的两台机器都在 Windows 上,你甚至可以使用命名管道。

      【讨论】:

        【解决方案5】:

        对于 Windows,您需要将 COM n 端口作为文件打开,以通过串行端口 [1] 进行通信。我现在无法访问我的代码,我回家后可以查看它。

        RS232 很简单,我喜欢它。但是,它 很慢。您需要在设计中考虑到这一点。

        [1] 对于 C++。

        【讨论】:

          【解决方案6】:

          大多数现代计算机都具有以太网功能,因此请给自己买一个便宜的集线器或交换机并查看网络 API。通常有一些相当简单的套接字东西。这样做的一个好处是,如果您以后想提高沟通能力,例如让您的视觉软件为您的机器人提供指令和指导,那么您已经具备了基础知识。

          或者,设置您的视觉程序,以便您可以通过按随机键来启动和停止它。使用时,将键盘放在机器人电脑光驱前,在机器人运行开始和结束时弹出。

          【讨论】:

            【解决方案7】:

            在你的情况下这可能有点过头了,但如果我站在你的立场上,我可能会使用 HTTP 协议来实现它。视觉计算机将运行 HTTP 服务器,而机器人计算机将使用 POST 请求传达状态变化。 Poco C++ Net library 为您提供了执行此操作所需的设施。

            【讨论】:

              【解决方案8】:

              我会使用 TCP/IP 套接字进行通信。 TCP 保证数据会成功。所以,你需要做的就是解析数据。

              【讨论】:

                【解决方案9】:

                RS232 是一种易于编程的选项,但现代 PC 往往没有 RS232 端口。您可能需要获取 USB-RS232 适配器或安装 PCI 卡。

                RS232 的另一个问题是您需要担心额外的电线,这可能会造成麻烦。此外,除非您购买一些笨重的 RS232 中继器或蓝牙连接器等,否则 RS232 电缆的长度可能会受到限制(5-15m)。

                除此之外,您还在项目中添加了一项可能会出错并花费您部署和调试时间的项目。

                IMO,一个优雅的工程解决方案是利用您拥有的硬件并使用 TCP/IP 套接字进行通信。

                网络上充斥着在服务器和客户端之间传递消息的示例:

                如果您使用的是 Linux: http://www.linuxhowtos.org/C_C++/socket.htm

                使用 Windows: http://www.adp-gmbh.ch/win/misc/sockets.html

                【讨论】:

                  【解决方案10】:

                  我也可能会查看0MQ 之类的内容,以使连接更加健壮。无论传输方式如何,它都会传输和重组消息,并在暂时失去连接的情况下处理缓冲。

                  但底线是我会使用 TCP/IP,但根据机器人的性质,您可能需要一个比 TCP 套接字更健壮的连接系统。 UDP 很好,因为它是无连接的——如果机器人暂时超出范围/视线/等,您将不必重建套接字和上下文。

                  【讨论】:

                    最近更新 更多