[강좌]C# 소켓프로그래밍 - 1. 소켓프로그래밍의 개념

소켓프로그래밍이라고 말을 하면 많은 사람들이 어렵게 받아들인다. 왜 그런 반응이 나오는지에 대해 곰곰이 생각해보면 소켓프로그래밍이라고 하면 뭔가 네트워크 관련해서 하는 것 같은데… 네트워크라고 하면 하드웨어도 알아야 하고 와와와 뭣부터 공부를 해야하는거지??? 라는 고민에 빠져들기 때문이다. 네트워크 소켓프로그램을 만들기 위해서는 소프트웨어 외 하드웨어도 공부해야 한다는 부담감도 밀려들어온다. 하지만, 소켓프로그램이라는 것이 무엇인가? 소프트웨어이다. 우리는 소프트웨어 개발자 관점에서 소켓만 바라보면 된다. 물론, 다다익선이라고 하드웨어 지식도 있다면 좋겠지만 시작하는 단계에서는 다 알아야 한다는 부담감은 잠시 버려두자. 소켓 프로그램을 하기 위해서는 선수 지식이 몇 가지 필요하다. 강좌를 통해 차근차근 선수 지식을 쌓은 후 실제로 예제를 만들어보는 것으로 강좌를 마무리하려 한다.

우선, 우리가 필히 알아야 하는 소켓의 개념을 잡아보자.
그림1은 오늘날 우리의 네트워크 환경을 그린 것이다.

[그림 1- 네트워크 환경]

인터넷이라는 거대한 네트워크로 각 호스트가 연결되어 있다. A, B, C는 호스트(네트워크 상에서 특정한 호스트번호를 가진 컴퓨터)를 의미한다. 쉽게 영희네, 철수네, 영철이네 이렇게 생각해도 좋다. A와 B는 서로 통신을 어떻게 할까요? 메신저? 메일? 인터넷 폰? 컴퓨터를 이용해서 서로 통신을 하는 방법에는 여러 가지가 있다. 이게 가능한 이유가 바로 네트워크 프로그래밍이 가능하기 때문이다. 즉, 멀리 떨어져있는 호스트 간에 데이터를 주고 받을 수 있는 네트워크 소프트웨어를 만들어서 제공하기 때문에 호스트 간의 데이터 전송이 가능하게 된 것이다. 이를 소켓이라고 부른다. 많은 강의에서 소켓프로그래밍을 설명할 때 빠지지 않고 나오는 예가 전화기이다. 영희네에서 철수네 전화를 하기 위해서는 각 집에 전화기가 있어야 하고 전화번호를 할당해야 한다. 그리고 누군가는 먼저 전화를 걸어서 신호를 보내야 한다. 신호가 왔을 때 응답을 할 것인지를 판단 후 전화를 받게 되면 서로 연결이 되는 것이다. 소켓은 IP주소와 Port를 할당하여 호스트 간 연결을 해주게 된다. 개념이 어느 정도 왔다만 다시 한번 정리해보자. 소켓이랑 각 호스트간에 데이터 주고 받기를 가능하게 하는 네트워크 소프트웨어이다. .NET은 소켓프로그래밍을 쉽게 구현할 수 있게 기본 라이브러리를 지원해준다. 예제를 통해 상세한 소스를 확인 할 수 있을 것이다. 그 전에 어떤 기본 클래스들이 제공되고 있는지 확인만 하자.

Namespace

설명

System.Net

 

System.Net 네임스페이스는 현재 네트워크에서 사용되는 여러 프로토콜에 대한 단순한 프로그래밍 인터페이스를 제공합니다. WebRequest WebResponse 클래스는 플러그형 프로토콜의 기반이 되며, 각 프로토콜의 특정 사양에 관계 없이 인터넷 리소스를 사용하는 응용 프로그램을 개발할 수 있도록 하는 네트워크 서비스를 구현합니다.

System.Net.Sockets

System.Net.Sockets 네임스페이스는 네트워크에 대한 액세스를 엄격하게 제어해야 하는 개발자에게 Windows Socket(Winsock) 인터페이스의 관리되는 구현을 제공합니다.

TcpClient, TcpListener UdpClient 클래스는 TCP UDP 방식으로 인터넷에 연결하기 위한 자세한 정보를 캡슐화합니다.

.

다음 강좌에서는 프로토콜과 소켓의 타입인 TCP, UDP의 개념을 확인해보겠습니다.
수고하셨습니다^^
 
나의 작은 지식이 다른이에게 도움이 되길바라는 마음에.. JS..




 


Posted by 사나에