两台计算机之间使用两个C++程序进行通信

3
我有一台电脑正在运行一个C++程序来控制机器人,另一台电脑正在运行计算机视觉系统(也是用C++编写的)。我希望这两个程序能够相互通信。通信不需要很复杂,我只需要机器人电脑能够告诉视觉电脑何时开始和结束试验(何时开始和停止数据采集序列)。你们中有没有人对如何解决这个问题有建议?计算机之间的RS232通信?某种网络解决方案?还是烟雾信号?欢迎任何建议。
谢谢您提前的帮助!
(编辑)如果您认为上述陈述含糊不清:
我需要从一个电脑传递一个二进制(启动/停止)信号到另一个电脑。不幸的是,我无法更明确地描述它的外观,因为(显然)我不知道可用的内容。两台电脑都在一个网络上,两台电脑都在运行Windows。目标是将计算机视觉系统收集的数据与机器人执行的操作同步。通信必须足够快,以不会减慢机器人或计算机视觉程序的速度。一个“好”的解决方案应该是1)易于实现2)快速。我对网络知道得不多,正在寻找一个开始寻找的地方。
再次感谢您的帮助!

1
过于模糊,无法给出有用的答案。 - anon
2
邦戈鼓(http://slashdot.org/article.pl?sid=03/09/27/175242)或者信鸽(http://en.wikipedia.org/wiki/IP_over_Avian_Carriers)怎么样? - Fred Larson
如果这些计算机至少是1990年的,它们难道不已经有网络连接,并且已经在网络上了吗?如果是这样的话,你的C ++开发人员岂不已经知道这个问题的答案了吗?如果你就是那个C ++开发人员,那么最好开始阅读一些关于编写TCP / IP套接字客户端和服务器的书籍了。 - Warren P
@Neil - 这怎么会太模糊呢?基本上是在问如何在计算机之间进行良好的通信。 - Tim
@Tim 嗯,正如Fred建议的那样,邦戈鼓可能是一个答案。 "好"是什么意思?“沟通”是什么意思?你曾经做过系统分析员吗? - anon
显示剩余5条评论
10个回答

4
你可以使用简单的UDP协议 - 优点是如果你了解RS232上的简单数据包协议概念,那么你会发现很容易将该知识转换为通过UDP发送数据包。如果你想在两台PC之间传输可靠的字节流(也就是说,系统的其他部分会关注错误和重试),那么TCP/IP的使用方法与UDP相比并不复杂。UDP和TCP都通过“套接字”进行访问。我很抱歉告诉你,从C++开始工作还需要相当多乏味的样板代码,但是有很多例子供参考。

2
如果它们连接到网络,你可以使用套接字。

谢谢,套接字看起来很有前途。如果您感兴趣,这是他的意思:http://en.wikipedia.org/wiki/Berkeley_sockets - NotNamedDwayne

2
最佳选择应该是使用网络通信。最简单的方法是查看Qt中的网络示例。
您需要创建一个客户端和服务端应用程序,当客户端从服务器看到特定消息时,您可以决定其执行的操作。Qt应该会处理其他的事情。
其他答案建议使用TCP / IP、UDP、RS232等。但是仅使用QtNetwork模块就可以完成所有这些操作。我假设由于您询问问题,您不了解它们之间的区别。因此,最稳妥的做法是使用最高级别的(免费)库,因此建议查看Qt。
另一种选择是使用Boost.Asio。但是我倾向于Qt解决方案,因为其API更好。

1

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


0

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

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

[1] 适用于C++。


0

大多数现代计算机都具备以太网功能,因此您可以购买一个便宜的集线器或交换机,并查看网络API。通常有一些相当简单的套接字编程。其中一个优点是,如果您想在以后增加通信能力,例如让您的视觉软件向机器人提供指令和指导,那么您已经设置好了基础。

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


0

这可能在你的情况下有些过度,但如果我处在你的位置,我可能会使用HTTP协议来实现它。视觉计算机将运行一个HTTP服务器,机器人计算机将使用POST请求通信状态更改。Poco C++ Net library提供了所需的设施。


0

我会使用TCP/IP套接字进行通信。TCP保证数据能够到达目的地。所以,你只需要解析数据即可。


0

RS232是一种易于编程的选择,但现代PC通常不具备RS232端口。您可能需要获取USB-RS232适配器或安装PCI卡。

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

除此之外,您还要向项目中添加一个可能出错并且会浪费部署和调试时间的元素。

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

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

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

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


0

我也可能会考虑使用0MQ之类的东西来使连接更加健壮。它可以在任何传输情况下传输和重新组装消息,并在临时失去连接时处理缓冲。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接