2012-07-10 4 views
0

파일 전송 애플리케이션 (대용량 파일)이 있는데 확장 가능하도록 만들려고합니다. 비동기 콜백을 사용하여 16Kb 청크로 메시지를 읽습니다. 메시지를받을 때마다, 그것을 "암호 해독"하고 처리하는 클래스로 보냅니다. 사용 된 형식은 간단합니다. (int) Command -> (int) MsgLen -> (String) Msg.비동기 tcp 메시지 C#을 읽는 가장 좋은 방법은 무엇입니까?

이것은 하나의 예일뿐입니다. 내가 여러 번 읽으 려한다면 문제를 처리하는 가장 좋은 방법은 무엇입니까? 1 개의 읽기에 여러 명령이 있으면 어떻게됩니까? 예를 들어, 끝까지 가깝고 전체 4와 반대로 명령에 2 바이트 만 있습니다.

대기열을 생각했지만 바이트를 추출하여 변환하는 것이 어려웠습니다. 더 좋은 옵션이 있습니까?

답변

1

가장 간단한 방법은 모든 미결 데이터의 byte[] 배열 (또는 유사한 데이터 구조)을 유지하는 것입니다. 새 데이터가 도착하면 항상 해당 배열에 추가 한 다음 완전히받은 메시지 만 제거하십시오.

걱정할 필요가있는 것은 다른 메시지가 처리되는 동안 메시지를받는 경우입니다. 따라서 byte[] 배열의 작업을 잠글 필요가 있습니다.

더 많은 "영리한"방법이 있지만 대부분의 경우 가장 간단한 방법이 가장 좋습니다.

+0

매번 데이터를 추출하기 전에 적절한 양의 데이터가 있는지 확인해야합니까? –

+0

오른쪽. 그래서 들어오는 데이터에 새로운 데이터를 기존의'byte []'배열에 추가 한 다음'MsgLen' 비트를 읽고'byte []. length'>'sizeof (MsgLen) + sizeof (Command) + MsgLen'입니다. 그렇다면 해당 데이터를 추출하고, 그렇지 않으면 더 많은 데이터를 기다립니다. –

관련 문제