인프런 커뮤니티 질문&답변

gamecoding님의 프로필 이미지
gamecoding

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

채팅 실습

LIst<구조체> 형태의 패킷을 보내는 방법이 있나요?

작성

·

782

0

List<구조체> 형태를 패킷으로 보낼려고 하는데 BufferWriter부분에서 List<구조체> 데이터를 쓸때 엑세스 위반의 오류가 나오게 됩니다.

List<구조체> 형태의 패킷을 보내는 방법이 있나요?

화면 캡처 2023-02-12 001307.png화면 캡처 2023-02-12 001222.png화면 캡처 2023-02-12 001108.png

답변 2

0

gamecoding님의 프로필 이미지
gamecoding
질문자

강사님 정말 감사합니다..

구조체 패딩 문제 였내요...

pragma pack을 사용하니 해결 되었습니다. 감사합니다 !!!

Rookiss님의 프로필 이미지
Rookiss
지식공유자

ㅎㅎㅎㅎㅎㅎ 그렇군요 축하드립니다.
저도 한 번 이쪽에서 아주 크게 데인 적이 있어서 남일 같지가 않군요 -_-
헤딩을 오래한 만큼 앞으로 두고두고 기억에 남을겁니다.
그럼 힘내세요

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

image
이렇게 하면 당연히 큰일납니다.
list, vector 모두 동작 할당된 힙 메모리의 주소를 잠시 들고 있는 것이라
반대쪽에 그런 주소를 보내줘봤자 이해를 못합니다.

우선 bw << players.size() 로 몇 명이 있는지를 보내주신 다음
플레이어 수만큼 for문으로 bw << struct데이터를 넣어주시면 됩니다.
그 부분을 반대쪽에서 파싱해서 size, struct (xsize개)를 꺼내쓰면 되겠죠

gamecoding님의 프로필 이미지
gamecoding
질문자

강사님이 말씀하신대로

리스트의 길이를 보내준다음 구조체의 데이터를 bw로 넣어서 클라이언트가 파싱 하는데 클라이언트는 리스트의 길이를 받아올때 이상한 값을 받아오고있어서 질문 드립니다...

화면 캡처 2023-02-12 014716.png화면 캡처 2023-02-12 014658.png

Rookiss님의 프로필 이미지
Rookiss
지식공유자

breakpoint를 걸어서 보내는 쪽 데이터를 확인해보시고 (size 포함)
breakpoint를 걸어서 클라에서도 받는 쪽 데이터를 하나씩 확인해보세요.
위 내용만으로는 저도 원인을 알 수 없습니다.
메모리를 까보는 것도 필요할 수 있습니다.

그런데 C# <-> C++ 연동인건가요?
그러면 더 조심할게 많아집니다. (struct Player의 패딩 문제 등)

gamecoding님의 프로필 이미지
gamecoding

작성한 질문수

질문하기