1. 네트워크 프로그래밍과 소켓의 이해

* 네트워크 프로그래밍과 소켓에 대한 매우 간단한 이해

: 네트워크로 연결되어 있는 서로 다른 두 컴퓨터가 데이터를 주고 받을 수 있도록 하는 것이 네트워크 프로그램이다.

: 물리적 연결을 기반으로하는 소프트웨어적인 데이터 송수신 방법을 고민해야 한다.

: 이는 운영체제에서 소켓(Socket)을 제공하기 때문에 고민할 필요 없다.

: 소켓은 소프트웨어적인 연결, 두 컴퓨터 연결을 의미하기도 한다.

* 전화 받는 소켓의 구현

: 소켓은 크게 두가지로 나뉜다.

: TCP 소켓은 전화기에 비유할 수 있다. 

: 전화를 거는 소켓과, 받는 소켓을 다르게 완성된다.

: 소켓 생성 과정

- 1. 소켓 생성 socket 함수 호출

- 2. IP주소와 PORT번호 할당 bind 함수 호출

- 3. 연결 요청 가능상태로 변경 listen 함수 호출

- 4. 연결요청에 대한 수락    accept 함수 호출

* Hello World! 서버 프로그램의 구현

: 소켓을 생성하는 순간에는 서버 소켓과 클라이언트 소켓으로 나뉘지 않는다. bind, listen 함수의 호출이 이어지면 서버 소켓이 되는 것이고 connect 함수의 호출로 이어지면 클라이언트 소켓이 되는 것이다.

2. 리눅스 기반 파일 조작하기

: 리눅스에서의 소켓조작은 파일 조작과 동일하게 간주되기 대문에 파일에 대해서 자세히 알 필요가 있다. 리눅스는 소켓을 파일의 일종으로 구분한다.

: 파일 입출력 함수를 네트워크 상에서의 데이터 송수신에 사용할 수 있다.

* 저수준 파일 입출력(Low-level File Access)과 파일 디스크립터(File Descriptor)

: 저수준이란 뜻은 표준에 상관없이 운영체제가 독립적으로 제공하는~ 라는 의미이다.

: 파일 디스크립터란 시스템으로부터 할당받은 파일 또는 소켓에 부여된 정수를 의미한다.

: 파일 디스크립터는 운영체제가 파일 또는 소켓을 편하게 지칭하기 위해 부여한 숫자이다. Windows의 핸들과 비슷한 개념이다.


3. 윈도우 기반으로 구현하기

: 윈도우 소켓은 상당부분 BSD 계열 유닉스 소켓을 참고하여 설계되었다. 따라서 많은 부분이 리눅스 소켓과 유사하다.

* 리눅스와 윈도우 기반으로 동시에 공부해야 하는 이유

: 상당수 프로젝트에서 리눅스 기반으로 서버를 만들지만, 클라이언트는 윈도우에 있는 경우가 많고, 운영체제를 변경해야 하는 경우도 발생하기도 한다.

: 이 둘은 매우 유사하기 때문에 묶어서 공부하는 것이 효과적이다.

* 윈도우 소켓을 위한 헤더와 라이브러리의 설정

: winsock2.h를 포함시킨다, ws2_32.lib 라이브러리를 링크시켜야 한다.

: Clion(IDE) 을 사용하는 경우 이 작업이 필요 없었다.

* 윈속(winsock)의 초기화

: 윈속프로그래밍을 할 때에는 반드시 WSAStartup 함수를 호출해서 프로그램에서 요구하는 윈도우 소켓의 버전을 알리고 해당 버전을 지원하는 라이브러리의 초기화 작업을 진행해야 한다.


: 윈도우와 리눅스의 차이는 크게 없으며, 라이브러리 초기화 및 해제관련 코드와 자료형 정보에서만 조금 차이날 뿐이다.


윤성우의 열혈 TCP/IP 소켓 프로그래밍
국내도서
저자 : 윤성우
출판 : 오렌지미디어 2009.12.01
상세보기


'독후감 > 소켓프로그래밍' 카테고리의 다른 글

2. 소켓의 타입과 프로토콜의 설정  (0) 2017.03.15

+ Recent posts