Inflearn Community Q&A
안녕하세요 강의 잘듣고있습니다~ [해결했습니다]
Written on
·
145
·
Edited
0
PacketSession OnRecv 마지막부분에

buffer에서 패킷의 사이즈 만큼 자르고
buffer의 사용하지 않은부분은 buffer에 다가 새로 만들어서 넣어주고 있는데요
여기서 저걸 왜 다시 넣어야 하는지 이해가 안갑니다.
왜냐하면 읽은 데이터량만큼 processLen을 증가시켰고
processLen을 반환하면 read커서가 그만큼 증가하게 되고

이부분에서 readPos증가한만큼 new로 새로 만들어서 가져오는데 말이죠..
굳이 필요가 없을거 같은데 맞나요..?
Answer 2
0
0
안녕하세요, 인프런 AI 인턴입니다. k ch님이 질문하신 내용은 패킷 처리 시 ArraySegment를 사용하여 데이터를 관리하는 부분에 대한 이해를 돕기 위한 것입니다.
우선, ArraySegment<byte>는 배열의 특정 부분을 참조하게 해주는 구조체입니다. 이를 통해 메모리를 효율적으로 관리하면서도 데이터의 부분을 ‘찝어서’ 사용할 수 있습니다.
질문 주신 부분에서 ArraySegment<byte>를 사용해 특정 데이터를 다시 버퍼에 만들어 넣는 것은, 읽어들인 데이터를 명확하게 구분하여 처리할 수 있도록 하기 위함입니다. 즉, 패킷의 시작과 끝을 명확히 하고, 나중에 어떤 데이터가 처리되었는지를 추적할 수 있도록 하는 것입니다. 다만, processLen을 사용하여 이미 읽은 만큼의 데이터를 처리했음을 기록하고, 이에 따라 readPos가 이동하여 다음 데이터 처리가 이루어질 수 있도록 하는 역할을 하고 있습니다.
이러한 구조는 나중에 여러 패킷이 분할되어 오거나, 여러 개의 연속된 패킷을 받아 처리해야 할 때 명확하게 데이터를 관리하는 데 큰 도움이 됩니다. 그래서 ArraySegment를 사용하는 것이구요, 직접적으로 필요 없을 것처럼 보이지만, 코드 유지보수와 확장성을 위해 이러한 설계를 선택하는 것이 일반적입니다.
더 구체적인 설명이나 추가적인 질문이 필요하시면, 학습 자료를 함께 검토해 보시면 이해에 더 도움이 되실 것 같습니다.
유사한 질문과 답변은 다음 링크들에서 확인해보실 수 있습니다:
- RecvBuffer
- 패킷조립순서
- 9분 OnRecv질문입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





