본문 바로가기
Delphi Tip/통신

소켓 프로그래밍 기법의 활용 1편

by MonoSoft 2021. 12. 16.
728x90
반응형

소켓 프로그래밍 기법의 활용 1편

 

소켓 프로그래밍 기법의 활용
(Using Socket Programming Techniques)

 

윈도우에서의 프로세스간 통신 기법으로는 명명된 파이프, DCOM, DDE, 클립 보드와 

각종 네트워크 프로그래밍 기법 등을 이용할 수 있다. 

 

이 중에서도 윈도우 95와 윈도우 NT 3.5 버전부터는 

내부적인 통신 프로토콜로 기존의 NetBIEU와 함께 

TCP/IP를 사실상의 표준으로 인정하고 이를 지원하고 있다. 

 

또한, DCOM과 윈도우 소켓을 프로세스간 통신의 표준으로 삼고 있으며,

윈도우 NT 4.0 부터는 윈도우 소켓의 2.0 버전(WinSock 2.0)을 

사용하여 보다 강화된 소켓 프로그래밍을 지원하게 되었다.

 

이러한 소켓 프로그래밍을 위해서는 Win32에서

지원하는 API를 직접 이용하여 프로그래밍을 할 수도 있겠으나, 

델파이에서 지원하는 소켓 컴포넌트를 이용하면 

쉽게 소켓을 지원하는 어플리케이션을 지원할 수 있다.

 

이제부터 소켓 컴포넌트를 이용하는 방법과

소켓 프로그래밍 기법을 익혀보도록 한다.

 

소켓 프로그래밍의 기초

 

소켓이란....... 

네트워크 프로토콜을 구현할 때 여기에 저장된 데이터를 포함한 커다란 집합에 대한 핸들

 

쉽게 말하면 네트워크에 대한 파일 핸들이라고 생각하면 된다. 

네트워크 프로그래밍의 기본은 TCP/IP 연결을 하고, 


소켓을 생성해서 이를 전송하거나 받는 것이다.

 

소켓에는 원래 서버용, 클라이언트용 소켓​이 분리되어 있는 것은 아니다. 

 

그렇지만 델파이에서는 TServerSocket, TClientSocket 으로

분리된 소켓을 제공하고 있다. 

 

이들은 모두 TCustomSocket 클래스에서

상속받은 것으로 내부적으로는 동일한 소켓을 사용하고, 

 

사용 방법도 거의 비슷하다.

 

서버가 되는 소켓은 클라이언트측 소켓과는 달리 클라이언트의 

연결 요구를 기다리는 listen이라는 작업을 해야하고, 

클라이언트는 서버에 연결(connect)해야 한다. 

 

여기서 양측 소켓의 Active 프로퍼티를 True로 설정하면

서버와 클라이언트가 접속된다. 

또한, TServerSocket 클래스에는 여러 개의 클라이언트가 접속되었을 때 

이를 관리할 수 있는 기능을 추가로 가지고 있다.

 

IP 주소와 포트

델파이의 소켓 컴포넌트에는 Address와 Port라는 프로퍼티가 있다. 

Address 프로퍼티는 IP 주소를 나타내며, 

Port 프로퍼티는 서버로 들어오는 메시지를 통과시키는 번호이다. 

 

포트가 없으면 하나의 서버 컴퓨터에는

하나의 서버 프로그램만 설치할 수 있다. 

 

포트 번호를 이용해서 동일한 서버 컴퓨터에 여러 개의 서버 프로그램을 사용할 수 있다. 

 

예를 들어 메일 서버, 뉴스그룹 서버, 웹서버, FTP 서버, 텔넷 서버 등의 프로그램들은

모두 다른 포트를 사용한다.

 

이런 포트 번호 중 일반적으로 사용되는 서비스에 관한 것들이 있는데 

SMTP는 25, NNTP는 119, Telnet은 23, FTP는 21을 보통 사용한다.

 

소켓 과 소켓 연결 (Socket Connection)

소켓은 네트워크 어플리케이션이 네트워크 상의 

다른 시스템 사이를 통신할 수 있도록 도와주는 도구가 된다. 

 

각각의 소켓은 하나의 네트워크 연결로 생각할 수 있는데, 

여기에는 어플리케이션이 실행되는 시스템, 인터페이스 종류, 연결에 

사용된 포트에 대한 주소가 있어야 한다. 

 

그러므로, 소켓 연결에 대해서 충분히 알기 위해서는 

각 연결 부분에 대한 소켓의 주소를 반드시 알아야 한다.

 

이렇게 소켓 연결을 하기 전에 연결 부분을 담당하게 되는

소켓에 대한 정보를 제공해야 하는데, 

 

일부의 정보는 어플리케이션이 실행되고 있는

시스템에서 알아낼 수 있다. 

 

예를 들어, 각 클라이언트 소켓의 로컬 IP 주소에 대한 정보는 

운영체제에서 알아낼 수 있으므로 따로 제공할 필요가 없다.

 

따로 제공해야 하는 정보는 현재 작업하고 있는 소켓의 종류에 따라 달라지는데,

클라이언트 소켓은 연결하고자 하는 서버에 대한 정보를 제공해야 하며 

서버 소켓은 제공하는 서비스를 제공하는 포트에 대한 정보를 제공해야 한다. 

 

이러한 소켓 연결에 대한 정보에는 IP 주소와 포트 번호가 모두 포함된다.

 

호스트(Host)란 ?

호스트는 소켓을 포함한 어플리케이션이 동작하는 시스템을 말한다. 

 

이렇게 소켓에 대한 호스트를 지정할 때에는 

다음과 같이 표준 인터넷 주소로 사용되는 IP 주소 표기 방식을 많이 사용한다.

 

123.123.1.2

 

하나의 시스템은 하나 이상의 IP 주소를 지원하게 된다.

 

IP 주소는 기억하기도 어렵거니와 알아보기도 쉽지 않기 때문에, 

호스트의 이름을 지정하는 방식을 같이 사용하여 이러한 단점을 극복한다. 

 

이렇게 이름으로 된 방식의 IP 주소에 대한 앨리어스를

URLs(Uniform Resource Locators) 라고 하며, 

 

다음과 같은 도메인 이름과 서비스를 포함한 형태가 된다.


http://www.ExamSite.Com

서버 소켓은 시스템에서 로컬 IP 주소를 알아낼 수 있기 때문에 

호스트를 지정할 필요가 없다. 

만약 로컬 시스템이 하나 이상의 IP 주소를 가지고 있을 경우에는 

서버 소켓은 모든 IP 주소에 대한 클라이언트의 요구를 이용한다. 

 

서버 소켓이 연결되면 클라이언트 소켓은 리모트 IP 주소를 제공하게 된다. 

클라이언트 소켓은 반드시 호스트 이름이나 IP 주소를 입력해서

리모트 호스트를 지정해 주어야 한다.

 

2편 계속...............

 

728x90
반응형

댓글