본문 바로가기
코스웨어/13년 스마트컨트롤러

TCP/IP 일대다 통신 0619복습 _ 이수현

by 알 수 없는 사용자 2013. 6. 20.
728x90
반응형


서버와 클라이언트 1,2    통신

1) 서버 vs 클라이언트1 (빨간색 라인)

- 클라이언트 1 의 커뮤니케이션 소켓1이 서버의 랑데뷰 소켓에 접속

- 서버에서 커뮤니케이션 소켓1 생성

- 서버 커뮤니케이션 소켓1과 클라이언트 커뮤니케이션 소켓1이 통신


2) 서버 vs 클라이언트2 (녹색 라인)

- 클라이언트2 의 커뮤니케이션 소켓2가 서버의 랑데뷰 소켓에 접속

- 서버에서 커뮤니케이션 소켓2 생성

- 서버 커뮤니케이션 소켓2와 클라이언트 커뮤니케이션 소켓2가 통신


3) 서버 커뮤니케이션 소켓1 vs 서버 커뮤니케이션 소켓2 (검은색 라인)

서버 커뮤니케이션 소켓1과 서버 커뮤니케이션 소켓2가 통신하면서

  마치 클라이언트1과 클라이언트2가 직접 통신하는 것처럼 보임




실행 결과

< 서버 >

클라이언트 접속시 포트를 할당하며 현재 접속자 수를 카운팅하고

각 클라이언트에 번호를 매겨 관리

모든 채팅은 서버를 통해 클라이언트에 전달된다



< 클라이언트 1 >



< 클라이언트 2 >





소스 분석




LINE 

 설               명 


 78 ~ 79



 87 ~ 94


 96 ~ 105


 109  


 107 ~ 131


 133 ~ 140


 142 ~ 161


 163 ~ 166


 169 ~ 173



   소켓의 최대번호 = 서버 소켓 + 1

   접속자수 초기화


   for 문    :    소켓의 최대 번호는 클라이언트 접속마다 숫자가 달라짐


   select 함수가 에러나면 종료


   커뮤니케이션 소켓 생성. 클라이언트가 접속하면 그정보를 tempSock에 저장


   if 문    :    MAXUSER : 동시 최대 접속자 수 제한


   else if 문     :     서버의 키보드에서 입력받는 값을 모든 클라이언트에게 전송


   else 문     :      한 클라이언트로부터 받은 데이터를 모든 클라이언트에게 전송


   q 를 입력받으면 반복문 탈출


   서버의 랑데뷰 소켓과 모든 커뮤니케이션 소켓 종료










[ TIP ]


vi 단락 들여쓰기


방법 1) 확장 명령 모드에서 ( esc + : 상태 )

:16,22 >        ( 시작라인,끝라인 + 한칸 띄우고 + 탭이동방향 )

 < 는 왼쪽으로 들여쓰기


방법 2) 명령 모드에서 ( esc 상태 )

> 6 ↓    ( 탭이동방향 + 라인수 + 라인방향 )

            cf) d 3 ↓ 하면 커서에서 밑으로 3줄 잘라내기 하는것과 같은 원리






728x90