• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    해결됨

MY_FILE_DATA가 serialization하지 않고도 전송 가능 이유

23.12.04 16:43 작성 조회수 141

0

 안녕하십니까? 선생님. 좋은 강의 올려주셔서 감사합니다.

Win32 API 기반 파일 송수신 코드에서 MY_FILE_DATA 구조체를 직렬화(serialization)/역직렬화(deserialization)하지 않고 어떻게 송수신이 가능한지 궁금합니다.

제가 알기로는 데이터 전송을 위해선 구조체의 각 멤버 변수를 char형 배열에 쌓에서(serialization) 보내고, 수신측에서 다시 구조체로 역직렬화를 해서 데이터를 해석하는 것으로 알고 있는데, 예제 코드에서는 그런 과정 없이 송수신이 잘 되어서 이게 TransmitFile()함수의 특성인지 궁금합니다.

 

감사합니다!

답변 1

답변을 작성해보세요.

0

파일 송/수신 예제는 파일에 대한 정보(MY_FILE_DATA)와 파일 내용 그 자체를 연이어(Stream) 송신하는 방식입니다. 소켓의 본질은 File 입니다. 우리가 File에 데이터를 Write하면 논리적으로 1차원 배열처럼 이어져 있는 구조가 되며 이를 통상 File stream이라 합니다. '직렬화'라는 개념은 이 점에 착안한 것입니다. 네트워크로 정보를 송/수신 할 때도 2차 메모리에 정보를 저장 할 때도 동일 하게 1차원 구조를 사용하게 됩니다.

아마도 Java나 다른 프로그래밍 언어를 공부한 경험에서 직렬화/역직렬화를 생각하신 것 같습니다. 말은 달라보이지만 그 본질은 다르지 않습니다. 둘 다 모두 단순 송/수신 혹은 쓰기/읽기 입니다. 물론 직렬화 기능을 제공하는 경우 단순히 1차원 구조로 데이터를 송/수신하는 것 외에 데이터를 압축해준다거나 논리적으로 객체단위로 잘려진 데이터를 연속된 구조로 만들어주는 것으로 보이긴 합니다. 그러나 객체라는 것도 모두 C언어의 구조체처럼 한 덩어리로 저장 가능한 자료구조에 불과합니다.

결과적으로 TransmitFile() 함수가 직렬화/역직렬화를 한다는 개념으로 볼 것이 아니라 파일 데이터를 송신해주는 함수라는 것만 기억하시기 바랍니다. 참고하시기 바랍니다. :)