【问题标题】:UNIX socket for communication python - C++用于通信 python - C++ 的 UNIX 套接字
【发布时间】:2019-11-24 09:28:42
【问题描述】:

我正在尝试通过 Windows 10 64 位中的 UNIX 套接字在 python 和 C++ 之间进行通信。
根据文档,要使用 UNIX 套接字,我需要将系列设置为 AF_UNIX 而不是 AF_INET,并创建一个临时的本地套接字。自去年以来,这似乎在 Windows 中是可能的,但我还没有找到关于如何做到这一点的明确解释。
我目前有这个设置:

服务器 python

HOST = '127.0.0.1'  
PORT = 5555    
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()
    with conn:
        # Do something with recv(), send()
        ....

客户端 C++

WSADATA WSAData;
SOCKET server;
SOCKADDR_IN addr;

WSAStartup(MAKEWORD(2,0), &WSAData);
server = socket(AF_INET, SOCK_STREAM, 0);   
addr.sin_addr.s_addr = inet_addr("127.0.0.1"); 
addr.sin_family = AF_INET;
addr.sin_port = htons(5555);
connect(server, (SOCKADDR *)&addr, sizeof(addr));
// Do something with recv(), send()

由于这种通信对于我的目的来说非常慢,所以我想做同样的事情,但使用 UNIX 套接字。我怎样才能做到这一点?谢谢

【问题讨论】:

  • 我知道 Unix 套接字不是用 ip 地址 + 端口表示的,但我不知道如何在 C++ 和 python 中正确表示它们。我写的例子与 AF_INET 家族有关
  • 在 unix/linux 上,对于 unix 域套接字,socket.bind 和 socket.connect 的参数只是提供套接字文件路径名的字符串。我最初会尝试(使用适当的 Windows 路径名),可能类似于:s.bind("c:\\temp\\foo.sck")
  • 此外,Windows 似乎支持“抽象”命名空间。这是一个空字符,后跟一个不会出现在文件系统中的任何地方的名称,例如:s.bind("\x00foo")

标签: python c++ sockets ipc


【解决方案1】:

对于 C++,您可能需要参考 this post 中的示例。

在撰写本文时,它尚不支持 Python。见bpo-33408。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 2012-01-26
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 2017-10-09
    相关资源
    最近更新 更多