Java编程中的UDP编程

时间:2012-03-19 07:19:55

标签: java network-programming udp

我应该使用UDP创建自己的'可靠传输协议'并用java编写。然而,为了使它成为一个更有条理的实现,我希望通过扩展创建我自己的DatagramPacket类版本,添加一些从远程主机接收时要读取的字节头,并传递这种新类型的数据包,这并不是非常困难通过类型转换通过常规DatagramSocket,或者也可以扩展DatagramSocket类以实现更多方法。原来DatagramPacket类是最终的,我太顽固了,不能放弃我的想法。任何人都知道如何通过这种方式来实现发送这种自定义数据包类型的能力?提前谢谢!

1 个答案:

答案 0 :(得分:2)

提供替代行为的子类化是一种方式,但它并不总是可行,因为您已经注意到了。你能以某种方式提出一个基于composition rather than inheritance的解决方案吗?

通过将类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次转化。

相关问题