Отправка объектов через сеть с использованием UDP в Java - PullRequest
3 голосов
/ 23 ноября 2010

Я не нашел точного ответа на имеющуюся у меня проблему, поэтому я все равно задам этот вопрос, и если я действительно сделал репост вопроса, который уже был задан, я приношу свои извинения.

Я выполняю еще одно лабораторное задание для своего Java-класса, и для лабораторной работы на этой неделе я должен сделать UDP-сервер для отправки объекта Message по сети, а затем должен сделать UDP-клиент для чтения в этом Сообщение. Само Сообщение - это просто Объект, который имеет сообщение String и имя пользователя String; довольно произвольно. Сообщение сериализуемо.

Теперь у меня проблема с тем, как на самом деле отправлять этот объект сообщения по сети в DatagramPacket? Фактический конструктор включает в себя байтовый массив, размер массива, адрес InetAddress и номер порта. Последний вопрос: как узнать размер массива и как превратить мое сообщение в байты для отправки?

1 Ответ

9 голосов
/ 23 ноября 2010

Вам необходимо сериализовать ваш класс сообщений в байтовый массив.Это будет байтовый массив, который вы отправляете (и в этот момент будет легко получить размер).

На клиенте вы захотите десериализовать байтовый массив обратно в объект Message.

Java предоставляет набор классов для обработки сериализации / десериализации, и объект, который вы хотите сериализовать, должен реализовывать интерфейс «Сериализуемый».

Примерно так будет работать:

// Serialize to a byte array
ByteArrayOutputStream bStream = new ByteArrayOutputStream();
ObjectOutput oo = new ObjectOutputStream(bStream); 
oo.writeObject(messageClass);
oo.close();

byte[] serializedMessage = bStream.toByteArray();

И на принимающей стороне:

ObjectInputStream iStream = new ObjectInputStream(new ByteArrayInputStream(recBytes));
Message messageClass = (Message) iStream.readObject();
iStream.close();

Обратите внимание, вы должны создать общий интерфейс, который будет использоваться совместно клиентом и сервером, что позволит легко сериализовать / десериализовать полезную нагрузку.

...