2012-03-19 43 views
2

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

回答

2

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

看看你是否可以通过将你的类have-aDatagramPacket作为成员变量来使它工作,通过将你的类的方法包装在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转换。

+0

我认为这会起初工作,但我不认为它会。 DatagramSocket类的方法'send'仅将DatagramPacket作为参数。我开始认为只是在有效载荷中包含字符并在收到数据后解析数据可能会更容易。任何优点/缺点都会浮现在脑海中? – 2012-03-19 07:34:11

+0

我沿着这些线添加了一个设计示例,看看它是否有帮助! – oksayt 2012-03-19 07:50:47

+0

啊,我明白你的意思了。我认为这样做的工作量可能相同。我会玩弄它。非常感谢! – 2012-03-19 07:55:51