Программирование UDP на Java - PullRequest
2 голосов
/ 19 марта 2012

Я должен создать свой собственный «надежный транспортный протокол», используя UDP и написанный на java. Однако, не слишком сложно сделать его более организованной реализацией, я надеялся создать свою собственную версию класса DatagramPacket путем расширения, добавив некоторые байтовые заголовки для чтения при получении от удаленного хоста и передачи этого нового типа пакета через обычный DatagramSocket через typecast или, возможно, расширить класс DatagramSocket, чтобы реализовать больше методов. Оказывается, класс DatagramPacket является окончательным, и я слишком упрям, чтобы отказаться от своей идеи. Кто-нибудь знает какие-либо способы обойти это, чтобы достичь возможности отправлять такой тип пакета? Заранее спасибо!

1 Ответ

2 голосов
/ 19 марта 2012

Подклассы для обеспечения альтернативного поведения - это один из способов, но это не всегда выполнимо, как вы заметили. Можете ли вы как-нибудь придумать решение, основанное на составе, а не наследовании ?

Посмотрите, сможете ли вы заставить его работать, используя ваш класс have-a DatagramPacket в качестве переменной-члена, улучшая его поведение, оборачивая методы вашего класса вокруг DatagramPacket.

Похоже, вы хотите отправлять DatagramPackets в конце, но с некоторой специальной обработкой в ​​дополнение к тому, что уже делает DatagramSocket. Вот дизайн, который приходит на ум (я уверен, что есть много других):

class JayPacket {

    private byte[] payload; // Payload without any flow control bytes

    // Other flow control magic

    public DatagramPacket asDatagramPacket() {
        // Package this instance's payload plus your flow control bytes 
        // into a DatagramPacket
    }

    public static JayPacket fromDatagramPacket(DatagramPacket datagramPacket) {
        // Parse the control bytes out of the given DatagramPacket 
        // and construct a JayPacket
    }
}

Тогда другой класс обернулся бы вокруг DatagramSocket, чтобы управлять JayPacket <--> DatagramPacket преобразованиями.

...