예제 #1
0
  private ArrayList<InetAddress> contatta_Tracker(Descrittore descr) {

    InetAddress server = null;
    ObjectInputStream data_in;
    ObjectOutputStream data_out;
    InputStream in;
    OutputStream out;
    ArrayList<InetAddress> lista = null;
    /* socket per la comunicazione TCP */
    SSLSocketFactory factory = null;
    SSLSocket socket = null;

    // ###### preparo l'indirizzo
    try {
      server = InetAddress.getByName("192.168.0.10");
    } catch (UnknownHostException e1) {
      e1.printStackTrace();
    }

    // ###### creo il socket

    if (descr == null) {
      System.out.println("## contatta_tracker di Download ha ricevuto parametro null ! ");
      return null;
    }

    System.out.println(
        "@ provo a contattare via TCP il Tracker a "
            + server.toString()
            + " porta "
            + descr.getTcp());

    try {
      factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
      socket = (SSLSocket) factory.createSocket(server, descr.getTcp());
    } catch (IOException e1) {
      System.out.println("# eccezione nella creazione socket verso il Tracker TCP");
      e1.printStackTrace();
    }

    System.out.println("@ socket creato ");

    if (factory == null || socket == null) {
      System.out.println("## la connessione ssl di Download ha ritornato null ! ");
      return null;
    }

    try {
      System.out.println("@ out_stream ");
      out = socket.getOutputStream();
      System.out.println("@ out ");
      data_out = new ObjectOutputStream(out);
      System.out.println("@ in_stream ");
      in = socket.getInputStream();
      System.out.println("@ in ");
      data_in = new ObjectInputStream(in);

      System.out.println("@ Downloader:  streams ok  ");

      data_out.writeObject(descr); // TODO Perchè ?
      data_out.flush();

      System.out.println("@ descrittore mandato  ");

      lista = (ArrayList<InetAddress>) data_in.readObject();
      if (lista == null)
        System.out.println(
            "@ ritornata lista vuota dal tracker riguardo :  "
                + descr.nome); // TODO sarebbe un caso plausibile
      else System.out.println("@ lista ricevuta :  " + lista.toString());

    } catch (IOException e) {
      System.out.println("# eccezione I/O nella creazione socket verso il Tracker TCP");
      e.printStackTrace();
    } catch (ClassNotFoundException e) {
      System.out.println("# eccezione C N F nella creazione socket verso il Tracker TCP");
      e.printStackTrace();
    }

    return lista;
  }
예제 #2
0
  @Override
  public void run() {
    // TODO Auto-generated method stub
    Descrittore descr = null;

    System.out.println("@ Downloader partito !!");

    if (Peer.prova == 0) {

      // contatto il server via RMI
      descr = contatta_server(this.nomefile);

      if (descr == null) {
        System.out.println("# RMI non ha trovato il descrittore per " + this.nomefile);
        return;
      } else if ((this.lista_peers = contatta_Tracker(descr)) == null) {
        System.out.println("# Downloader : problemi contattando il tracker per " + this.nomefile);
        return;
      }

      polling_man.aggiungi(descr.nome, (Integer) descr.getUdp());
      System.out.println("ho aggiunto la porta udp");

      if (Peer.gest_files.contiene(descr.nome))
        System.out.println("I metadati riguardo al file " + descr.nome + "sono già in memoria");
      else {
        FileAccess file_access = null;
        try {
          file_access = new FileAccess(new Rapp_file(descr.nome, descr.hash_array, false));
        } catch (FileNotFoundException e) {
          // TODO Auto-generated catch block
          System.out.println(
              "# Problemi con la creazione del file fisico di " + descr.nome + " !! ");
          e.printStackTrace();
          return;
        }

        int is_seeder = 0; // di default a 0 (falso)
        // gestore file ritorna l'eventuale condizione di seeder del peer riguardo al determinato
        // file
        if ((is_seeder = Peer.gest_files.aggiungi(file_access)) == 0) {
          // se non è un seeder
          System.out.println("@ File access creato !");
          vita_sociale(file_access, lista_peers);
          System.out.println("@ Vita sociale superato !");
        }
      }
    }
    /*
    if(Peer.prova==1) //TODO togliere poi questa
    {
    	FileAccess file_access=null;
    	try {
    		file_access = new FileAccess(new Rapp_file("babbo1", Peer.hash_babbo,false));
    	} catch (FileNotFoundException e1) {
    		// TODO Auto-generated catch block
    		System.out.println("# Problemi con la creazione del file");
    		e1.printStackTrace();
    	}

    	Peer.gest_files.aggiungi(file_access);

    	System.out.println("@ File access creato !");

    	InetAddress mio=null;
    	this.lista_peers=new ArrayList<InetAddress>();
    	try {
    		mio=InetAddress.getLocalHost();
    	} catch (UnknownHostException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	}

    	if(mio!=null)
    		this.lista_peers.add(mio);
    	else
    		System.out.println("# prendere il mio Indirizzo è andato male");

    	vita_sociale(file_access,this.lista_peers);

    	System.out.println("@ Vita sociale superato !");


    }*/

  }