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:
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
Ed ecco l'errore:
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)
	...