본문 바로가기

old_Coding/WinSocket

[Server/Client] 기본함수로 구현한 에코 서버






구현환경 : 비쥬얼 스튜디오 2008
구현일시 : 2009년도 초
네트워크 기반 : TCP/IP, WindowsSocketProgramming
작성자 : 이영득



 이제 저도 공부시작한지 5~6개월 되는것 같네요.
이 소스는 올해 초쯤 서버 공부를 하면서 제일 처음 짜본 소스입니다.
기본 클래스 구성은 Acceptor, Session, Err 이렇게 3개를 가지고 있는데,
Err은 C언어의 함수개념으로 생각하고 모든 클래스에서 부를수있도록 정의했었군요.
여전히 제 서버의 기반은 비슷합니다.
순서만 잘 알아두시면 TCP/IP 접근은 굉장히 쉬운것같네요.

<Server 측 흐름도>
WSA 초기화 ->SOCKET 초기화 -> Bind(서버정보) -> Listen(대기상태로전환) ->
(1번 루프시작) Accept(클라이언트접속대기) ->(접속했다면 2번루프시작) ->
Recv(정보받음) -> Send(받은만큼 보내줌) -> (무한히 돌다가 클라이언트종료하면 2번 루프나옴) -> CloseSocket(클라이언트접속해재 & 리슨소켓정리) -> WSA 릴리즈

<Client 측 흐름도>
WSA 초기화 ->SOCKET 초기화 -> Connet(서버측에 접속을 요청하는 작업) ->
(1번 루프시작) Send(데이터전송) -> Recv(보낸만큼 받음) -> (무한히 돌다가 클라이언트종료하면 1번 루프나옴) ->CloseSocket(서버와 통신한 소켓해제) -> WSA 릴리즈


길게 풀어서 쓰니까 길이가 좀 되네요.
간단하게 그림으로 보면





 이런 흐름으로 진행됩니다.

 단, 주의하실점은
지금 올린 소스는 1개의 클라이언트만 접속할수 있으며,
각각의 함수 Accept, send, recv 등등 은
한번 함수 안으로 들어가면 그 작업이 수행될때까지 무한히 기다리게됩니다.
(이와같은 서버를 블로킹모드라고 합니다)


 이 소스를 구현할 당시 C++ 실력이 상당히 미숙해서
이상한 부분이 있을수도 있습니다.
그러려니 넘어가주세요-



'old_Coding > WinSocket' 카테고리의 다른 글

Circular Buffer (Ring Buffer) (*)  (2) 2009.12.26
[Server] 쓰레드를 이용한 에코 서버  (0) 2009.07.05