안녕하세요?
직렬화 라이브러리(serialization lib.) 가 무엇인지는 생략을 하고,
네트워크 패킷을 보낼 때 OBJECT 를 직렬화 라이브러리를 이용하여, 직렬시키고, 전송하시는 분이 계신가요?
저같은 경우 다음의 문제가 생겼습니다. 아참 저는 boost::serialize 를 사용 했습니다.
첫째, 헤더에 바디의 사이즈를 넘겨야 하는데, 바디의 사이즈를 모름
둘째, 직렬화 시킨 데이터를 메모리로 만들기가 힘듬( ostream, istream 을 상속해서 무엇인가 만들어 줘야 될거 같습니다)
다음의 문제를 직면하게 되니, 네트워크용으로는 부적합하다는 생각이 들었는데,
혹시 네트워크용으로 직렬화 라이브러리 사용하는게 있나요?
아니면 이 문제를 해결 할 수 있는 방법을 알고 계시면 알려 주실수 있으시나요?
ps.
google protocol buffer 도 해봤는데, 이건 네트워크로 쓰기엔 더 안좋은거 같습니다.
혹시 직렬화 라이브러리 사용하는게 있나요?
Moderator: 류광
-
- Posts: 20
- Joined: 2008-12-09 10:12
안녕하세요.
얼마전에 보았던 C# Network서적에서 최익필님이 말씀하신 내용에
그나마 근접한 내용이 있기에 간단하게 글을 남겨 봅니다.
너무 간단하기 때문에 큰 도움은 될 것 같지 않네요..
이상입니다~
얼마전에 보았던 C# Network서적에서 최익필님이 말씀하신 내용에
그나마 근접한 내용이 있기에 간단하게 글을 남겨 봅니다.
너무 간단하기 때문에 큰 도움은 될 것 같지 않네요..
Code: Select all
// C#역시 직렬화를 위해 제공하고 있는 라이브러리가 있습니다.
IFormatter formatter = new SoapFormatter();
MemoryStream tmpStream = new MemoryStream();
// 직렬화한내용을 byte에 담아두고
formatter.Serialize( tmpStream, [직렬시킬데이터] );
byte[] data = tmpStream.GetBuffer();
// 길이를 바이트로 컨버팅.
int len = (int)tmpStream.Length;
byte[] size = BitConverter.GetBytes( len );
// 그리고 순서대로 전송.
sendStream.Write( size, 0, 4 );
sendStream.Write( data, 0, len );
sendStream.Flush();
tmpStream .Close();
Smile
-
- Posts: 98
- Joined: 2008-11-12 21:17
ostream 과 istream는 기본 생성자가 없습니다.
그래서, 그냥 써먹을 순 없고, std::streambuf 를 함께 넣어 주어야 하는데
std::streambuf 경우 생성자가 protected로 되어 있기 때문에, 상속을 통하지 않으면, 사용 할 수가 없습니다. STL에선 미리 파일버퍼와 스트림버퍼를 상속하여 미리 만들어 둔 상태입니다.
하지만 이 두개를 사용하여 길이를 재거나, 발송하기가 힘듭니다.((패킷이 날라 올때마다 파일 입출력해서 길이를 젤순 없고, 바이너리를 매번 스트링으로 인코딩 디코딩 할 순 없고)
지금까지 물어 본건
1. boost::serialize에서 직렬화 대상의 최종 사이즈를 알 수 있는 방법이 있는가?
2. boost::serialize에서 직렬화 대상을 메모리에 바로 쓸 수 있는 방법이 있는가?
였습니다. : )
간만에 STL 소스 보니, ... 뭐가 몬지 모르겠네요 : )
관심갖아 주셔서 감사합니다.
그래서, 그냥 써먹을 순 없고, std::streambuf 를 함께 넣어 주어야 하는데
std::streambuf 경우 생성자가 protected로 되어 있기 때문에, 상속을 통하지 않으면, 사용 할 수가 없습니다. STL에선 미리 파일버퍼와 스트림버퍼를 상속하여 미리 만들어 둔 상태입니다.
하지만 이 두개를 사용하여 길이를 재거나, 발송하기가 힘듭니다.((패킷이 날라 올때마다 파일 입출력해서 길이를 젤순 없고, 바이너리를 매번 스트링으로 인코딩 디코딩 할 순 없고)
지금까지 물어 본건
1. boost::serialize에서 직렬화 대상의 최종 사이즈를 알 수 있는 방법이 있는가?
2. boost::serialize에서 직렬화 대상을 메모리에 바로 쓸 수 있는 방법이 있는가?
였습니다. : )
간만에 STL 소스 보니, ... 뭐가 몬지 모르겠네요 : )
관심갖아 주셔서 감사합니다.