Эта проблема толкает меня к стене. Это для очень простой многопользовательской онлайн-игры, над которой я сейчас работаю.
В настоящее время я могу отправлять пакеты через udp своим клиентам, и они, кажется, получают их нормально. Однако, когда я отправляю сериализованный объект моему клиенту и десериализую на другом конце, я получаю исключения NullPointerException, когда пытаюсь получить доступ к нужным значениям. Я проверил, что объект правильно сериализован на стороне сервера (десериализовал его и проверил данные), поэтому я на 99% уверен, что с кодом для отправки пакета я что-то очень неправильно делаю.
Вот код для сериализации и отправки объекта «Датаграмма» с сервера:
DatagramPacket sendPacket = null;
byte[] buf = null;
//Serialize the datagram object to send as a UDP packet
try {
// Serialize to a byte array
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = new ObjectOutputStream(bos);
out.writeObject(data);
buf = bos.toByteArray();
out.close();
bos.close();
} catch (IOException e) {
}
try {
sendPacket = new DatagramPacket( buf, buf.length,
InetAddress.getLocalHost(), 4004);
} catch (UnknownHostException e){}
try {
DatagramSocket sendSocket = new DatagramSocket();
sendSocket.send( sendPacket );
changed = true;
}catch (IOException e) {}
сериализуемый объект «data» полон правильных значений; Я уверен в этом.
Другой соответствующий кодовый блок - это блок приема на стороне клиента:
public Datagram readDatagram() {
byte[] buff = new byte[20000];
DatagramPacket packet = new DatagramPacket(buff, buff.length);
DatagramSocket receiver = null;
try {
receiver = new DatagramSocket(4004);
receiver.receive(packet);
} catch (IOException e) {
System.out.println("ERROR2");
}
Datagram data = null;// = new Datagram();
try {
// Deserialize from a byte array
ByteArrayInputStream bis = new ByteArrayInputStream(buff);
ObjectInput in = new ObjectInputStream(bis);
data = (Datagram) in.readObject();
bis.close();
in.close();
} catch (ClassNotFoundException e) {
} catch (IOException e) {
System.out.println("ERROR3");
}
for (int i = 0; i < 35; i++) {
System.out.print(data.getLevel()[i]);
}
receiver.close();
return data;
}
Когда я пытаюсь прочитать какие-либо значения после этой десериализации, я получаю исключение NullPointerException. Если кто-то может указать мне правильное направление, я буду очень счастлив.
О, и я прямо сейчас отправляю в localHost специально, чтобы проверить все. Мой клиент и сервер работают на моем компьютере.