Salve a tutti, ho scritto una piccola applicazione in java per il gioco del tris ( tutto testuale ), in cui faccio ciclare una volta un invio di dati tramite socket UDP e la volta successiva una ricezione di dati tramite una pocket UDP, in modo che due host possano comunicare fra loro.
Il problema è che l'indirizzo ip e la porta a cui inviare i dati dopo il secondo ciclo diventano null....
Ecco il codice sorgente:
Ed ecco l'errore:codice:private static void startGame( boolean myTurn ) throws NumberFormatException, IOException{ boolean isMyTurn = myTurn; int cel = -1; String comando = ""; // playerIp è una variabile statica della classe // userPort è una variabile statica della classe while( gameIs ){ if( isMyTurn ){ System.out.println("Tuo turno"); BufferedReader dallaTastiera = new BufferedReader( new InputStreamReader( System.in ) ); comando = dallaTastiera.readLine(); System.out.println("test dati: invio a " + playerIp + " : " + playerPort); cel = Integer.parseInt( comando ); // connessione con host remoto tramite protocollo UDP DatagramSocket conSocket = new DatagramSocket(); byte[] datiInvio = new byte[16]; byte[] datiRicevuti = new byte[16]; String testo = "cel=" + cel; datiInvio = testo.getBytes(); DatagramPacket pacchettoInvio = new DatagramPacket( datiInvio, datiInvio.length, playerIp, playerPort ); conSocket.send(pacchettoInvio); System.out.println("pacchetto inviato a " + playerIp + ":" + playerPort); DatagramPacket pacchettoRitorno = new DatagramPacket( datiRicevuti, datiRicevuti.length ); conSocket.receive(pacchettoRitorno); String testoArrivato = new String( pacchettoRitorno.getData() ); System.out.println("pacchetto ricevuto: " + testoArrivato); conSocket.close(); } else{ System.out.println("In ascolto sulla porta " + userPort); DatagramSocket serverSocket = new DatagramSocket( userPort ); byte[] datiRicevuti = new byte[16]; byte[] datiInvio = new byte[16]; DatagramPacket pacchettoRicevuto = new DatagramPacket( datiRicevuti, datiRicevuti.length ); serverSocket.receive(pacchettoRicevuto); String notifica = new String( pacchettoRicevuto.getData() ); InetAddress IP = pacchettoRicevuto.getAddress(); int prPorta = pacchettoRicevuto.getPort(); System.out.println("Pacchetto ricevuto: " + notifica + " da " + IP + ", " + prPorta); datiInvio = msg.getBytes(); DatagramPacket pacchettoRisposta = new DatagramPacket( datiInvio, datiInvio.length, IP, prPorta ); serverSocket.send(pacchettoRisposta); System.out.println("pacchetto inviato"); serverSocket.close(); } isMyTurn = !isMyTurn; }// while }// startGame
codice:In ascolto sulla porta 9191 Pacchetto ricevuto: cel=2 da /127.0.0.1, 49410 pacchetto inviato Tuo turno 4 test dati: invio a null : 0 creazione pacchetto invio [5] a null : 0 Exception in thread "main" java.lang.NullPointerException: null buffer || null address at java.net.PlainDatagramSocketImpl.send(Native Method) at java.net.DatagramSocket.send(DatagramSocket.java:625) ...

Rispondi quotando