반응형

우리가 C언어를 공부하면서 처음으로 접했던 내용은 printf 함수와 scanf 함수를 사용해서

키보드와 모니터를 통하여 데이터를 주고 받는 프로그램 이었죠.

그 다음 배열, 포인터를  넘어가면 파일 입.출력에 대한 것들이 죠

이제 입, 출력 대상을 콘솔이나 파일이 아니라, 인터넷이라는 거대한 네트워크로 연결 되어있는

호스트(host : 네트워크에 연결되어 있는 임의의 컴퓨터)로 옮겨봅시다.

 

 

네트워크 프로그래밍이란, 멀리 떨어져 있는 호스트들이 서로 데이터를 주고 받을 수 있도록 프로그램을 구현하는 것이다. 이것이 전부입니다.

다만 파일과 달리 데이터를 주고 받을 대상이 멀리 떨어져 있기 때문에 소프트웨어 차원에서 호스트들간에 연결을 해주는 장치가 필요합니다.

이러한 기능을 하는 장치를 소켓(socket) 이라고 합니다

일반적으로 소켓 프로그래밍이라는 용어는 네트워크 프로그래밍이라는 용어와 같은 의미로 사용됩니다.

이제 간단한 서버 소켓 구현을 해봅시다.

소켓을 설명하기위해 더 구체적으로 전화망을 예를 들었습니다.

 

 

전화를 걸고싶은데 무엇이 필요할까요?

 

무엇이 필요하긴, 전화기가 필요하겟죠. 전화기는 멀리 떨어져 잇는 두 사람이 서로 대화할 수 잇도록

연결해 주는 매개체이죠. 소켓이란 멀리 덜어져 있는 두개의 호스트(host)를 연결시켜 주는 매개체 역할을 합니다.

네트워크프로그래밍에서 소켓이 필요한 이유는 바로 그것이죠.

 

그런데 소켓이 어렵게 느껴지는 이유는 뭘까요?

전화 같은 경우는 전화국에서 전화망을 다 생성하고, 전화번호도 할당해주고 알아서 다 해줍니다.

실제로 우리가 하는건 전화기를 사용하는거죠.

 

하지만 앞으로 만들 네트워크 소켓은 전화국에서 대신해주지 않고, 우리가 직접 가설을 해야합니다.

이러한 것들이 소켓프로그래밍을 어렵게 느끼게 하는 이유인데요, 몇번 해보면 별로 어렵지 않습니다.

다음에 소개할 함수는 소켓을 생성하는 함수입니다. 자세한 사항은 나중에 다루기로 하고,

여기서는함수의 이름과 역할정도를 알고 넘어가기로 합시다.

 

소켓을 생성하는 함수 socket

 

함수의 반환값이 int죠?

호출 성공시 파일 디스크럽터를 리턴하고, 실패시 -1을 리턴합니다. (디스크럽터는 후에 설명하겠습니다.)

 

어 그렇다면 내 전화번호는 뭐지?

우리의 최종 목표는 누군가에게 걸려 오는 전화를 받는 것입니다. 그리고 그 순간 뭐라고 응답을 해 주려면은,

나만의 전화번호가 있어야 할것 입니다. 그래야 우리가 위에서 장만한 전화기에 전화번호를 할당해 주겟죠?

소켓도 마찬가지입니다. 전화기에 전화번호를 할당하는 것처럼, 소켓에도 전화번호에 해당하는 소켓의 IP주소를

할당해야합니다.

 

소켓에 IP주소를 할당하는 함수 bind

성공시 0을 리턴하고, 실패시 -1을 리턴합니다.

 

 

자 전화번호도 받았다. 그럼 끝인가?

케이블이 전화에 연결되어있지 않으면 아무 소용도 없다. 케이블을 연결하면, 전화기가 전화를 받을 수 있는 상태가 됩니다.

전화를 받을 수 있는 상태라는 것은, 누군가 전화를 걸어서 연결 요청을 할수 잇다는 뜻이 됩니다.

소켓도 마찬가지로 이러한 상태가 되어야 합니다.

 

소켓을 연결 요청이 가능한 상태로 되게하는 함수 listen

성공시 0을 리턴하고, 실패시 -1을 리턴합니다.

 

 

드디어 전화벨이 울린다!

그렇다면 어서 수화기를 들어야겠죠. 그렇다는것은, 누군가 대화를 하기 위해서 연결을 요청했는데 이를 수락한 것입니다.

소켓도 마찬가지로 누군가 데이터를 주고 받기 위해 연결 요청을 해 오면, 그 요청을 수락 할 수 있어야 합니다.

 

요청을 수락하는 함수 accept

성공시 파일 디스크립터를 리턴하고, 실패시 -1을 리턴합니다.

 

위 내용을 정리해 보자면,

전화기를 한대 구입하고, 전화번호를 할당하고,

케이블에 연결하고, 전화가 오길 기다리다가,

전화가 오면 승낙해서 대화를 하는것입니다.

 

이를 소켓에 비유해보면,

소켓을 하나 만들고, IP주소를 할당하고, 네트워크에 소켓을 연결하고,

요청이 오길 기다렸다가, 요청이 오면 수락해서 데이터를 주고 받는것 입니다

이같은 전체의 흐름을 이해하고, 앞으로 계속 중간중간 내용을 채워가기로 하죠.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기