2013-06-15 3 views
3

소켓 프로젝트에서 작업 중입니다. TCP로 ~ 4kb 데이터를 보내려고합니다. 나는 여기서 질문 할 필요가있다. 즉, TCP를 사용하여 ~ 4kb 데이터를 보내면 내 데이터 처리기 기능이이 데이터를 한 번 더 수신 할 수 있습니까? 즉 RECEIVE (서버 측) 함수가 2 번 반환 될 수 있습니다 (4KB 데이터를 한 번 보내면)? 이 사실을 이해할 수 있으면 자체 패킷 처리 시스템을 만들기 시작할 것입니다.소켓 데이터 처리 - 데이터 패킹 (TCP)

+1

이것은 일반적인 주제입니다 : http://tiny.cc/io에서이 중 일부를 다룹니다. –

+0

@MarcGravell 감사합니다! 나는이 기사를 읽을 것이다 :) –

+0

그 반대도 발생할 수있다. 여러 번의 전송으로 하나의 수신이 발생할 수 있습니다. TCP는 별개의 "메시지"가없는 단순한 스트림입니다. 다른 사람들이 지적했듯이 완전한 메시지 또는 여러 개의 메시지가 수신 된 시점을 식별 할 수있는 ** 프로토콜 **을 개발해야합니다. –

답변

3

간단히 말해서 : 예.

TCP는 바이트 스트림을 전송하지만 TCP 연결에는 메시지 (및 해당 경계)에 대한 언급이 없습니다. 2 바이트를 보내더라도 두 개의 별도의 청크로받을 수 있습니다 (이론적으로는 실제로는 거의 불가능합니다). 따라서 데이터 스트림에 몇 가지 표시를해야합니다. 나는 헤더가 적어도 다음 메시지 본문의 길이를 포함하는 모든 메시지 앞에 "메시지 헤더"를 작성하는 것이 좋습니다. 주의 할 것은 헤더 자체도 수신 할 때 조각화 될 수 있습니다.

0

TCP는 스트림 프로토콜입니다. 전송 한 순서대로 바이트 스트림을받습니다. 메시지를 재구성하려면 모든 메시지 앞에 메시지 길이를 접두사로 사용하거나 메시지 끝에 마침표로 구분 기호를 사용해야합니다.

비즈니스 요구 사항을 잘 모르지만 MQTT과 같은 이진 프로토콜이나 STOMP 같은 텍스트 기반 프로토콜을 사용할 수 있습니다.