Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339

    java.lang.NullPointerException

    Ciao a tutti.

    Non capisco perchè ricevo un eccezione del tipo java.lang.NullPointerException mentre interagisco con dei DatagramSocket.

    Praticamente ricevo dei parametri ed invio un pacchetto :

    codice:
    		public void run(){
    			
    			try{
    				while(true){
    					
    					InputStream in = s.getInputStream();
    					byte [] richiestaByte = new byte [1000];
    					int numByte = in.read(richiestaByte);
    					richiestaByte = Arrays.copyOf(richiestaByte , numByte);
    					
    					String richiesta = new String(decipher.doFinal(richiestaByte));
    					int pos = richiesta.indexOf("@");
    					String ip = richiesta.substring(0,pos);
    					String messaggio = richiesta.substring(pos+1);
    					
    					in.close();
    					
    					byte [] buf = cipher.doFinal(messaggio.getBytes());
    					InetAddress clientAdd = InetAddress.getByName(ip);
    					DatagramPacket packet = new DatagramPacket(buf , buf.length , clientAdd , UDPPort);
    					dSocket.send(packet);
    				}
    			}catch(Exception err){
    				err.printStackTrace();
    			}
    		}
    La parte che riceve il pacchetto è fatta cosi :

    codice:
    		public void run(){
    			
    			try{
    				while(true){
    					
    					byte [] buf = new byte [1000];
    					DatagramPacket packet = new DatagramPacket(buf , buf.length);
    					dSocket.receive(packet);
    					String messaggio = new String(decipher.doFinal(packet.getData()));
    					System.out.println(messaggio);
    				}
    			}catch(Exception err){
    				err.printStackTrace();
    			}
    		}
    L'eccezione che ricevo riguarda la riga dove si invia il pacchetto.

    codice:
    dSocket.send(packet);
    Dove posso aver sbagliato?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    L'eccezione che ricevo riguarda la riga dove si invia il pacchetto.

    codice:
    dSocket.send(packet);
    Dove posso aver sbagliato?
    Mi verrebbe da pensare che sia dSocket ad essere null. Perché lo è comunque non si riesce a capire, visto che non si vede l'assegnazione e bisognerebbe vedere meglio il contesto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Quote Originariamente inviata da andbin Visualizza il messaggio
    bisognerebbe vedere meglio il contesto.
    Eccolo :

    codice:
    package appello19Febbraio2014; // OK
    
    
    import java.util.*;
    import java.io.*;
    import java.net.*;
    import java.security.*;
    import java.security.spec.*;
    import javax.crypto.*;
    
    
    
    
    class Host {
        
        private SendKey sk;
        private KeyPair kp;
        private Cipher cipher , decipher;
        private int UDPPort;
        
        public Host(int skPort){
            
            try{
            sk = new SendKey(skPort);
            sk.start();
            DatagramSocket dSocket = new DatagramSocket(UDPPort);
            
            }catch(Exception err){
                err.printStackTrace();
            }
            
        }//COSTRUTTORE
        
        class SendKey extends Thread{
            
            private ServerSocket sSocket;
            private int skPort;
            
            public SendKey(int skPort){
                
            this.skPort = skPort;
            
            try{
                sSocket = new ServerSocket(skPort);
                
            }catch(Exception err){
                err.printStackTrace();
             }
            
            }
            
            public void run(){
                
                try{
                    while(true){
                        
                        Socket s = sSocket.accept();
                        InputStream in = s.getInputStream();
                        in.read();
                        
                        KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
                        kpg.initialize(1000);
                        kp = kpg.generateKeyPair();
                        
                        decipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
                        decipher.init(Cipher.DECRYPT_MODE , kp.getPrivate());
                        cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
                        cipher.init(Cipher.ENCRYPT_MODE , kp.getPrivate());
                        
                        OutputStream out = s.getOutputStream();
                        out.write(kp.getPublic().getEncoded());
                    }
                }catch(Exception err){
                    err.printStackTrace();
                }
            }
        }//THREAD SEND KEY
        
        class gestisciRichieste extends Thread {
            
            private Socket s;
            private DatagramSocket dSocket;
            private int UDPPort;
            
            public gestisciRichieste(Socket s , int UDPPort){
                
                try{
                this.s = s;
                this.UDPPort = UDPPort;
                DatagramSocket dSocket = new DatagramSocket(UDPPort);
                this.start();
                
                }catch(Exception err){
                    err.printStackTrace();
                }
                
            }
            
            public void run(){
                
                try{
                    while(true){
                        
                        InputStream in = s.getInputStream();
                        byte [] richiestaByte = new byte [1000];
                        int numByte = in.read(richiestaByte);
                        richiestaByte = Arrays.copyOf(richiestaByte , numByte);
                        
                        String richiesta = new String(decipher.doFinal(richiestaByte));
                        int pos = richiesta.indexOf("@");
                        String ip = richiesta.substring(0,pos);
                        String messaggio = richiesta.substring(pos+1);
                        
                        in.close();
                        
                        byte [] buf = cipher.doFinal(messaggio.getBytes());
                        InetAddress clientAdd = InetAddress.getByName(ip);
                        DatagramPacket packet = new DatagramPacket(buf , buf.length , clientAdd , UDPPort);
                        dSocket.send(packet);
                    }
                }catch(Exception err){
                    err.printStackTrace();
                }
            }
        }// THREAD GESTISCI RICHIESTE
        
        public static void main (String [] args){
            
            try{
                int skPort = 6900;
                ServerSocket servSocket = new ServerSocket(6800);
                int UDPPort = 7700;
                
                Host host = new Host(skPort);
                
                while(true){
                    
                    Socket s = servSocket.accept();
                    gestisciRichieste gr = host.new gestisciRichieste(s , UDPPort);
                    
                }
            }catch(Exception err){
                err.printStackTrace();
            }
            
        }//MAIN
    
    
    }//HOST
    L'invio del pacchetto è nella classe gestisciRichieste
    Ultima modifica di Markus85; 17-06-2014 a 22:23

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    codice:
        class gestisciRichieste extends Thread {
            
            private DatagramSocket dSocket;
            
            public gestisciRichieste(Socket s , int UDPPort){
                
                try{
    
                DatagramSocket dSocket = new DatagramSocket(UDPPort);
    
        .....
    La cosa più evidente e lampante è che nel costruttore assegni ad una variabile locale dSocket. Non stai assegnando al campo di istanza dSocket, che pertanto resta a null.
    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
    Feb 2011
    Messaggi
    339
    Quote Originariamente inviata da andbin Visualizza il messaggio
    La cosa più evidente e lampante è che nel costruttore assegni ad una variabile locale dSocket. Non stai assegnando al campo di istanza dSocket, che pertanto resta a null.
    Accidenti che distratto

    Grazie. Ciao

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.