더북(TheBook)

즉, 보낸 개수와 받는 개수는 다를 수 있습니다. 또 보낸 데이터의 시작과 받는 데이터의 시작이 다를 수도 있습니다. 보낸 데이터의 끝도 마찬가지입니다. 그러나 결국 받은 데이터를 모두 이어 붙이면 보낸 데이터를 이어 붙인 것과 같습니다.

p108

▲ 그림 2-10 스트림 송신 횟수와 수신 횟수는 불일치할 수도 있음

 

그림 2-10을 보면 보내는 쪽에서는 aaa, bbb, ccc 총 3회의 데이터 송신 함수를 이용해서 보냈습니다. 그런데 받는 쪽에서는 각 수신 함수가 동일하게 받지 않습니다. 함수를 4회 호출해야만 모두 받습니다. 더구나 두 번째 수신 함수에서는 aaa의 뒷부분과 bbb가 합쳐진 데이터를 가져오기도 합니다.

낯설게 느껴지겠지만, 거의 모든 인터넷 프로그램은 이러한 특징을 고려할 수밖에 없습니다. TCP 프로토콜이 이러한 성질을 가지기 때문입니다.

따라서 스트림 형식으로 데이터를 송수신할 때, 데이터가 여러 부분으로 나뉘어 있다면 여러분이 이것을 따로 정의해 주어야 합니다. 예를 들어 어떤 데이터를 보내기 전에, 보낼 데이터 크기를 먼저 보낸다든지 데이터 시작이나 끝을 알리는 특정 기호를 추가한다든지 말입니다. 전자는 헤더를 붙이는 방식이라고 하며, 후자는 구분자(delimiter)를 이용하는 방식이라고 합니다.

헤더 방식의 간단한 예는 다음과 같습니다. 그림 2-11의 윗부분입니다.

• 첫 2바이트에는 보낼 데이터의 크기를 담습니다.

• 이어서 보낼 데이터를 담습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.