×
Crocus
공부한 내용을 정리하는 블로그로 시작한
Crocus는 2014년 1월 14일 부터 시작하여
현재 월 6만명, 총 2,191,227명의 방문자 수를 기록하고 있습니다.
Donation
이제 많은 사용자들이 이용하는 만큼
더 다양한 서비스 개발/제공을 위해 후원금을 모금하고자 합니다.
후원을 해주시는 분들은 Donators 명단에 성명, 후원금을 기입해드리며
Crocus 블로그가 아닌 다른 곳에 정리해둔 저만의 내용을 공유해 드리고자 합니다.
Account
예금주 : 고관우
신한은행 : 110-334-866541
카카오뱅크 : 3333-01-7888060

👉 후원 페이지 바로가기 Donators
익명 : 5000원(Crocus응원합니다.)
busyhuman: 5000원(유용한 지식 감사합니다.)
익명 : 5000원(알고리즘 학습러)
반응형




- 본 내용은 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는 코드를 통해 확인해본다.



반응형