이번 주에 해볼 것

  1. 지난 주 재설계한 class diagram을 기반으로 현재 구현에 반영하기
  2. static한 World 생성 코드 구현(Net, Bottom)
  3. Server에 신규 Player 접속 시 Player 캐릭터 생성 코드 구현

버그 하나 먼저 수정이 필요할 듯. 어떨 때에 클라이언트 연결하면 무한으로 0 packet을 보내고 있는 것 같은 상황이 생길 때가 있다.

image.png

  1. client가 0byte를 보내고 있다. 어떻게 가능

현재 코드로 미루어, client에서 25byte의 0을 보내고 있다.

image.png

서버에서 echo로 보내고 있던 코드를 주석 처리하니, 우다다다 발생하던 문제는 사라졌다.

서버가 25bytes 데이터를 보내고 있는데, 클라이언트에서 0으로 리턴한 byte의 길이가 0이다. 뭘까?

image.png

서버가 73bytes를 보내도록 했다. 그랬더니 received 응답으로 73bytes의 0이 전달되었다. 이게 무슨 일일까?? received로 도착한 수 만큼 close socket을 호출하기도 했다. received를 받은 수 만큼 close socket을 호출한다니…

image.png

클라이언트쪽 로그를 보니, Send를 호출한 이력이 없다. 그런데 client의 읽은 bytes가 146이다. 서버가 보낸 것의 2배로 받았다. ???

문제가 있을 땐, client쪽에서 받는 데이터의 양이 2배가 된다. 2배의 내용은 단순히 똑같은 데이터가 2개 들어오는 것이다. 나중에 이렇게 문제가 있는 패킷을 서버에서 보낸 수만큼 close event가 한 번에 발생한다. client에서는 보낸 내용이 없는데, 서버에서는 received로 보낸 패킷의 양이 발생하고 있다.

일단 서버에서 분명히 이상하게 주는 게 있다. 클라이언트에서 같은 데이터를 2배로 받았기 때문.

혹시 같은 클라이언트에게 소켓을 여러 개 만들고 있나? listen socket은 접속할 때 1번씩만 호출되고 있다.