Je suis en train d'écrire le côté serveur d'un socket UDP en cours de traitement et de rencontrer une exception NullPointerException à chaque fois sur la ligne DatagramPacket receivePacket = new DatagramPacket(receiveData, 4096);
. Le côté client est un fichier Python. Voici le code pour le serveur. Les méthodes setup()
et draw()
sont appelées via différents fichiers de traitement.Traitement des sockets UDP
import processing.net.*;
import java.io.*;
import java.net.*;
import java.util.*;
//Server myServer;
DatagramSocket serverSocket;
byte[] receiveData;
InetAddress IPAddressList;
int portList = -1;
void setup(){
try{
DatagramSocket serverSocket = new DatagramSocket(21567);
}
catch (IOException e){
e.printStackTrace();
System.out.println(e);
}
byte[] receiveData = new byte[4096];
}
void draw(){
float P1,P2,P3;
print ("hello");
try{
DatagramPacket receivePacket = new DatagramPacket(receiveData, 4096);
serverSocket.receive(receivePacket);
String greeting = new String(receivePacket.getData());
System.out.println("From Client: " + greeting);
IPAddressList = receivePacket.getAddress();
portList= receivePacket.getPort();
P1 = Integer.valueOf(greeting);
print(P1);
print (greeting);
}
catch (IOException e){
System.out.println(e.getMessage());
}
for (int i=0;i<receiveData.length;i++){
print(receiveData[i]);
}
}
Après avoir modifié le code comme vous avez dit, je reçois le 'NullPointerException' sur la ligne suivante maintenant .. .'serverSocket.receive (receivePacket); ' – dawnoflife
Ah. Même problème avec la variable 'serverSocket': ne le déclarez pas localement. – Nayuki
Pour réitérer explicitement, ce que vous avez fait est que dans le bloc 'try' vous avez créé les variables' serverSocket' et 'receiveData', qui sont ** différents ** des mêmes noms' serverSocket' et 'receiveData' créés plus loin ci-dessus dans la portée extérieure. Cet effet est appelé ombrage du nom. – Nayuki