2012-03-19 2 views
2

UDP를 사용하여 내 자신의 '신뢰할 수있는 전송 프로토콜'을 만들고 java로 작성해야합니다. 그러나 더 조직화 된 구현을하기에는 너무 어렵지 않다. 확장을 통해 DatagramPacket 클래스의 자체 버전을 만들고, 원격 호스트로부터 수신 할 때 읽을 바이트 헤더를 추가하고,이 새로운 유형의 패킷을 전달하기를 바랬다. 타입 변환을 통해 정규 DatagramSocket을 통해, 또는 더 많은 메소드를 구현하기 위해 DatagramSocket 클래스를 확장 할 수도 있습니다. DatagramPacket 클래스가 최종적인 것으로 밝혀졌고, 너무 완고하게 내 생각을 포기합니다. 이러한 사용자 정의 패킷 유형을 전송할 수있는 방법을 알고있는 사람이 누구입니까? 미리 감사드립니다!자바에서 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 
    } 
} 

그런 다음 다른 클래스 주위 DatagramSocketJayPacket <--> DatagramPacket 변환을 관리하기 위해 포장한다.

+0

나는 이것이 처음에는 효과가있을 것이라고 생각했지만, 그렇게 생각하지는 않습니다. DatagramSocket 클래스의 'send'메서드는 DatagramPacket을 매개 변수로 사용합니다. 페이로드에 문자를 포함시키고 영수증에 따라 데이터를 구문 분석하는 것이 더 쉬울 수도 있다고 생각하기 시작했습니다. 모든 장단점이 마음에 들었습니까? –

+0

필자는 디자인에 선을 따라 예제를 추가했다. – oksayt

+0

아, 무슨 뜻인지 알 겠어. 나는 그것이 어느 쪽이든을하는 일의 동일한 총계일지도 모른다 생각한다. 나는 그걸 가지고 놀 것이다. 고마워요! –

관련 문제