2010-11-23 2 views
2

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

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

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

ответ

7

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

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

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

Что-то, как это будет работать:

// 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(); 

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

+0

Аах! Это прекрасно, и именно то, что я искал! Спасибо огромное! – 2010-11-23 14:11:53

Смежные вопросы