将C ++程序与Java API连接

时间:2016-09-23 11:08:14

标签: javascript java c++ api encryption

我有一个C ++ AES alogirthm程序,我用它来加密存在于同一台机器上的文本文件。 现在我通过使用Web应用程序从不同的机器上传该机器上的新文件来增加其功能。

我的网络应用程序由java构成,它将通过API(也是基于java构建)链接到服务器计算机。 当用户点击上传按钮(存在于Web应用程序上)时,将调用API,并在服务器计算机上上载该文件。 由于我已成功从不同的机器(目前在同一局域网上)接收到服务器机器上的文件,因此工作进展顺利至此为止。

然而,现在我被卡住了。我希望我的C ++程序能够以某种方式自动地知道新文件已经到达机器,从那里取出并加密它。但是怎么做呢?

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

请告诉我是否需要提供更多详情。任何指导都会非常感激!谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:-1)

如果我理解正确的话,这可能会对你有所帮助: 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 ^^)