将C++程序与Java API连接
问题描述:
我有一个C++ AES alogirthm程序,用于加密存在于同一台机器上的文本文件。 现在我正在通过使用Web应用程序,通过从不同机器上传该机器上的新文件来增加其功能。将C++程序与Java API连接
我的web应用程序由java构成,它将通过一个API(它也构建在java上)链接到服务器机器。 当用户点击上传按钮(出现在网络应用程序上)时,API将被调用,并且它将在服务器上上传文件。 由于我已经从不同的机器(目前在同一LAN上)成功接收到服务器机器上的文件,所以工作一直顺利进行。
但是,现在我被卡住了。我希望我的C++程序能够自动地知道一个新文件已经到达机器上,并从那里取出并加密它。但是,怎么做呢?
直到我的理解,我想也许JavaScript可以使用,但我真的不知道如何工作。
请让我知道,如果我需要提供更多的细节。任何指导将非常感激!谢谢!!
答
纠正我 - 您的Java程序下载文件并将其放入某个已知位置?那么为什么不为你的C++应用程序创建JNI包装器(一个jar库),然后,在成功下载之后,你只需告诉你的lib/path/to /文件并加密它呢?
也许你也可以加密你接收到的字节流并将已加密的字节写入磁盘?
答
这可以帮助你,如果我理解正确的话你: 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 ^^)
在C++中,您可以监视一个目录以显示新文件。在Linux上,你在Windows上使用了某些东西。 –
我假设在用于上载文件的Java应用程序中存在某种类型的文件上载事件处理程序,这些文件也将其保存在服务器上。如果是这种情况,那么你只需要在那之后执行C++应用程序。 – Archer