본문 바로가기

[ Windows Program ]/Windows API

클라이언트의 접속을 가능하게 하는 listen 함수 listen 함수는 특정 소켓을 클라이언트의 접속을 받을 수 있도록 만들어주는 함수입니다. 우리가 전화기를 사오고 전화번호를 할당받은뒤에는 뭘해야 할까요? 전화기 선을 연결해야겠죠. 그래야 전화가 걸려올테니까요. listen이 바로 그런 기능을 하는 함수입니다. socket 함수로 소켓을 생성하고 bind 함수로 주소를 설정한 다음에는 이제 클라이언트가 접속할 수 있도록 listen 함수를 호출해주어야 합니다. 아래는 listen 함수의 형식입니다. int listen( SOCKET s, int backlog ); s : 이 파라미터에는 bind된 소켓을 넣어줍니다. 이때 주의할점은 이미 listen된 소켓을 넣어주면 에러가 나게 됩니다. 주의하세요. backlog : 연결큐에 최대 몇개의 연결 처리할 .. 더보기
주소할당 함수 bind의 사용 이 단원 전에 2장으로 걸쳐서 주소에 대해 설명을 했습니다. 먼저 bind의 함수에 대해 알아보았고 바로 전단원 에서는 bind 함수를 사용하기 위한 네트웍바이트순서와 IP, port에 대해서 다루었습니다. 이제 여러분은 전화통신 상으로 비교를 해보면 자신의 전화기에 번호를 부여할 수 있는 함수를 다룰 수 있게 된것입니다. 이번 장에서는 bind를 사용한 프로그램을 직접 만들어보면서 그동안 배웠떤 네트웍 관련 함수들을 모두 사용해 봄으로써 어떻게 쓰이는지 확실히 짚고 넘어가보자 합니다. 프로그램이 어떤 흐름으로 돌아가는지를 잘 파악하는게 중요하다고 말씀드리고 싶네요. 먼저 윈속관련 함수를 사용하기 위해선 윈속관련 dll을 초기화 해야 한다고 했습니다. 이를 초기화 하는 이유는 '앞으로 윈속관련 함수들을 .. 더보기
주소 사용법( 주소체계, 바이트순서 ) 이번 단원은 네트웍 프로그래밍을 하기 위해서는 꼭 이해하고 넘어가야 하는 부분입니다. 중요한 만큼 최대한 자세히 다루려고 합니다. 시작해 볼까요? 우리가 이번 단원에서 배울내용은 크게 나누어서 다음과 같습니다. 무슨 내용을 배울때 어떤 내용이 핵심내용인지 파악하고 있다면 훨씬 수월하게 이해할 수 있겠죠. 1. IP와 port 2. sockaddr_in 구조체 3. 네트워크 바이트 순서( Network byte order ) 4. 주소 사용방법. 1. IP와 port에 대해서.. IP주소 모르시는분 없겠죠? 이에대해 굳이 정의를 해본다면 인터넷에 존재하는 사용자(호스트)들을 구분하기 위한 32비트 주소체계를 의미합니다. 이를 다른말로 IPv4(4자리의 IP)라고도 하죠. 지금 도스창에서 ipconfig를 .. 더보기
주소 할당 함수 bind 이번 단원에서는 bind 함수에 대해 설명드리고자 합니다. 클라이언트가 서버에 접속하기 위해서는 어떤게 필요할까요? 쉽게 생각해보면 주소가 있어야 겠다는 생각이 들겁니다. 정확히 말하면 클라이언트가 어떤 특정 서버에 접속하기 위해선 그 서버의 IP주소와 port를 알아야 접속이 가능한 겁니다. 그럼 잠깐 생각해 볼까요? 우리는 어떻게 주소와 포트 번호로 서버에 접속을 할 수 있는걸까요? 그건 서버측에서 bind함수를 호출해 놓았기 때문입니다. 전에 '흐름도'단원에서 클라이언트가 접속할 수 있도록 주소를 할당한다고 했습니다. 이럴때 쓰이는게 bind함수지요. 만약 서버에서 211.108.23.xxx라는 IP주소와 27015라는 port번호를 bind시켜놓았다면 클라이언트가 그 서버로 접속하기 위해선 211.. 더보기
소켓 프로그래밍 흐름도(클라이언트) 전 장에서 서버측의 흐름도를 살펴봤습니다. 클라이언트도 이와 비슷하지만 전화를 거는 사람과 받는 사람이 해야하는 일이 다르듯이 소켓프로그래밍도 서버와 클라이언트를 다른 방식으로 처리하게 됩니다. 클라이언트는 서버보다는 조금더 간단하게 구현이 되지요. 클라이언트 측에서는 bind함수를 호출해줄 필요가 없습니다. 접속요청이 들어오는건 서버뿐이니 주소를 할당하는건 클라이언트에겐 필요없겠지요. 마찬가지로 listen함수도 호출해줄 필요가 없습니다. 접속요청이 올리가 없기 때문에 접속요청을 수락하는 작업도 필요없기 때문이지요. 클라이언트의 프로그래밍 순서도를 짜보면 다음과 같습니다. 1. socket함수 : socket을 생성( 전화기를 장만 ) 2. connect함수 : 서버에 접속요청을 한다( 전화를 건다 ).. 더보기
소켓 프로그래밍 흐름도(서버) 네트워크 프로그래밍을 한번 쯤 해보신 분이라면 호출 순서가 조금 복잡하다고 느끼셨을지도 모릅니다. 그래서 개념적으로 설명을 드리고 함수를 설명하려 합니다. 하지만 여기서 말하는 함수를 모르셔도 아직은 상관 없습니다. 앞으로 다시 자세한 설명을 할테니까 말이죠. 우리가 네트워크 코드를 짤때 '전화기'에 비유해서 생각해 볼 수 있습니다. 네트워크 프로그래밍은 크게 둘로 '서버' 그리고 '클라이언트' 측으로 나눌 수 있습니다. 물론 서버와 클라이언트의 역할을 둘다 하는 프로그램을 만들 수도 있지만 그리 효율적인 방법은 아닙니다. 많은 사람들이 서버프로그램을 따로 만들어 놓고 다른 클라이언트들이 서버가 운영중일때 접속 할 수 있도록 하고 있습니다. 앞으로도 그런 방식으로 강좌를 진행할 겁니다. 그럼 서버는 무엇.. 더보기
소켓 생성 함수 socket() 윈속을 초기화 한 뒤에는 소켓을 만들어야 한다. 이럴때 사용하는 함수가 바로 socket함수이다. SOCKET socket( int af, int type, int protocol ); 파라미터들 [입력] af 주소 패밀리(address family)를 적어준다. 인터넷을 사용한다면 예외없이 이 값은 AF_INET 이다. [입력] type 어떤 소켓 타입을 사용할지를 적어준다. 이 값은 다음과 같이 크게 둘로 나뉜다 SOCK_STEAM - TCP방식을 사용한다 SOCK_DGRAM - UDP방식을 사용한다 [입력] protocol 이 값은 0으로 지정하면 저절로 그에 맞는 프로토콜을 사용하도록 한다. 자세한건 MSDN을 찾아보길 바랍니당~ 리턴값 이 함수는 SOCKET이라는 데이터형을 리턴해준다. 우리는 .. 더보기
윈속(WinSock)의 기초 윈속(Winsock)이란 윈도우용 소켓프로그래밍을 뜻하는 용어이며 유닉스의 BSD의 개념을 거의 그대로 적용한 인터페이스를 뜻합니다. 맞나? 개념적인것은 설명하지 않고 코딩쪽으로만 설명하겠습니다 이 윈속을 사용하기 위해선 먼저 ws2_32.dll 파일을 초기화 시켜줘야 합니다 이때 쓰이는 함수는 WSAStartup() 함수인데 앞으로 윈속을 사용할테니까 잘 좀 봐줘라~ 라는 의미로 애플리케이션 내에서 사용이 됩니다 함수 원형을 볼까요? int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData ); 두개의 인자를 받는군요 이 인자값엔 어떠한것들을 넣어줘야 하는지 알아보죠 [입력]wVersionRequested 사용할 윈속의 버젼값을 넣어줍니다 이때 MAKE.. 더보기