2014-10-18 3 views
0

들어오는 메시지의 끝을 식별하기 위해 다음과 같은 방법을 사용할 수 있습니다. 예 : 1. 데이터 자체 앞에 메시지 길이 넣기 2. 구분 기호 사용GCDAsyncSocket이 들어오는 메시지의 끝을 확인한 방법

그러나 GCDAsyncSocket은보다 포괄적 인 /보다 지능적인/일반적인 솔루션을 제공합니다. 그리고 낮은 수준의 TCP 프로토콜을 사용하여 메시지의 시작과 끝을 식별하는 것으로 보입니다.

어떻게 작성합니까?

답변

1

GCDAsyncSocket은 TCP 스트림을 사용합니다. TCP 스트림은 본질적으로 "메시지"를 정의하지 않으며, 이름에서 알 수 있듯이 단지 바이트 스트림입니다.

GCDAsyncSocket는 지정된 바이트 수를 수신되었을 때 읽기를 자동으로

  • readDataToLength:withTimeout:tag: 및 관련 방법에 대한 좀 더 쉽게 일을 완료하는 데 몇 가지 편리한 메소드를 추가 - 이것은 첫 번째 옵션과 함께 사용할 수 있습니다 당신 말하는.
  • readDataToData:withTimeout:tag:으로 종결 자 시퀀스를 지정하고 수신시 자동으로 읽기가 완료되도록 할 수 있습니다. - 언급 한 두 번째 옵션입니다.

이러한 기능을 지원하기 위해 TCP에 고유 한 것은 없지만 GCDAsyncSocket의 작성자는 이러한 솔루션을 원시 스트림 위에 간단히 구현했습니다.

+0

고마워요. 내 질문에 GCDAsyncSocket 두 개의 연속 된 메시지가 들어오는 경우 메시지의 끝을 알 수있는 방법입니다. "Seperator"는 서버와 GCDAsyncSocket에 의해 일반적인 솔루션으로 정의되며 "Seperator"가 무엇인지 알지 못합니다. – ikzjfr0

+0

'readDataToData' 호출시 separator/terminator를 지정해야합니다. – Paulw11

+0

당신이 옳습니다. – ikzjfr0