【发布时间】:2012-05-04 06:03:15
【问题描述】:
我正在尝试在 Clojure 中创建 C 风格的结构,因此我可以从 Clojure 调用文档记录不佳的 C++ API。
该 API 旨在发送和接收序列化的 protobuf 消息(好的),前面是 C Header 结构(坏的)。初始握手是一个 RPCHandshakeHeader 结构体,其过程大致在下面的代码中描述:
struct RPCHandshakeHeader {
char magic[8];
int version;
static const char REQUEST_MAGIC[9];
static const char RESPONSE_MAGIC[9];
};
[...snip...]
const char RPCHandshakeHeader::REQUEST_MAGIC[9] = "FooBar?\n";
[...snip...]
RPCHandshakeHeader header;
memcpy(header.magic, RPCHandshakeHeader::REQUEST_MAGIC, sizeof(header.magic));
header.version = 1;
socket = new CActiveSocket();
socket->Initialize();
socket->Open((const uint8 *)"localhost", 5000);
socket->Send((uint8*)&header, sizeof(header));
[...code to read response...]
如何在 clojure 中执行此操作?我需要使用 JNA/JNI 吗?
有没有办法创建一个 C 结构,将其转换为二进制并通过套接字发送? (我认为这是我需要做的)
【问题讨论】:
标签: c++ sockets clojure struct