inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

PacketSession

안녕하세요 강의 잘듣고있습니다~ [해결했습니다]

168

k ch

작성한 질문수 56

0

PacketSession OnRecv 마지막부분에

image.png

buffer에서 패킷의 사이즈 만큼 자르고

buffer의 사용하지 않은부분은 buffer에 다가 새로 만들어서 넣어주고 있는데요

여기서 저걸 왜 다시 넣어야 하는지 이해가 안갑니다.

왜냐하면 읽은 데이터량만큼 processLen을 증가시켰고

processLen을 반환하면 read커서가 그만큼 증가하게 되고

image.png

이부분에서 readPos증가한만큼 new로 새로 만들어서 가져오는데 말이죠..

 

굳이 필요가 없을거 같은데 맞나요..?

C# unity 네트워크

답변 2

0

k ch

계속 생각해보니 buffer를 새로 찝어줘야 while반복문을 타서

image.png

위로 올라가 또다시 다음패킷을 헤더부터 파싱하는거였습니다.

 

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. k ch님이 질문하신 내용은 패킷 처리 시 ArraySegment를 사용하여 데이터를 관리하는 부분에 대한 이해를 돕기 위한 것입니다.

우선, ArraySegment<byte>는 배열의 특정 부분을 참조하게 해주는 구조체입니다. 이를 통해 메모리를 효율적으로 관리하면서도 데이터의 부분을 ‘찝어서’ 사용할 수 있습니다.

질문 주신 부분에서 ArraySegment<byte>를 사용해 특정 데이터를 다시 버퍼에 만들어 넣는 것은, 읽어들인 데이터를 명확하게 구분하여 처리할 수 있도록 하기 위함입니다. 즉, 패킷의 시작과 끝을 명확히 하고, 나중에 어떤 데이터가 처리되었는지를 추적할 수 있도록 하는 것입니다. 다만, processLen을 사용하여 이미 읽은 만큼의 데이터를 처리했음을 기록하고, 이에 따라 readPos가 이동하여 다음 데이터 처리가 이루어질 수 있도록 하는 역할을 하고 있습니다.

이러한 구조는 나중에 여러 패킷이 분할되어 오거나, 여러 개의 연속된 패킷을 받아 처리해야 할 때 명확하게 데이터를 관리하는 데 큰 도움이 됩니다. 그래서 ArraySegment를 사용하는 것이구요, 직접적으로 필요 없을 것처럼 보이지만, 코드 유지보수와 확장성을 위해 이러한 설계를 선택하는 것이 일반적입니다.

더 구체적인 설명이나 추가적인 질문이 필요하시면, 학습 자료를 함께 검토해 보시면 이해에 더 도움이 되실 것 같습니다.

유사한 질문과 답변은 다음 링크들에서 확인해보실 수 있습니다:
- RecvBuffer
- 패킷조립순서
- 9분 OnRecv질문입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

TLS 질문드립니다.

0

43

2

SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.

0

46

2

Unity Span

0

76

2

XML, Dll 차이점

0

105

2

Session 질문입니다

0

79

1

Write Read 커서 키워드

0

76

1

더미 클라이언트 수에 따른 OnDisconnect 발생

0

70

2

네트워크 Send 전담 스레드 배치

0

98

2

UnhandledException 으로 서버 터지는 경우

0

85

2

컨텐츠 단, 엔진 단

0

106

1

질문 있습니다

0

77

2

C# 게임서버 3D MMORPG

0

146

2

유니티6 버전

0

98

2

receive하는 부분과 send하는 부분의 차이

0

134

2

커서의 위치의 중요성

0

103

2

C++ 전혀 모르는데 C# 서버

0

169

2

강의에 질문이 있습니다

0

86

2

멀티스레드 이해도 질문

0

95

1

500 vs 500

0

130

3

OnAcceptHandler 액션 함수

0

61

1

이 정도 서버의 객관적인 수준이 궁금합니다.

0

191

2

36. Serialization #3 에서 string (name) 코드 수정 질문

0

82

2

외부 컴퓨터와의 통신 방법이 궁금합니다

0

106

1

스핀락 질문.

0

110

2