Ciao a tutti
Ho fatto un piccolo programmino che si occupa di far mandare da un client una richiesta ad un server (host) che la gestisce e poi ricontatta il client .
Utilizzo i socket
La richiesta è mandata in forma codificata ;
Su eclipse faccio partire il server (host) e ok , faccio partire il client e mi da un eccezione del tipo java.lang.NullPointerException.
Mi sapete dire come mai ? Non riesco ad individuare la falla.
Vi posto il codice relativo a client ed host:
client :
Host :codice:package appello4Febbraio2014; import java.io.*; import java.net.*; import java.util.*; import java.security.*; import java.security.spec.*; import javax.crypto.*; public class Client extends Thread { MulticastSocket mSocket; InetAddress groupAddress; int multicastPort; InetAddress serverAddress; Socket gkSocket; //SOCKET PER RICHIEDERE E RICEVERE LA CHIAVE PUBBLICA int gkPort; Socket socket; int serverPort; Cipher cipher; public Client(InetAddress groupAddress , InetAddress serverAddress , int multicastPort , int gkPort , int serverPort){ this.groupAddress = groupAddress; this.serverAddress = serverAddress; this.multicastPort = multicastPort; this.gkPort = gkPort; this.serverPort = serverPort; try{ mSocket = new MulticastSocket(multicastPort); mSocket.joinGroup(groupAddress); gkSocket = new Socket(serverAddress , gkPort); socket = new Socket(serverAddress , serverPort); }catch(Exception err){ System.out.println(err); } }//COSTRUTTORE CLIENT public void run(){ try{ while(true){ OutputStream out = gkSocket.getOutputStream(); out.write(1); InputStream in = gkSocket.getInputStream(); byte [] publicKeyByte = new byte [1000]; int numByte = in.read(publicKeyByte); publicKeyByte = Arrays.copyOf(publicKeyByte, numByte); X509EncodedKeySpec ks = new X509EncodedKeySpec(publicKeyByte); KeyFactory kf = KeyFactory.getInstance("RSA"); PublicKey publicKey = kf.generatePublic(ks); cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); cipher.init(Cipher.ENCRYPT_MODE, publicKey); out.close(); in.close(); } }catch(Exception err){ try{ gkSocket.close(); }catch(Exception err2){ System.out.println(err2); } } }//RUN public boolean inviaRichiesta(String messaggio){ String e = ""; try{ OutputStream out = socket.getOutputStream(); out.write(cipher.doFinal(messaggio.getBytes())); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); e = in.readLine(); out.close(); in.close(); socket.close(); }catch(Exception err){ System.out.println(err); } return e.equals("Richiesta Accettata!"); }// INVIA RICHIESTA public void riceviMessaggio(){ byte [] buf = new byte [256]; DatagramPacket packet = new DatagramPacket(buf , buf.length); try{ mSocket.receive(packet); System.out.println(packet); }catch(Exception err){ System.out.println(err); } }// RICEVI MESSAGGIO public static void main (String [] args){ try{ InetAddress groupAddress = InetAddress.getByName("224.0.0.1"); int multicastPort = 5700; InetAddress serverAddress = InetAddress.getByName("127.0.0.1"); int serverPort = 5600; int gkPort = 5800; Client client = new Client(groupAddress , serverAddress , multicastPort , gkPort , serverPort ); client.start(); if(client.inviaRichiesta("Gio@falco85@ciao")) client.riceviMessaggio(); }catch(Exception err){ System.out.println(err); } }//MAIN }//THREAD CLIENT
Qualcuno mi aiuta?codice:package appello4Febbraio2014; import java.io.*; import java.net.*; import java.util.*; import java.security.*; import java.security.spec.*; import javax.crypto.*; public class Host extends Thread { int skPort; ServerSocket sSocket; KeyPair kp; Cipher decipher; int multicastPort; InetAddress groupAddress; MulticastSocket mSocket; public Host(InetAddress groupAddress , int multicastPort ,int skPort){ this.groupAddress = groupAddress; this.multicastPort = multicastPort; this.skPort = skPort; try{ sSocket = new ServerSocket(skPort); mSocket = new MulticastSocket(multicastPort); }catch(Exception err1){ System.out.println(err1); } }// COSTRUTTORE public void run(){ try{ while(true){ KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(1024); kp = kpg.generateKeyPair(); Socket s = sSocket.accept(); InputStream in = s.getInputStream(); in.read(); OutputStream out = s.getOutputStream(); out.write(kp.getPublic().getEncoded()); decipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); decipher.init(Cipher.DECRYPT_MODE, kp.getPrivate()); in.close(); out.close(); }//WHILE }catch(Exception err2){ try{ sSocket.close(); }catch(Exception err3){ System.out.println(err3); } }//CATCH }//RUN class gestisciRichieste extends Thread{ Socket socket; public gestisciRichieste(Socket socket){ this.socket = socket; this.start(); }//COSTRUTTORE public boolean VerificaUtente(String user , String password){ return true; } public void run(){ try{ while(true){ InputStream in = socket.getInputStream(); byte [] richiestaByte = new byte [1000]; int numByte = in.read(richiestaByte); richiestaByte = Arrays.copyOf(richiestaByte, numByte); byte [] richiestaDecriptata = decipher.doFinal(richiestaByte); String richiesta = new String(richiestaDecriptata); int pos = richiesta.indexOf("@"); String user = richiesta.substring(0,pos); String password = richiesta.substring(pos+1); int pos2 = richiesta.indexOf(password); String messaggio = richiesta.substring(pos2+2); in.close(); PrintWriter out = new PrintWriter(socket.getOutputStream(),true); if(VerificaUtente(user , password)){ out.print("Richiesta Accettata"); byte [] buf = new byte [256]; DatagramPacket packet = new DatagramPacket(buf , buf.length , groupAddress , multicastPort); mSocket.send(packet); out.close(); } else out.print("Richiesta Rifiutata!"); out.close(); } }catch(Exception err4){ try{ mSocket.close(); }catch(Exception err5){ System.out.println(err5); } } }//RUN }//THREAD GESTISCI RICHIESTE public static void main (String [] args){ try{ InetAddress groupAddress = InetAddress.getByName("224.0.0.1"); int multicastPort = 5700; int skPort = 5800; ServerSocket servSocket = new ServerSocket(5600); Host host = new Host(groupAddress , multicastPort , skPort); host.start(); while(true){ Socket s = servSocket.accept(); gestisciRichieste gr = host.new gestisciRichieste(s); } }catch(Exception err5){ System.out.println(err5); } }//MAIN }//THREAD HOST

Rispondi quotando


