본문 바로가기

Programming

(4)
인터넷 주소 조작하기 sockaddr_in 안에서 주소를 나타내기 위해 선언되어 있는 멤버의 데이터 타입이 unsigned long이었다. 따라서 우리는 IP 주소 정보를 할당하기 위해 unsigned long 타입으로 IP 주소를 표현할 수 있어야 한다. 하지만 직접 계산하지 않아도 인터넷 주소를 조작해 주는 여러 함수들이 존재한다. Dotted-Decimal Notation의 주소 값을 unsigned long 타입으로 변환해 줄 뿐만 아니라, 네트워크 바이트 순서로의 변환도 알아서 해준다. inet_addr() : Dotted-Decimal Notation을 Big-Endian 32비트 값으로 변환 #include #include #include unsigned long inet_addr(const char *strin..
소켓의 생성과 프로토콜의 설정 소켓을 생성 방법을 이해하기 위해서는 프로토콜에 대한 개념이 필요하다. 프로토콜이란 두 개체간에 데이터를 주고 받는 방법에 대한 약속이다. 즉, "컴퓨터 상호간의 대화에 필요한 통신 규약" 이라고 우선은 정의 내릴수 있다. 소켓의 생성 소켓을 생성하기 위해서 리눅스 윈도우즈 공통으로 socket이란 함수를 사용하게 된다. socket 함수는 호출 시 시스템 내부적으로 소켓을 생성하고 그 소켓을 조작하기 위해 필요한 파일 디스크립터를 리턴하는 함수이다. 시스템 내부적으로 소켓을 생성한다는 의미는 호스트가 통신을 하기 위해 필요한 리소스(Re-source)를 할당하는 것을 의미한다. #include #include int socket(int domain, int type, int protocol); 성공 시..
파일 조작하기 리눅스(유닉스 계열 운영 체제)는 모든것(콘솔, 소켓, 파일 등등)을 파일로 간주한다. 소켓 또한 예외가 아니며 우리가 생성하는 소켓도 사용하는 방식이나 내부적으로 처리되는 방식이 파일과 상당 부분 유사하기 때문에 파일 입, 출력 함수를 소켓 입, 출력에 사용할 수 있다. 저 수준 파일 입출력(Low-Level File Access) Low -Level의 의미는 단순히 "시스템이 직접 제공해 주는~" 이라는 의미를 지닌다. 즉 ANSI표준 C에서 정의된 함수들은 아니라는 뜻이다. 파일 디스크립터(File Descriptor) 파일 디스크립터란 시스템으로부터 할당받은 파일이나 소켓을 대표하는 정수를 의미한다. 또한 표준 입력과 표준 출력도 파일 디스크립터로 표현이 되는데 이들은 프로그램이 시작되자마자 기본..
네트워크 프로그래밍의 이해 네트워크 프로그래밍이란, 멀리 떨어져 있는 호스트들이 서로 데이터를 주고 받을 수 있도록 프로그램을 구현하는 것이다. C에서의 파일 입출력과 달리 데이터를 주고 받을 대상이 멀리 떨어져 있기 때문에 소프트웨어 차원에서 호스트간에 연결해 주는 장치가 필요한데 이러한 기능을 해주는 장치를 소켓(socket)이라 한다. 그래서 일반적으로 소켓 프로그래밍이라는 용어와 네트워크 프로그래밍이라는 용어는 같은 의미로 사용되고 있다. 여기서 소켓이란, 멀리 떨어져 있는 두 개체를 연결시켜 주는 도구를 말하며 네트워크 프로그래밍을 이해하기 위해서 소켓의 구현에 대해 알아야 한다. 소켓을 설명하기 위해 조금 더 구체적으로 전화망을 예로 들어 이야기를 전개해 나가겠다. 전화기구입 전화를 사용하기 위해서는 전화기가 필요하다...