강의

멘토링

커뮤니티

Inflearn Community Q&A

kbs93472809's profile image
kbs93472809

asked

From Windows Sockets Programming Beginner to High-Performance Servers!

Multithreaded chat client (with examples)

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

Resolved

Written on

·

399

·

Edited

0

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

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

 

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

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

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

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

     

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

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

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

 

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

 

socket.ioudpiocptcpip

Answer 2

1

nullnull8537님의 프로필 이미지
nullnull8537
Instructor

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

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

0

kbs93472809님의 프로필 이미지
kbs93472809
Questioner

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

kbs93472809's profile image
kbs93472809

asked

Ask a question