• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

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

23.02.12 00:19 작성 조회수 629

0

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

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

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

답변 2

·

답변을 작성해보세요.

0

gamecoding님의 프로필

gamecoding

질문자

2023.02.12

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

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

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

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

0

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

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

gamecoding님의 프로필

gamecoding

질문자

2023.02.12

강사님이 말씀하신대로

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

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

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

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