在 Windows 上,我有一些通过 Java 套接字进入的第 3 方 TCP 数据,我试图弄清楚如何将数据传递到由同一第 3 方提供的 C 库中 - 使用 JNA。我对 JNA/JNI/C 等所有东西都很陌生。
第 3 方库将从套接字获取传入字节并将它们解码为正确的消息类型。由于传入的数据是任意长度的,没有结束分隔符,并且起始分隔符很短(因此可能出现在数据中间而不是实际的分隔符),实际上可能更容易弄清楚如何使用它图书馆虽然 JNA 而不是自己滚动(或学习 C)。
我已经设法使用 jnaerator 从 C 头文件生成源代码。我还成功地调用了一个不需要参数的简单 C 函数。但是,当尝试使用需要将“原始数据”传递给最初接受 void 指针的 C 函数时,我不确定如何继续。
以下是代码中的相关片段。
//CExportTypes.h
typedef unsigned int XUint;
//also defines structs: XMessageType, XCrypto, XAlarm, etc.
//CLibrary.h
XStatus XGetMessageType(void* bytesRecv, XUint numBytes, XMessageType* type, XUint* serial, XUint* msgLen);
XStatus XDecodeAlarm(void* bytesRecv, XUint numBytes, XCrypto* key, XAlarm* decodedAlarm);
//CLibrary.java (Generated)
int XGetMessageType(Pointer bytesRecv, int numBytes, IntBuffer type, IntBuffer serial, IntBuffer msgLen);
int XDecodeAlarm(Pointer bytesRecv, int numBytes, XCrypto key, XAlarm decodedAlarm);
我如何获得传入
int = Socket.getInputStream()
将“原始数据”转换为 JNA 函数期望的指针?我还需要注意哪些其他问题?字节序、无符号字节问题等?
我知道这可能没什么可做的,但我很感激我能得到的任何帮助。