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



我有一个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将数据发送到本地文件套接字,我就可以解决剩下的问题。

Pythonsocket库是一个相当薄的封装器,它围绕着您在C++中熟悉的套接字接口。请参阅套接字文档。

它看起来像这样:

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

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

最新更新