본문 바로가기

Study/TCP/IP

네트워크 프로그래밍의 이해

네트워크 프로그래밍이란, 멀리 떨어져 있는 호스트들이 서로 데이터를 주고 받을 수 있도록 프로그램을 구현하는 것이다. C에서의 파일 입출력과 달리 데이터를 주고 받을 대상이 멀리 떨어져 있기 때문에 소프트웨어 차원에서 호스트간에 연결해 주는 장치가 필요한데 이러한 기능을 해주는 장치를 소켓(socket)이라 한다. 그래서 일반적으로 소켓 프로그래밍이라는 용어와 네트워크 프로그래밍이라는 용어는 같은 의미로 사용되고 있다.

여기서 소켓이란, 멀리 떨어져 있는 두 개체를 연결시켜 주는 도구를 말하며 네트워크 프로그래밍을 이해하기 위해서 소켓의 구현에 대해 알아야 한다. 소켓을 설명하기 위해 조금 더 구체적으로 전화망을 예로 들어 이야기를 전개해 나가겠다.

전화기구입 전화를 사용하기 위해서는 전화기가 필요하다. 전화기는 멀리 떨어져 있는 두 사람이 서로 대화 할 수 있도록 연결해 주는 매개체이다. 소켓도 멀리 떨어져 있는 두개의 호스트(host)를 연결시켜 주는 매개체 역할을 한다. 아래는 소켓을 생성하는 함수이다.
#include <sys/types.h>
#include <sys/socket.h>

int socket(int domain, int type, int protocol);

성공시 파일 디스크립터, 실패시 -1 리턴

전화번호할당 전화기를 구입했다면 전화번호가 있어야 할것이다. 전화국에서 전화번호를 받아 오듯이 소켓에는 IP주소를 할당해야 한다. 다음은 소켓에 주소를 할당하는 함수의 선언이다.
#include <sys/socket.h>

int bind(int sockfd, struct sockaddr *myaddr, int addrlen);
성공시 0, 실패시 -1 리턴

전화기연결 전화기를 구입하고 전화번호가 할당 되었다면 이제 전화기에 케이블을 연결하고 전화를 기다리면 된다. 마찬가지로 소켓도 연결 요청이 가능한 상태가 되어야 한다.
#include <sys/socket.h>

int listen(int sockfd, int backlog);
성공시 0, 실패시 -1 리턴

전화받기 누군가로부터 전화가 온다. 수화기를 들어야 통화를 할수 있을 것이다. 소켓도 이처럼 연결 요청에 수락을 해야 한다.
#include <sys/socket.h>

int accept(int sockfd, struct sockaddr *addr, int *addrlen);
성공시 파일 디스크립터, 실패시 -1 리턴

'Study > TCP/IP' 카테고리의 다른 글

주소 정보의 표현  (0) 2008.02.16
Port란,  (0) 2008.02.16
Internet Address  (0) 2008.02.16
소켓의 생성과 프로토콜의 설정  (0) 2008.02.16
파일 조작하기  (0) 2008.02.16