반응형




- 본 내용은 Linux (Ubuntu 14.04 lts)를 기반으로 제작되었습니다. -


소캣 프로그래밍은 TCP/IP 기반으로 하였습니다.





이번 게시물에서는 서버 및 클라이언트를 생성하는 법을 확인하고,


다음 게시물에서는 서버에서 클라이언트로 메세지(문자열)를 전송하는 코드를 제작 할 것이다.


서버와 클라이언트의 코딩 과정이 어떻게 진행되는지 확인 해봐야한다.




서버


서버는 socket, bind, listen, accept과정을 거치게 되는데 하나하나 살펴보면 다음과 같다.


1. socket


소켓은 커널의 입장에서는 커뮤니케이션의 종점이라고 볼 수 있다.


프로그램 입장에서는 읽고/쓰기를 네트워크를 통해 가능하게 해주는 역할이라고 볼 수 있다.


즉, 소켓은 데이터가 들어오고 나가는 출입구 같은 역할을 한다.


이 소켓을 열기위해 처음, 소켓을 정의해야 한다.


형식은 다음과 같다.

socket(IP버전, TCP / UDP, 옵션)


2. bind


OS로부터 소켓을 할당 받기 위해 bind()라는 함수를 이용해야 한다.

소켓을 할당 받으면 소켓에 주소, 프로토콜, 포트가 할당된다.


형식은 다음과 같다.

bind(할당받을 수켓, sockaddr로 형 변환된 구조체(즉, 소켓의 주소정보), 구조체의 크기)



3. listen


listen() 함수를 통해 소켓을 listen 상태로 만든다. 그래야만 client가 접근이 가능해진다.


형식은 다음과 같다.

listen(소켓, 접속가능한 클라이언트 수)


4. accept


accept() 함수로 클라이언트측 주소정보를 저장할 공간을 만들고 대기상태로 만든다.


형식은 다음과 같다.

accept(소켓, (sockaddr *)클라이언트의 주소를 저장할 구조체, 구조체의 크기)






클라이언트


1. socket


서버와 마찬가지로 통신을 위한 소켓을 정의 하고 열어야 한다.


형식은 다음과 같다.

socket(IP버전, TCP / UDP, 옵션)


2. connect


서버의 주소를 담고있는 addr 구조체를 이용하여 서버에 접속을 시도한다.


형식은 다음과 같다.

connect(소켓, (sockaddr *)서버의 주소를 가지고 있는 구조체, 구조체의 크기)





read / writeclose는 코드를 통해 확인해본다.



반응형