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

#.네트워크 프로그래밍이란?

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

 

#.그렇다면 왜 소켓이라는 표현을 사용하나?

우리는 전력망으로 부터 전기를 공급받기위해서 소켓을 꽂는다. 즉, 가전기기의 소켓은 전력망으로의 연결에 사용된다. 마차가지로 멀리 떨어져 있는 컴퓨터와 데이터를 송수신하려면 인터넷이라는 네트워크 망에 연결해야 한다. 그리고 프로그래밍에서의 소켓은 네트워크 망의 연결에 사용되는 도구다.

 

#.전화기 비유

전화를 걸려면 전화기가 있어야하듯, 컴퓨터끼리 통신을 하려면 소켓(전화기)가 필요하다.(socket 함수로 생성) 전화기에 전화번호가 할당되는것 처럼, 소켓에도 소켓의 주소정보(ipv4, tcp, ip 주소, 포트 등..)가 할당되어야 한다.(소켓에 주소 바인딩 bind 함수) 전화 설치가 완료되었으면 이제 전화를 기다리면된다. (listen 함수로 연결기다리기) 전화벨이 울리면 전화기를 든다. 소켓도 마찬가지로 소켓을 열고 수락을 한다.(accept 함수 이용)

 

 

#.전화받는 소켓 예제(서버)

#.전화거는 소켓 예제(클라이언트)

#.결과

먼저 위의 커멘드라인에서 서버를 실행시킨다. 이후 아래 커맨드라인에서 클라이언트를 실행시킨다. 서버로 부터 클라이언트에 메시지가 전달된다.

 

 

#.파일 조작

일반적으로 파일과 소켓은 생성의 과정을 거쳐야 파일 디스크립터가 할당된다. 파일 디스크립터란 운영체제가 만든 파일 또는 소켓의 지칭을 편하게 하기 위해서 부여된 숫자에 지나지 않는다.

 

#.파일에 데이터 쓰기

#.결과

운영체제에 의해 파일디스크립터가 3이 할당되었다.

 

 

#.파일에 저장된 데이터 읽기

#.결과

버퍼를 3개로만 할당해서 abc까지 나온다. 5개로 할당하면 abcde 까지 나온다.

 

#.파일디스크립터와 소켓

#.결과

생성 순서대로 파일디스크립터 번호가 매겨진다.

 

 

 

 

참고: 윤성우 열혈 tcp/ip 소켓프로그래밍