连接c++程序和Java API

Connecting C++ program with Java API

本文关键字:Java API 程序 c++ 连接      更新时间:2023-09-26

我有一个c++ AES算法程序,我用它来加密同一台机器上的文本文件。现在我正在增加它的功能,通过使用一个web应用程序,从不同的机器上传新文件到那台机器。

我的web应用程序是由java组成的,它将通过API链接到服务器机器(这也是基于java构建的)。当用户点击上传按钮(出现在web应用程序上)时,调用API,它将在服务器机器上上传文件。到目前为止,工作进展顺利,因为我已经成功地从不同的机器(目前在同一局域网)接收了服务器机器上的文件。

然而,现在我被困住了。我想让我的c++程序以某种方式,自动地知道机器上有一个新文件,从那里获取它并加密它。但如何做到这一点呢?

在我理解之前,我认为也许可以使用JavaScript,但我真的不知道它是如何工作的。

如果我需要提供更多的细节,请告诉我。任何指导将是非常感激!谢谢! !

纠正我-您的Java程序下载文件并将其放入某个已知位置?那么,为什么不直接为c++应用程序创建JNI包装器(jar库),然后在下载成功后,将lib/path/告诉/file并对其进行加密呢?

也许你也可以加密你接收的字节流,并将已经加密的字节写入磁盘?

如果我理解正确的话,这可能会对你有所帮助:https://msdn.microsoft.com/enus/library/windows/desktop/aa365261 (v = vs.85) . aspx

下面是一个工作示例:

#include <windows.h>
#include <stdio.h>
#define DIR_PATH L"C:''temp''files"
void encrypt(WCHAR* fileName);
OVERLAPPED overlapped = {0};
union {
    FILE_NOTIFY_INFORMATION i;
    char d[sizeof(FILE_NOTIFY_INFORMATION)+MAX_PATH];
} fni;
int main()
{
    HANDLE hDirectory;
    BOOL res;
    DWORD bytesReturned;
    // Create handle for the directory
    hDirectory =  CreateFileW(DIR_PATH, FILE_LIST_DIRECTORY | GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING, FILE_FLAG_OVERLAPPED | FILE_FLAG_BACKUP_SEMANTICS,NULL);
    overlapped.hEvent = CreateEvent(0,0,0,0);
    // Monitor as long as running
    while (1)
    {
        res = ReadDirectoryChangesW(hDirectory,(LPVOID)&fni,sizeof(fni),FALSE,FILE_NOTIFY_CHANGE_SIZE,
                                                                &bytesReturned,&overlapped,NULL);
        // Error checking
        if ( res == 0)
        {
            printf("error: %d'n",GetLastError());
            return 1;
        }
        // check if a new file has been created in the directory
        GetOverlappedResult(hDirectory,&overlapped,&bytesReturned,TRUE);
        if (fni.i.Action != 0)
            encrypt(fni.i.FileName);
    }
}
//This is the encryption function
void encrypt(WCHAR* fileName)
{
    wprintf(L"Encrypting code here!'nFileName=%ls'n",fileName);
}

只需替换DIR_PATH并编辑加密函数

(我在这里的第一个答案btw ^^)