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

김보성님의 프로필 이미지

작성한 질문수

Windows 소켓 프로그래밍 입문에서 고성능 서버까지!

멀티스레드 기반 채팅 클라이언트 (예제 포함)

멀티스레드 기반 서버 관련 질문..!

해결된 질문

작성

·

299

·

수정됨

0

  안녕하세요 널널한 개발자님, 덕분에 수업 잘 듣고 있습니다. :)

현재 멀티스레드 채팅 클라이언트, 서버 기반 수업을 듣고 해당 구조를 변경해서 작은 빙고 게임을 만들어 보고 있습니다.

 

해당 게임의 큰 틀을 짧게 요약하자면

  1. 클라 - 연결 요청 -> 서버 - 확인 후 번호 전달

  2. 3번째 클라 - 연결 요청 -> 서버 - 확인 후 모든 클라에게 보드판 및 게임 순서를 전달

  3. 클라 - 게임 순서에 맞는 클라가 빙고판 번호를 입력 -> 서버 - 확인 후 보드판 정보 업데이트 및 다시 모든 클라에게 전달 ....

     

이런 식으로 게임이 진행됩니다, 2번 동작까지는 잘 진행이 되는데 '문제' 3번 순서에서 클라가 빙고판 번호를 입력했을 때 서버로 전달이 되지 않아 보드판 정보 업데이트가 되지 않고 있습니다..

클라에서 서버로 메시지를 전달할 때 버퍼의 내용은 문제가 없었는데, 이상하게 서버로 전달만 하면 빈 버퍼가 전달이 되네요..

혹시나 서버 버퍼에서 소켓 입출력 버퍼가 Nagle 알고리즘에 의해 서버 프로세스로 전달이 되지 않은 건가 싶어서 소켓의 TCP_NODELAY 옵션도 설정해보았는데, 해결이 되지 않았습니다. whireShark를 이용해서 확인을 하고 있긴 한데, 아직 제 수준에서는 내용을 파악하기 힘드네요..

 

널널한 개발자님이라면 이런 상황에서 어떻게 문제를 해결하실 건가요??

 

답변 2

1

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

스스로 답을 찾으셨군요. 다행입니다. 😄

내용을 봤을 때 사소한 실수가 있었지 않았을까 생각하긴 했었습니다. 네트워크 프로그래밍 시 발생하는 문제는 클라이언트/서버 양쪽을 모두 확인해야 합니다. 잘못 보내는 문제 일 수 있고 반대로 잘 받지 못하는 문제일 수도 있기 때문입니다. 이 경험을 잘 살려두시면 좋을 것 같네요.

0

김보성님의 프로필 이미지
김보성
질문자

이유 찾았네요 send할 때 사이즈를 strlen()으로 잘라서 빙고 숫자 데이터가 전달되지 않았었네요. sizeof()로 크게 잘라내서 보내니깐 데이터가 잘 전달됩니당