【问题标题】:Inter-Process Communications between Python and C++ using local file sockets?使用本地文件套接字在 Python 和 C++ 之间进行进程间通信?
【发布时间】:2017-05-20 06:31:18
【问题描述】:

我有一个 c++ 程序,它创建一个绑定到“/tmp/.mysocket”的本地套接字并等待从该套接字接收数据。它的设置方式是,原始二进制数据将被发送到套接字并加载到以下 C++ 结构中:

struct StateVariable
{
    char Name[64];
    int E[8];
};

C++ 程序使用 recvfrom 监听输入:

int nBytes = recvfrom(SD,&DataReceived,sizeof(StateVariable)/sizeof(char),0,(sockaddr*)&SentFrom,&size);

服务器只是使用标准的 AF_UNIX 和 SOCK_DGRAM 来创建套接字。

我的问题与 python 有关:如何使用 python 将数据发送到绑定到 /tmp/.mysocket 的本地套接字?我没有使用 AF_INET 或为此打开特定端口。

我可以使用 python 的套接字库来描述套接字,但我找不到任何讨论将套接字绑定到 python 中的文件并将数据发送到该套接字的资源。套接字库的文档只讨论了将 AF_INET 和 SOCK_DGRAM 用于绑定到 127.0.0.1 端口号的本地套接字,但我没有这样做。

如何让 python 将数据发送到绑定到文件的套接字?是否有一个示例 python 程序可以做到这一点(可能是演示此功能的客户端/服务器对)?只要我能让python把数据发送到本地文件socket,剩下的我都能搞定。

【问题讨论】:

  • 远程过程调用机制被编程了10000次。谷歌已有的方法。

标签: python c++ sockets ipc


【解决方案1】:

Python socket 库是您熟悉的 C++ 套接字接口的一个相当薄的包装器。见socket documentation

它看起来像这样:

import socket
import struct 

s = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
s.connect('/tmp/...')
s.send(struct.pack('64s8i', ...))

【讨论】:

    【解决方案2】:

    您只需将AF_INET 更改为AF_UNIX,然后.connect(address) 和/或.bind(address) 方法接受文件路径(而不是(host, port) 对)。除此之外,其他一切都几乎相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-27
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多