我对此有很多疑问,我想我应该问。情况如下:
我正在编写一个C ++ .dll,它将被加载到一个程序“EuroScope.exe”中。在加载时,程序将向dll提供数据,该数据将不断向先前构建的python程序发送数据或从之前构建的python程序接收数据。收到并接受数据后,dll会将其传输到正在运行的应用程序
我正在尝试使用ZeroMQ的套接字解决方案,每个人都非常关注。事情是,现在已经2周了,我无法在VS2012中投入使用。我尝试了一切,甚至在他们的主页,邮件列表中打开了一个帖子......没有人知道如何解决它
那么,除了ZeroMQ,您认为我的最佳选择是什么?我已经在那里搜索并阅读了很多它们(协议缓冲区我不喜欢,它太复杂了,我觉得我想做什么)
还有一件事。绑定Python / C ++(例如使用SIP或ctypes)是一个有效的解决方案还是它不能满足我的目的?我已经阅读了一些SIP和ctypes文档,它看起来就像我想要的那样...但同时我想:如果需要将数据发送到Python的加载dll,那么让Python可以访问C ++程序的目的是什么? ??我不知道,我只是被这么多信息所淹没
非常感谢你的帮助
答案 0 :(得分:0)
最简单的方法之一是编写一个简单的Python套接字服务器,它执行以下操作:
此类服务器的客户端可以用C ++或Python编写,并且可以:
当我需要简单的点对点同步发送/接收协议实现时,我经常使用这种方法。它比ZeroMQ或其他消息排队方法重得多。
如果您需要异步通信或运行多个服务器线程,那么您可能希望查看类似ZeroMQ的内容。但是,如果我理解正确的话,听起来你的需求会更简单。
使用字符串比发送二进制数据要慢一些,但是根据我的经验,协议更容易调试,因为您不必担心大小和差异的差异。跨不同平台的二进制类型(int,long,short,float,double)的字节顺序。而且您不必将数据包转储到文件中并在HEX编辑器中查看它们以告知通过网络发送的内容。只需记录文本字符串,就可以很容易地看到发生了什么。
Python在标准库中具有出色的TCP socket server and client库支持,并且.NET库具有good TcpClient support,如果您决定使用C#编写客户端或决定使用托管C ++,它将很有效。 / p>
如果您要编写更传统的C ++(非托管),那么您应该能够找到许多Win32套接字编程示例,例如this site with working TCP client & server Win32 socket code examples and online book。