Python 和 C++ 使用本地文件套接字之间的进程间通信?
Inter-Process Communications between Python and C++ using local file sockets?
我有一个 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 程序可以做到这一点(也许 client/server 对可以演示此功能)?只要我能python将数据发送到本地文件套接字,剩下的我就可以搞定了。
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', ...))
您只需将 AF_INET
更改为 AF_UNIX
然后 .connect(address)
and/or .bind(address)
方法接受文件路径(而不是 (host, port)
一对)。除此之外,其他一切都几乎相同。
我有一个 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 程序可以做到这一点(也许 client/server 对可以演示此功能)?只要我能python将数据发送到本地文件套接字,剩下的我就可以搞定了。
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', ...))
您只需将 AF_INET
更改为 AF_UNIX
然后 .connect(address)
and/or .bind(address)
方法接受文件路径(而不是 (host, port)
一对)。除此之外,其他一切都几乎相同。