Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: socket in eccezzione

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    213

    socket in eccezzione

    ciao a tutti. ricordate il famoso programma per capire quali pc erno connessi alla rete e quali rispondevano al ping? bene quella parte sono riuscito a farla. ora però ho un problema sulla parte successiva cioè testare la porta 8000 del pc che risponde al ping. stranamente va in eccezzione e non riesco a capire perchè.

    codice:
    package javaapplication1;
    
    import java.io.*;
    import java.net.*;
    import java.lang.*;
    import java.util.*;
    import java.net.SocketException;
    import java.net.Socket;
    import java.net.SocketAddress;
    
    
    public class connessione {
    
        public static void main(String[] args)throws Exception {
    
           
           InetAddress indirizzo=null;
           NetworkInterface rete=null;
           byte []mioip=new byte[4];
           int[] altroip=new int[4];
           short s;
           int i;
           int j;
           int k;
           boolean x;
           boolean y;
           String nome;
           Vector ipcherispondono= new Vector();
           Vector stampanti=new Vector();
           Socket connesso;
    
           mioip=indirizzo.getLocalHost().getAddress();
           rete=NetworkInterface.getByInetAddress(indirizzo.getLocalHost());
           System.out.println(rete);
           List<InterfaceAddress> indirizzi = rete.getInterfaceAddresses();
           for (InterfaceAddress elem : indirizzi) {
               System.out.println(elem.toString());
               System.out.println(elem.getNetworkPrefixLength());
               s=elem.getNetworkPrefixLength();
               if(s==16){
                   altroip[0]=(int)mioip[0];
                   altroip[1]=(int)mioip[1];
                   for(i=30;i<256;i++){
                      for(j=229;j<256;j++){
                          altroip[2]=i;
                          altroip[3]=j;
                          mioip[0]=(byte)altroip[0];
                          mioip[1]=(byte)altroip[1];
                          mioip[2]=(byte)altroip[2];
                          mioip[3]=(byte)altroip[3];
                          indirizzo.getByAddress(mioip);
                          x=indirizzo.getByAddress(mioip).isReachable(5000);
                          if(x){
                              ipcherispondono.addElement(indirizzo);
                              System.out.print("\n"+altroip[0]+"."+altroip[1]+"."+altroip[2]+"."+altroip[3]+"pinga");
                              connesso=new Socket(indirizzo,8000);
      //                       y=connesso.isConnected();
        //                     connesso.close();
          //                    if(y){
            //                      System.out.println("è una stampante");
              //                }
                          
                         /*
                         else{
                              System.out.print("\n"+altroip[0]+"."+altroip[1]+"."+altroip[2]+"."+altroip[3]+"non pinga");
                          }*/
                          //System.out.println(altroip[1]);
                          //System.out.println(altroip[2]);
                          //System.out.println(altroip[2]);
                      }
                   }
               }
    
    
    }
    secondo voi a cosa è dovuta l'eccezzione?(nullpointer)

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Se ci dicessi dove viene sollevata l'eccezione e se indentassi ed usassi il tag CODE forse riusciamo ad aiutarti...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    213
    codice:
    package javaapplication1;
    
    import java.io.*;
    import java.net.*;
    import java.lang.*;
    import java.util.*;
    import java.net.SocketException;
    
    
    public class connessione {
    
        public static void main(String[] args)throws Exception {
    
           byte []mioip=new byte[4];
           int[] altroip=new int[4];
           InetAddress indirizzo=null;
           NetworkInterface rete=null;
           short s;
           int i;
           int j;
           int k;
           boolean x;
           String nome;
           boolean y;
    
    
           mioip=indirizzo.getLocalHost().getAddress();
           rete=NetworkInterface.getByInetAddress(indirizzo.getLocalHost());
           System.out.println(rete);
           List<InterfaceAddress> indirizzi = rete.getInterfaceAddresses();
           for (InterfaceAddress elem : indirizzi) {
               System.out.println(elem.toString());
               System.out.println(elem.getNetworkPrefixLength());
               s=elem.getNetworkPrefixLength();
               if(s==16){
                   altroip[0]=(int)mioip[0];
                   altroip[1]=(int)mioip[1];
                 
                   for(i=30;i<256;i++){
                      for(j=229;j<256;j++){
    
                          altroip[2]=i;
                          altroip[3]=j;
                          //System.out.print("\n"+altroip[0]+"."+altroip[1]+"."+altroip[2]+"."+altroip[3]);
                          mioip[0]=(byte)altroip[0];
                          mioip[1]=(byte)altroip[1];
                          mioip[2]=(byte)altroip[2];
                          mioip[3]=(byte)altroip[3];
                          //nome=indirizzo.getByAddress(mioip).getHostAddress();
                          x=indirizzo.getByAddress(mioip).isReachable(5000);
                          
                         
                                             
                          if(x){
    
                              System.out.print("\n"+altroip[0]+"."+altroip[1]+"."+altroip[2]+"."+altroip[3]+"pinga");
                              //nome=indirizzo.getByAddress(mioip).getHostAddress();
    //                          Socket connesso=new Socket(indirizzo,8000);  ECCEZZIONE!!!
      //                        y=connesso.isConnected();
        //                      connesso.close();
          //                    if(y){
            //                      System.out.println("è una stampante");
              //                }
                          
                         /*
                         else{
                              System.out.print("\n"+altroip[0]+"."+altroip[1]+"."+altroip[2]+"."+altroip[3]+"non pinga");
                          }*/
                          //System.out.println(altroip[1]);
                          //System.out.println(altroip[2]);
                          //System.out.println(altroip[2]);
                      }
                   }
               }
    
    
    }
    }
        }
    l'eccezzione viene eseguita al momento della creazione del socket

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da terso88
    secondo voi a cosa è dovuta l'eccezzione?(nullpointer)
    l'eccezzione viene eseguita al momento della creazione del socket
    Io vedo che a Socket passi la variabile 'indirizzo' (inizialmente a null) ma non vedo dove assegni qualcosa di valido a questa variabile.

    E poi comunque stai "provando" degli indirizzi che generi tu programmaticamente ... è chiaro che non è detto che a quell'indirizzo e quella porta (8000 poi ....) ci sia un socket in "ascolto".

    E inoltre usi isReachable() che se leggi la documentazione, dice che la implementazione "tipica" è quella di provare con un ICMP echo request (il "ping" in pratica) se ci sono i privilegi per farlo, altrimenti una semplice connessione TCP sulla porta 7. In entrambi i casi anche qui non è detto che l'host risponda a tali richieste .... e non c'è alcuna relazione tra questo test e la connessione che fai con il Socket.

    E per finire, tutte le tue operazioni di test e connessione le fai in modo sequenziale all'interno di un grosso loop. Risultato: ci impiega un tempo sicuramente alto per fare tutto quanto!! Queste cose si fanno generalmente in modo "concorrente", ovvero con più thread.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    213
    per quanto riguarda la isreachable io prima devo pingare i possibili indirizzi e vedere quali rispondono(effettivamente con ping x.x.x..x daconsole pingano) e poi su quelli che pingano vedere quali tra questi hanno la porta 8000 aperta. solo che non riesco a capire ilragionamento che mi hai fatto. non vedo che problema dia il ing al socket

    x=indirizzo.getByAddress(mioip).isReachable(5000); facendo così indirizzo dovrebbe "essere" mioip. cmq posso aggiungere velocemente un indirizzo.getByAddress(mioip) nell riga successiva per essere tranquillo.

    in questo momento la lentezza del programma non mi interessa più di tanto in quanto devo solo vedere se funziona. in caso positivo lo trasformo in un programma con i thread.

    grazie

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da terso88
    x=indirizzo.getByAddress(mioip).isReachable(5000); facendo così indirizzo dovrebbe "essere" mioip. cmq posso aggiungere velocemente un indirizzo.getByAddress(mioip) nell riga successiva per essere tranquillo.
    Lo ripeto: non c'è un punto in cui assegni qualcosa a 'indirizzo' se non all'inizio dove lo metti a null!!!

    E probabilmente non hai capito che metodi come getByAddress() e getLocalHost() sono metodi statici di InetAddress. Ed è molto fuorviante (per chi legge il codice) usare una variabile per invocare un metodo statico. Anche se tecnicamente funziona .... perché al compilatore, per invocare un metodo statico, interessa solo il tipo della variabile ... non il suo valore.
    Si dovrebbe usare il nome della classe es. InetAddress.getByAddress(.....)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    213
    scusa ma sinceramente continuo a non capire. se io:

    codice:
    x=indirizzo.getByAddress(mioip).isReachable(5000);
                          indirizzo.getByAddress(mioip);
    if(x){
                              System.out.print("\n"+altroip[0]+"."+altroip[1]+"."+altroip[2]+"."+altroip[3]+"pinga");
                              ipcherispondono.add(indirizzo);
    Socket connesso=new Socket(indirizzo,8000);
    non capisco come non faccio ad assegnare niente a indirizzo se faccio una getByAddress e non capisco come il socket mi dica che non va bene.
    scusa se sono duro di comprendonio eheheheh

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da terso88
    indirizzo.getByAddress(mioip);
    Qui spiegami dove è la assegnazione ..... io non la vedo!

    getByAddress() l'ho detto prima è un metodo static e restituisce un nuovo oggetto InetAddress.

    Quindi il modo corretto è:

    indirizzo = InetAddress.getByAddress(mioip);

    E il isReachable() lo puoi invocare su questo 'indirizzo'.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    213
    ok, ma la sostanza non cambia. anche come ho fatto io la isreachable funziona. cmq ho provato a fare come dici tu e il socket va cmq in eccezzione.

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da Alex'87
    se indentassi ed usassi il tag CODE forse riusciamo ad aiutarti...
    Come vorrebbe anche il Regolamento interno, al punto 6.

    Questa la correggo io, se possibile.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.