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程序可以做到这一点(也许是一个演示该功能的客户端/服务器对)?只要我能让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)
对)。除此之外,其他一切都差不多。
相关文章:
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 从套接字 C++ 发送和接收文件
- 如何从 boost::asio::ssl::stream<boost::asio::ip::tcp::socket> 获取本机套接字文件描述器?
- 如何在不设置 ulimit -n 的情况下解决套接字程序打开太多文件的错误
- 从 PHP 调用已编译的C++可执行文件来创建套接字
- 无法从零MQ ZMQ_SERVER套接字中获取文件描述符
- read() 上的不同行为取决于写入不可写内存时表示文件、匿名管道或套接字的文件描述符
- 在通过套接字向服务器发送文件数据时,我得到了一些垃圾值?为什么
- 带有线程的 Linux 套接字文件描述符
- Python和C++之间使用本地文件套接字的进程间通信
- 套接字请求不返回整个文件
- 通过网络中的套接字进行文件传输时,该程序中的文件传输错误是什么
- 套接字编程:"接受:错误的文件描述符"
- 提升 ASIO 套接字使用文件描述符
- 通过套接字发送二进制文件.文本文件有效,其他文件无效
- 从套接字接收到二进制数据后,使用c++将二进制数据写入文件
- Unix 域套接字:发送文件描述符和 select()
- 更改 Linux 套接字文件权限
- 使用SFML TCP套接字和数据包破坏文件