我应该使用UDP创建自己的“可靠传输协议”并用Java编写。但是,要使其成为一个更有条理的实现不是太困难,我希望通过扩展来创建自己的DatagramPacket类版本,添加一些字节标头,以便在从远程主机接收时读取,并传递这种新类型的数据包通过常规的DatagramSocket进行类型转换,或者扩展DatagramSocket类以实现更多方法。事实证明,DatagramPacket类是最后的类,我太固执,无法放弃我的想法。任何人都知道有什么方法可以实现发送这种自定义数据包类型的功能吗?提前致谢!
最佳答案
子类化以提供替代行为是一种方法,但是正如您所注意到的,它并不总是可行的。您能以某种方式提出基于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
转换。