2015-03-19 2 views
0

В моем APP есть JAVA и слой JNI.
Можно ли отправить сообщение с уровня Java в пул системных сообщений, а затем получить сообщение на уровне JNI?Android отправляет системное сообщение с Java на JNI

flow chart

По некоторым причинам, я не могу назвать метод JNI из Java непосредственно, я должен выяснить способ сообщения, как WndProc окон в Android.

+0

Исправлены некоторые грамматические –

ответ

0

Вы можете использовать сокеты для связи между Java и JNI. Установите сервер сокета в JNI, чтобы прослушать клиент для подключения, затем используйте сокет для подключения к серверу на Java.

Сервер сокетов в JNI.

struct sockaddr_in serv_addr; 
int sockfd, connfd; 
sockfd = socket(AF_INET, SOCK_STREAM, 0); 
memset(&serv_addr, 0, sizeof(serv_addr)); 

serv_addr.sin_family = AF_INET; 
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); 
serv_addr.sin_port = htons(6666); 

bind(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); 
listen(sockfd, 10); 

while (1) { 
    connfd = accept(sockfd, (struct sockaddr*)NULL, NULL); 
    time_t result; 
    time(&result); 
    cout << "connecting from java " << ctime(&result); 

    char buffer[1024] = { 0 }; 
    read(connfd, buffer, sizeof(buffer)/sizeof(char)); 

    cout << "receive command... " << buffer << endl; 
    close(connfd); 
    if (strcmp(buffer, "END") == 0) { 
     cout << "socket thread terminate" << endl; 
     break; 
    } 
} 

Разъем клиента в Java

for (int i = 0; i < 3; i++) { 
     try { 
      Socket socket = new Socket(Inet4Address.getByName("localhost"), 6666); 

      BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 
      switch (i) { 
      case 0: 
       writer.write("ADD"); 
       break; 
      case 1: 
       writer.write("SUB"); 
       break; 
      case 2: 
       writer.write("END"); 
       break; 

      default: 
       break; 
      } 
      Thread.sleep(2000); 
      writer.flush(); 
      socket.close(); 
     } catch (IOException | InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
Смежные вопросы