windows下python与c++之间使用共享内存进行通信,python为服务器,c++为客户端 ,代码实现
时间: 2023-07-14 11:12:52 浏览: 86
下面是一个简单的示例代码,展示了如何在 Windows 平台上使用 Python 与 C++ 之间进行共享内存通信。其中,Python 作为服务器,C++ 作为客户端。
Python 代码:
```python
import mmap
import os
import time
# 创建一个共享内存对象,并映射到文件中
shm_name = "test_shm"
shm_size = 1024
fd = os.open("shm_file", os.O_RDWR | os.O_CREAT)
os.write(fd, b'\0' * shm_size)
os.close(fd)
with open("shm_file", "r+b") as f:
shm = mmap.mmap(f.fileno(), shm_size, access=mmap.ACCESS_WRITE)
while True:
# 接收来自客户端的消息
msg = shm.readline().decode("utf-8")
if msg.strip() == "exit":
break
print("[Server]: Received message: ", msg)
# 发送消息给客户端
response = "Response from server: " + str(time.time())
shm.seek(0)
shm.write(response.encode("utf-8"))
# 清理
shm.close()
os.remove("shm_file")
```
C++ 代码:
```cpp
#include <iostream>
#include <windows.h>
int main()
{
HANDLE file_handle;
char* buffer;
file_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 1024, "test_shm");
buffer = (char*)MapViewOfFile(file_handle, FILE_MAP_ALL_ACCESS, 0, 0, 1024);
while (true)
{
// 向服务器发送消息
std::string message = "Message from client";
strncpy_s(buffer, 1024, message.c_str(), message.length() + 1);
// 从服务器接收响应
std::string response(buffer);
std::cout << "[Client]: Received response: " << response << std::endl;
Sleep(1000);
}
// 清理
UnmapViewOfFile(buffer);
CloseHandle(file_handle);
return 0;
}
```
在运行这些代码之前,需要确保将 Python 和 C++ 的代码分别保存到 `server.py` 和 `client.cpp` 文件中,并分别使用 Python 和 C++ 编译器进行编译。
此外,需要注意的是,两端的共享内存名称和大小必须匹配,否则无法进行通信。