2011-08-20 2 views
0

J'essaye d'authentifier l'utilisateur en envoyant une clé et un nombre aléatoire du client au serveur.Que puis-je faire pour éviter une exception NullPointerException?

Mon code ne m'affiche pas la réponse du client. J'obtiens une exception de pointeur nul quand j'exécute mon code comme ci-dessous.

import java.io.*; 
import java.net.*; 
import java.lang.*; 

class Client 

{ 
    public static void main(String args[]) throws IOException 
    { 

     BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
     System.out.println("enter the key value"); 
     int key=Integer.parseInt(br.readLine()); 
     double random=Math.random()*50; 
     System.out.println(random); 
     int response=key%((int)random); 
     System.out.println(key); 
     System.out.println("Authentication begins"); 
     Socket echoSocket = new Socket("localhost", 2000); 
     FileOutputStream fout=null; 
     DataOutputStream clientout=null; 
     clientout.writeDouble(random); 
     clientout.writeInt(key); 
     clientout.writeInt(response);  
     fout.flush(); 
     System.out.println("client is"+response); 
     echoSocket.close(); 

    } 
} 

import java.io.*; 
import java.net.*; 
import java.lang.*; 

class Server 
{ 
    public static void main(String args[]) throws IOException 
    { 
     int response2; 
     double random2; 
     int key2; 
     FileInputStream fin=null; 
     DataInputStream clientin=null; 
     ServerSocket s= new ServerSocket(2000); 
     Socket echoSocket=s.accept(); 
     random2=clientin.readDouble(); 
     key2=clientin.readInt(); 
     response2=clientin.readInt(); 
     response2=key2%((int)random2); 
     System.out.println("server is"+response2); 
     s.close(); 
     echoSocket.close(); 
    } 
} 
+2

S'il vous plaît votre code correctement en retrait. Il est impossible de lire de cette façon. –

+0

@JB Nizet: ohh désolé je vais le faire –

+0

@Parth: "Mettre correctement" ne veut pas dire avoir tout avec la même indentation. Votre éditeur/IDE devrait avoir une fonction pour indenter le code, utilisez ceci avant de le copier. (Je l'ai fait maintenant pour vous.) –

Répondre

3

étapes en conserve pour résoudre la plupart des NullPointerException s:

  1. En savoir la trace de pile pour déterminer quelle ligne de code lance la NPE
  2. Mettre un point d'arrêt à cette ligne de code
  3. Utilisation de la débogueur, lorsque le point d'arrêt est frappé, gige dehors ce que la référence d'objet dans cette ligne est null
  4. Figure pourquoi cette référence est null (ce qui est la seule partie difficile réelle à ce jour)
  5. corriger la cause sous-jacente (potentiellement difficile)
+0

Que voulez-vous dire en insérant un point d'arrêt et en lisant la trace de la pile? –

+0

Généralement, lorsque vous voyez une exception telle qu'une exception "NullPointerException" dans la console, vous voyez un [trace de la pile] (http://en.wikipedia.org/wiki/Stack_trace) imprimé. Cela vous dira quelle ligne de code l'exception a été lancée. En ce qui concerne les points d'arrêt - utilisez-vous une sorte d'EDI, comme Eclipse, NetBeans ou IntelliJ? Ils ont tous des débogueurs intégrés que vous pouvez utiliser pour déboguer votre code. Voici un tutoriel qui explique comment utiliser le débogueur d'Eclipse: http://www.vogella.de/articles/EclipseDebugging/article.html –

+0

J'ai écrit mon code dans le bloc-notes et j'ai utilisé jdk 1.6 pour exécuter mon code. Je suppose que quelque chose ne va pas avec le code côté client cette ligne "clientout.writeDouble (aléatoire) ... je suppose que DataOutputStream doit être initialisé à une valeur ..am j'ai raison? –

Questions connexes