Python和C ++之间使用本地文件套接字进行进程间通信?

时间:2017-01-05 16:15:10

标签: python c++ sockets ipc

我有一个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将数据发送到本地文件套接字,我就可以搞清楚其余部分。

2 个答案:

答案 0 :(得分:2)

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', ...))

答案 1 :(得分:0)

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