2012-03-19 31 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