Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C和x2B之间进行通信+;插件和Python程序_Python_Sockets_Visual C++_Binding_Zeromq - Fatal编程技术网

在C和x2B之间进行通信+;插件和Python程序

在C和x2B之间进行通信+;插件和Python程序,python,sockets,visual-c++,binding,zeromq,Python,Sockets,Visual C++,Binding,Zeromq,我对此有很多疑问,我想我应该问一下。情况如下: 我正在编写一个C++程序,它将被加载到程序“EnnuleSc.exe”中。加载时,程序将向dll提供数据,dll将不断地向先前构建的python程序发送和接收数据。接收并接受数据后,dll将把数据传输给正在运行的应用程序 我正在尝试使用ZeroMQ的套接字解决方案,每个人都在谈论它。问题是,现在已经两周了,我无法在VS2012中使用它。我什么都试过了,甚至在这里,在他们的家里,在邮件列表中打开了一个线程……没有人知道如何解决它 那么,除了ZeroM

我对此有很多疑问,我想我应该问一下。情况如下:

我正在编写一个C++程序,它将被加载到程序“EnnuleSc.exe”中。加载时,程序将向dll提供数据,dll将不断地向先前构建的python程序发送和接收数据。接收并接受数据后,dll将把数据传输给正在运行的应用程序

我正在尝试使用ZeroMQ的套接字解决方案,每个人都在谈论它。问题是,现在已经两周了,我无法在VS2012中使用它。我什么都试过了,甚至在这里,在他们的家里,在邮件列表中打开了一个线程……没有人知道如何解决它

那么,除了ZeroMQ,你认为我的情况下最好的选择是什么?我已经在那里搜索和阅读了很多(我不喜欢协议缓冲区,它太复杂了,不适合我想做的事情)

还有一件事。绑定Python/C++(例如使用SIP或ctypes)是一个有效的解决方案还是不符合我的目的?我已经阅读了一些SIP和cType文档,它看起来像我想要的……但同时我想:如果一个C++程序可以加载到Python,那么它的目的是什么?我不知道,我只是被这么多信息弄得不知所措


非常感谢您的帮助

最简单的方法之一是编写一个简单的Python套接字服务器,它可以执行以下操作:

  • 侦听已知端口并接受TCP连接
  • 读取字符串,直到找到“\n”
  • 在某些分隔符(如“,”或空格(如flds=line)上拆分行。拆分(“,”)
  • 将第一个字段(flds[0])解释为关键字,其余字段解释为参数,以调用底层python程序中的函数
  • 发送以“\n”结尾的响应字符串
  • 继续循环步骤2到步骤5,直到套接字连接关闭或收到某种“关闭”命令
  • 这种类型的服务器的客户端可以用C++或Python编写,并且可以:

  • 连接到已知端口上的TCP套接字
  • 发送以“\n”结尾的单行命令
  • 读取响应字符串,直到找到“\n”
  • 重复上述过程,直到所需任务完成或套接字连接关闭
  • 当我需要一个简单的点对点同步发送/接收协议实现时,我经常使用这种方法。它比ZeroMQ或其他消息队列方法轻得多

    如果您需要异步通信或运行多个服务器线程,那么您可能需要研究ZeroMQ之类的东西。但如果我理解正确的话,在这种情况下,你的需求似乎要简单得多

    在网络上使用字符串比发送二进制数据要慢一些,但根据我的经验,该协议更容易调试,因为您不必担心不同平台上二进制类型(int、long、short、float、double)的大小和字节顺序的差异。您不必将数据包转储到一个文件中,然后在十六进制编辑器中查看它们,以了解通过网络发送的内容。只需记录文本字符串,就很容易看到发生了什么

    Python在标准库中有极好的库支持,而.NET库如果您决定用C编写客户端或决定使用托管C++,将很好地工作。


    <>如果你要编写更多的传统C++(非托管),那么你应该能够找到很多Win32套接字编程的例子,比如.< /p>你能修改预先存在的Python应用程序,或者仅仅限于通过ZrOMQ与它通信?如果您无法更改Python应用程序的协议,那么您可能仅限于其预先存在的通信形式(套接字或ZeroMQ等)。如果您能够修改Python应用程序,那么实现一个简单的面向行的套接字服务器可能是最容易的,该服务器读取请求字符串,直到找到“\n”,处理消息,并用以“\n”结尾的字符串响应。如果您只需要简单的同步发送/接收,ZeroMQ可能会有些过头。我不知道,因为这是别人的论文,但我认为可能不是。我能做的,也最有可能要做的是一个py程序,它可以和以前写的论文进行交互。那么你有什么建议,简单的套接字(因为ZeroMQ不工作)?我发布了一个可能的答案,请告诉我这是否朝着正确的方向发展。如果没有,我可以根据需要修改和添加更多细节。我喜欢它!非常感谢你的回答,我今天将尝试实施它。我会让你们知道,若我对此有任何疑问,我会尝试遵循教程。你认为我会进入正确的阶段吗?我一直在尝试这个套接字并思考它,我意识到我需要在C++中嵌入Python,因为我所做的是一个插件,它基本上被加载到程序中,插件做了所有必要的东西。因此,python程序不需要打开并在python shell上运行是有道理的,对吗?你怎么看?你提供的文章链接中的“用于嵌入的TCP/IP套接字”部分与我推荐的方法非常相似。从技术上讲,与Python TCP套接字服务器通信的C++套接字客户端实际上不是嵌入的,它更像点对点客户机/服务器实现。除了术语,我认为您希望启动带有TCP套接字服务器的Python进程,并与C++ TCP Socket客户端连接。如果你不想让它打开并提前运行,你可以从C++启动Python服务器进程。希望我已经理解了你的要求。我决定我应该在C++中嵌入Python。我已经测试过了,这正是我想要的。非常感谢你的帮助,并为我指明了正确的方向