Как общаться с виртуальной машиной в Java?

Я сделал небольшую программу на Java, чтобы проверить правильность пин-кода. Как видно из кода, программа просит кого-то ввести свой пин-код, затем проверяет в файле bdd.txt (играющем роль базы данных), правильный пин-код или нет.

На самом деле я хочу перейти к следующему шагу, я хочу развернуть эту программу на Android-устройстве.

Сначала мне нужен файл bdd.txt на виртуальной машине (например, Ubuntu), чтобы он больше не был локальным. Это более реалистично. Я должен иметь в виду, что в будущем устройство будет спрашивать, является ли введенный пин-код правильным или нет, и, конечно, все пин-коды не будут на устройстве, поэтому весь процесс проверки не будет локальным.

Вот почему мой вопрос: как общаться с виртуальной машиной на Java? Моя программа работает на моем компьютере с Windows, я установил Ubuntu с VMware, как мне получить доступ к файлу на моей виртуальной машине? (Веб-службы?) Возможно ли это? И если да, то как?

Код :

import java.io.*;
import java.util.*;

public class Main {

  // Fonction permettant d'accéder/lire notre BDD de pins (fichier .txt)
  static public boolean readPinsData(File dataFile, ArrayList<Integer> data) {
    boolean err = false;
    try {
      Scanner scanner = new Scanner(dataFile);
      String line;
      while (scanner.hasNext()) {
        line = scanner.nextLine();
        try {
          data.add(Integer.parseInt(line));
        } catch (NumberFormatException e) {
          e.printStackTrace();
          err = true;
        }
      }
      scanner.close();
    } catch (FileNotFoundException e) {
      e.printStackTrace();
      err = true;
    }

    return err;
  }

  public static void main(String[] args) {

    // Définition int & booléen nécessaires ici
    System.out.println("-----------------------");
    System.out.println("APPLICATIONS BESOINS");
    System.out.println("-----------------------");
    Console console = System.console();

    //System.out.println(console == null);

    int pinSize = 0;
    int nbTry = 0;
    boolean authenticated = false;

    // On va demander à saisir un pin de 4 digits : tant que l'utilisateur
    // ne saisit pas 4 digits, on boucle
    do {
      do {

        char passwordArray[] = console.readPassword("Enter pin: "); // Demande
                                      // de
                                      // saisie
                                      // du
                                      // pin
        pinSize = passwordArray.length;

        if (pinSize != 4) { // On prévient l'utilisateur que le pin se
                  // compose de 4 chiffres, sinon Ok on passe
                  // à la vérif.
          System.out.println("Pin must be 4 digits");
        } else {
          System.out.println("Checking...");
        }

        ArrayList<Integer> pins = new ArrayList<Integer>(); // Nos pins
                                  // sont mis
                                  // dans un
                                  // Liste
        readPinsData(new File("bdd.txt"), pins); // On lit dans notre
                              // BDD de pins
        // System.out.println(pins);
        // System.out.println(passwordArray);

        String[] thePins = new String[pins.size()];
        for (int i = 0; i < thePins.length; i++) {
          thePins[i] = pins.get(i).toString();
        }

        String passEntered = String.valueOf(passwordArray);

        for (int i = 0; i < thePins.length; i++) { // Recherche si pin
                              // bon et on print
                              // :)
          if (passEntered.equals(thePins[i]) && pinSize == 4) {
            System.out.println(":)");
            authenticated = true;
            break;
          }
        }

      } while (pinSize != 4); // Si la on saisit un pin qui n'a pas 4
                  // chiffres, on ne peux valider la demande,
                  // donc le nombre d'Essais n'est pas déduit
      if (!authenticated && pinSize == 4) { // Dans ce cas, on incrémente
                          // le nombre d'essais car le
                          // pin saisit n'est pas dans
                          // notre BDD et on print :(
        System.out.println(":(");
        nbTry++;
      }
    } while (nbTry < 3 && !authenticated);
  }
}

«База данных»:

1111
2222
3333
4444
5555
6666
7777
8888
9999

person hacks4life    schedule 24.03.2014    source источник


Ответы (1)


Предполагая, что виртуальная машина настроена на подключение к сети, она должна иметь такой же IP-адрес, как и любой другой компьютер в сети. Просто откройте сетевое соединение, как на любом другом компьютере.

Обратите внимание, что сетевые подключения виртуальных машин часто настраиваются для NAT, что означает, что только хост-компьютер имеет прямое подключение к виртуальной машине. Если вам нужно подключиться к ней откуда-то, кроме хост-компьютера виртуальной машины — например, с устройства Android, которое не является эмулятором, работающим на хосте — вам нужно настроить виртуальную машину для работы в сети с мостом, что дает ей прямой доступ к ЛВС.

person Wyzard    schedule 24.03.2014
comment
Спасибо, Визард. Но я имею в виду, как в моем коде я могу получить доступ к файлу, который находится на виртуальной машине? - person hacks4life; 24.03.2014
comment
И ответ заключается в использовании сетевого подключения. Вам не нужно делать ничего особенного для связи с виртуальной машиной, в отличие от обычного физического компьютера. Это просто еще один компьютер в сети. - person Wyzard; 24.03.2014
comment
Я не понимаю. Вы имеете в виду использование сетевого подключения в коде? Я не слежу.. Может я не ясно выразился? Я имею в виду, что я могу использовать в своем java-коде для чтения файла .txt, если он не в корне моего проекта, а на этот раз на виртуальной машине? Потому что я думаю, что на этот раз я не смогу использовать то, что в моем коде, верно? - person hacks4life; 24.03.2014
comment
Похоже, ваш настоящий вопрос заключается в том, как общаться с другим компьютером из программы Java; тот факт, что другой компьютер является виртуальной машиной, не имеет значения. Например, вы можете поместить файл на веб-сервер в виртуальной машине и загрузить его с помощью HTTP-клиента на Java. - person Wyzard; 24.03.2014