해결된 질문
작성
·
260
·
수정됨
0
강의에서는 서버에서 정해진 데이터(id, hp, 공격력)를
클라쪽으로 broadCast 하고,
클라에서는 Recv만 하고 있는데,
클라쪽에서도 Send하고
서버에서 Recv하는 echo방식으로는
어떻게 수정해봐야할까요..? ㅠ
목적은 Win32APi로 만든 클라이언트 2~3개정도 켜서 PacketHandler까지 구현된 Server와 붙혀서 이동동기화 부터 시도하고 있습니다
그래서 클라이언트 1개에서 만약 이동했다면 그 행동이
서버랑 다른 클라이언트에도 똑같이 보이게하고 싶습니다
ClientPacketHandler에 ServerPacketHandler의 Make_S_TEST 함수를 복붙하고
GameServer의 방법과 같이 BroadCast를 해야할지 아니면 Send함수를 따로 구현해야 할지 방향을 못잡겠습니다.
답변 1
1
안녕하세요, 인프런 AI 인턴입니다.
Win32API를 이용하여 MMORPG 게임 서버와 클라이언트 간의 통신 구현에 대해 질문해주셨네요. 클라이언트에서 데이터를 서버로 전송하고, 서버에서는 받은 데이터를 다시 클라이언트로 브로드캐스트 하는 방식으로 이동 동기화를 하고 싶다는 의도로 이해되었습니다.
클라이언트에서 서버로 데이터를 전송할 때는 Win32API의 소켓 연결을 사용하여 Send 함수를 구현하여야 합니다. 서버에서는 이 데이터를 받아 Recv 함수로 처리하게 되는데, 이것이 기본적인 echo 서버의 작동 원리입니다.
이동 동기화를 위해서는 클라이언트가 이동 명령을 서버로 전송하면, 서버는 해당 이동 명령을 받고 다른 클라이언트에게 이 명령을 브로드캐스트하여 모든 클라이언트가 해당 플레이어의 이동을 볼 수 있도록 합니다.
클라이언트의 ClientPacketHandler
에 ServerPacketHandler
의 Make_S_TEST
함수를 복사하여 활용하는 것은 한 방법이 될 수 있습니다. 그리고 서버는 BroadCast
함수를 호출하여 모든 클라이언트에게 변경 사항을 알립니다.
즉, 각 클라이언트는 이동 명령을 서버로 Send
하고, 서버는 받은 명령을 처리하여 다른 클라이언트들에게 BroadCast
로 전송하는 구조를 구현해야 합니다. 이를 위해서는 클라이언트와 서버 모두에서 데이터를 보내고 받는 로직을 구현하셔야 하며, 서버는 브로드캐스트 로직을 통해 모든 클라이언트가 동기화될 수 있도록 관리해야 합니다.
클라이언트가 서버로부터 데이터를 수신할 때 해당 데이터를 처리하는 PacketHandler
를 구현하는 것도 중요합니다. 이 PacketHandler
는 서버로부터 받은 데이터를 기반으로 클라이언트의 상태를 갱신하고 화면에 반영하는 역할을 맡습니다.
네트워크 프로그래밍에 있어서 경험과 실험을 많이 해보시는 것이 중요하므로, 일단 기본적인 Send, Recv 기능을 구현하신 다음, 점차 복잡한 로직으로 확장해보시길 바랍니다.