서버와 클라이언트간에 주고 받는 패킷을 체계적이면서 유연하게 관리할 수 있는 방법이 있는지 궁금합니다.
글쓴이: vudghkzm / 작성시간: 금, 2007/04/06 - 5:27오후
서버와 클라이언트간에 주고 받는 패킷을 쉽고 유연하게 관리할 수 있는 방법이 있는지 알고 싶습니다.
예를 들어, c 에서 소켓으로 패킷을 보낼때 기본적으로 아래와 같이 합니다.
int maxPacketLen = 64; char packet[maxPacketLen]; int packetLen = 0; packetLen += sprintf("This is a example packet", packet + packetLen, maxPacketLen - packetLen); packetLen += sprintf("blar ~ blar~", packet + packetLen, maxPacketLen - packetLen); ... write(sock, packet, packetLen); ...
근데 위와 같이 패킷을 주고 받으면, 나중에 패킷이 확장되거나 수정된 후에는 패킷을 주고 받고 파싱하는 부분을 수정하는데 많은 cost가 들어가야 합니다.
그래서 패킷을 클래스와 1:1 대응시켜서 패킷을 주고 받고 파싱하는 방법이 있는지 궁금합니다.
예를 들어, class Packet 이란 클래스가 있고, 이 객체에 각종 set 메쏘드, get 메쏘드 등이 있어서 패킷에 값을 설정하고, 읽어온 패킷에서 원하는 값을 쉽게 얻고... 또한 패킷을 주고 받을 때에 대비해서 read, write 메쏘드가 있고... 등등
이와 같은 것을 하면 패킷을 좀 더 구조적이고 유연하게 관리할 수 있을 거 같습니다만.. 실제 이와 같은 방법을 제공하는 라이브러리나 프레임워크가 잇는지 궁금합니다.
굳이 위와 같은 방법이 아니더라도 서버<->클라이언트 간의 통신에서 패킷관리를 체계적이고 유연하게 관리할 수 있는 방법이 있다면 소개 부탁드립니다.
Forums:
패킷의 확장
안녕하세요.
패킷을 전송할 때에 구조체를 직접 전송하고 받고 할 수 있습니다. 물론 클래스를 그대로 전송하고 클래스를 그대로 받을 수도 있습니다.
char packet[maxPacketLen]; 와 같이 하지 마시고 아래와 같이 구조체로 해 놓고 패킷을 전송할 때에 아예 구조체를 패킷으로 만들어서 전달하면 어떨까요?
struct .. {
unsigned char version;
char header[256];
char data[1024];
int abc;
int etc .... ;
} PACKET;
수신할때에 위 구조체에 맞게 값을 얻어와서 구조체에 수신한 값을 집어 넣어서 사용을 하면 좋습니다.
제 경험으로는 위와 같이 작업을 할 때, 패킷의 구조가 변해야할 때, 상당히 자유로웠습니다. 패킷에 구조의 버젼을 두고 버젼바다 따로 처리를 할 수 있구요...
라이브러리나 프레임은... 코드프로젝트나 코드구루에서 충분히 찾을 수 있을 것입니다.
프레임워크로는... 기억이 가물 가물한데 ... 화상 통신을 위한 UDP 의 H.323 쪽의 라이브러리가 있을 것입니다. 참고하시면 도움이 될지도...
---------------- --------------------------
전신권태,피부발진,기미,주근깨,여드름 증상 보유
전신권태,피부발진,기미,주근깨,여드름 증상 보유
댓글 달기