강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của kbs93472809
kbs93472809

câu hỏi đã được viết

Từ giới thiệu về lập trình socket Windows đến các máy chủ hiệu suất cao!

Ứng dụng trò chuyện đa luồng (có ví dụ)

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

Đã giải quyết

Viết

·

400

·

Đã chỉnh sửa

0

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

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

 

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

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

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

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

     

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

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

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

 

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

 

socket.ioudpiocptcpip

Câu trả lời 2

1

nullnull8537님의 프로필 이미지
nullnull8537
Người chia sẻ kiến thức

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

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

0

kbs93472809님의 프로필 이미지
kbs93472809
Người đặt câu hỏi

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

Hình ảnh hồ sơ của kbs93472809
kbs93472809

câu hỏi đã được viết

Đặt câu hỏi