2014년 12월 8일 월요일

TCP/IP 소켓 프로그래밍 1강

소켓 프로그래밍이라고 하면 좀 생소하니깐
네트워크 프로그래밍이라고 하자.

네트워크가 뭔지는 대부분 알 것이다.
컴퓨터와 컴퓨터를 연결하는 것이당@.@;
전세계에는 수없이 많은 컴퓨터가 존재하는데 그걸 어찌 알고 데이터가 착착 갈까??
그럼 내 컴에 고유 주소가 있어야 하지 않겠는가??
주소가 있다고 해도, 이게 택배인지, 우편인지, 전화인지, 우유인지 구분하는 것이 있어야 한다
위의 예가 적절한지는 모르겠지만.
주소가 IP고, 어떤 물건(?)인지 구분하는 것이 PORT다.

근데 컴퓨터, 각종 망, 속도, os가 다 다르다
이걸 프로그래머가 하나하나 다 만들어서 연결하려고 하면 죄다 개발 때려칠지도 모른다..;;
그래서 표준을 지정하고 그것만 가져다 쓰면
연결, 데이터 전송, 연결해제 까지 가능하게 만들었다.
이것이 바로 소켓이다~!

소켓에서 쓰이는 함수를 나열해 보겠다.(서버 측)

1. 소켓을 생성하는 함수다. 소켓을 쓰겠다는 명령이다.
#include <sys/socket.h>
int socket(int domain, int type, int protocol);

2. 소켓에 주소 정보를 할당하는 함수다.
#include <sys/socket.h>
int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen);

3. 소켓을 연결 요청이 가능한 상태로 만드는 함수(서버에서 사용)
#include <sys/socket.h>
int listen(int sockfd, int backlog);

4. 클라이언트에서 연결 요청이 들어오면 그것을 수락하는 함수
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

이걸 단계별로 나열해보면...
1단계. 소켓 생성
2단계. IP주소와 PORT번호 할당
3단계. 연결요청 가능상태로 변경
4단계. 연결요청에 대한 수락

이번에는 클라이언트 측에서 쓰는 함수를 나열해보겠다.

1. 소켓을 생성하는 함수다. 소켓을 쓰겠다는 명령이다.
#include <sys/socket.h>
int socket(int domain, int type, int protocol);

2. 연결 요청하는 함수. 서버에 연결이 가능한지 물어보는 함수다
#include <sys/socket.h>
int connect(int sockfd, struct sockaddr *serv_addr, socklen_t addrlen);


클라이언트에서 쓰는 함수는 이게 다다...;;
그와중에 1번은 서버와 같다 ㅎㅎ;
이걸 서버와 클라이언트로 통합해서 표현해보자면

1. 서버가 소켓을 생성한다.
2. 서버의 IP 주소와 PORT 번호를 할당한다
3. 서버를 연결 요청 가능한 상태로 변경하고 연결 요청이 올 때까지 기둘린다.

4. 클라이언트가 서버에게 연결 요청을 한다.
5. 서버가 연결 요청에 대한 수락을 한다.

6. 데이터를 주고 받고, 할 일을 쭉 한다.
7. 클라이언트 소켓 연결을 끊는다.
8. 서버 소켓 연결을 끊는다.

아직 6,7,8 은 나오지 않았다.이건 다음 강에 표현하겠다.

소스를 이곳에 붙여 넣고 싶지만 내용이 길어지니
소스 코드를 다운 받아 쓰길 바란다.
소스 코드 받으러 가기

이번 1강은 그야말로 전체적인 맥락을 짚는 강이였다.
다음 2강은 소켓의 타입과 프로토콜의 설정을 알아보자.

댓글 없음:

댓글 쓰기