전체 글380 19.C언어 HTTP 서버 구축하기 (표준입출력 이용) 예제 소스 결과 예제파일 2020. 8. 27. 18.http 서버 # 웹 서버의 이해 - HTTP 프로토콜을 기반으로 웹 페이지에 해당하는 파일을 클라이언트에게 전송하는 역할의 서버. - HTTP: Hypertext Transfer Protocl의 약자 - Hypertext : 클라이언트의 선택에 따라서 이동이 가능한 조직화된 정보 - HTTP 프로토콜 : Hypertext의 전송을 목적으로 설계된 어플리케이션 레벨의 프로토콜(TCP/IP 기반) - 인터넷 브라우저도 소켓 기반의 클라이언트 프로그램 (웹 서버에 접속을 시도하기 위해서 브라우저 내부적으로 소켓을 생성함!!!!!!) - 브라우저는 서버가 전송하는 HTML문으로 이뤄진 Hypertext를 HTML 문법을 근거로 보기 좋게 변환해서 보여줌 - 웹서버는 HTTP라는 이름의 프로토콜을 기반으로 Hypertext를.. 2020. 8. 24. 17.멀티 스레드를 이용한 채팅 서버 쓰레드의 등장배경 멀티 프로세스 기반의 단점은 다음과 같다 프로세스 생성이라는 부담스러운 작업과정을 거친다 두 프로세스 사이에서의 데이터 교환을 위해서는 별도의 IPC 기법을 적용해야 한다. 컨텍스트 스위칭(Context Switching)에 따른 부담은 프로세스 생성방식의 가장 큰 부담이다 CPU가 하나인(CPU의 연산장치인 CORE) 시스템에서 둘 이상의 프로세스가 동시에 실행되려면 CPU의 할당시간을 매우 작은 크기로 쪼개서 서로 나누어 사용해야 한다. 그런데 CPU의 할당시간을 나누기 위해서는 '컨텍스트 스위칭'이라는 과정을 거쳐야 한다. 프로그램의 실행을 위해서는 해당 프로세스의 정보가 메인 메모리에 올라와야 한다. 때문에 현재 실행중인 A프로세스의 뒤를 이어서 B프로세스를 실행시키려면 A프로세.. 2020. 8. 24. 2장 클래스 Objective C의 프로그래밍은 클래스를 설계하고 이것을 운영하는 것 1.클래스의 구성 요소 Objective C는 기존의 C 언어로 프리컴파일되어 실행되기 때문에 기본적인 실행구조는 C 언어와 동일하다. 이런 이유로 Objective C 프로그램은 main() 함수가 실행되면서 시작하고 이 함수가 종료되면 프로그램도 끝나게 된다. 함수 main()은 클래스[Class, 형식]에 메시지를 보내 도장 찍듯이 인스턴스[Instance, 예]를 만들어내며 이 인스턴스가 동작하면서 프로그램이 운영된다. 클래스는 인스턴스를 만들기 위한 일 종의 형틀이며 변수부분과 동작부분으로 구성된다. 변수는 멤버[member, 구성원]라 하며, 값을 기억하는 역할을 한다. 동작은 메소드[method, 방법/함수]라고 하며,.. 2020. 8. 23. 1장 객체지향으로의 항해 프로시저(함수) 기반에서 객체지향으로 이동 프로시저 언어의 기본단위는 함수 (function)이며 각 함수에 전달받은 인수와 전역변수를 통해 정해진 작업을 수행한다. 이렇게 구성된 각 모듈은 확장자가 h인 변수/함수 선언 파일과 확장자가 c인 변수/함수 정의 파일로 구성된다. 변수와 함수의 공유가 필요한 경우 필요한 선언 파일을 #include 구문으로 합쳐 사용하도록 한다. 동작의 주체는 각 함수이며 동작의 객체는 변수가 된다. 함수가 모여 하나의 모듈을 구성하며 모듈 내부에서는 임의의 변수를 서로 공유하여 함수가 협업하게 된다. 모듈 간 자료를 공유하려면 확장자가 h인 헤더파일이 서로 공유한다. 이러한 구성을 위해 변수와 함수는 선언과 정의로 나뉘게 된다. 객체지향 언어는 과거 프로시저 언어의 함수를.. 2020. 8. 23. 16.입출력 스트림의 분리에 대한 나머지 이야기 # 지금까지 우리가 구현해 보았던 입출력 스트림 분리 1) (Ch 1O)TCP의 입출력 루틴 분할 - fork함수 호출을 통해 파일 디스크립터 복사 후, 이를 입력용/출력용으로 분리하여 사용 - 입력루틴(코드)과 출력루틴의 독립을 통한 구현의 편의성 증대 - 입력에 상관없이 출력이 가능하게 함으로 인해서 속도의 향상 기대 2) (Ch 15)FILE 포인터를 통한 입출력 분할 - 입력/출력 용도로 파일 구조체 포인터를 만들어 열고, 사용하고, 닫음 - 읽기모드와 쓰기모드의 구분을 통한 구현의 편의성 증대 - 입력버퍼와 출력버퍼를 구분함으로 인한 버퍼링 기능의 향상 # 스트림 분리 이후의 EOF에 대한 문제점 -TCP의 입출력 루틴 분할에서는 Half-close을 통한 EOF 전달의 필요성에 대해 언급하면서.. 2020. 8. 19. 15.소켓과 표준 입출력 # 표준 입출력 함수의 두가지 장점 1) 이식성이 좋다 - 모든 표준 함수들은 이식성이 좋음 : 모든 운영제제(컴파일러)가 지원하도록 ANSI C 표준으로 정의했기 때문 2) 버퍼링을 통한 성능의 향상에 도움이 된다 - 소켓을 생성하면 운영제제는 입출력을 위한 버퍼(이하,소켓 버퍼)를 마련하고, :TCP 프로토콜을 진행하는데 매우 중요한 역할 - 표준 입출력 함수 사용시, 이와는 별도로 추가적인 또 하나의 버퍼(이하, 입출력 함수 버퍼)를 제공받는다. . 따라서 소켓을 통한 데이터 송수신시 표준 입출력 함수를 사용하여 데이터를 전송할 경우,거쳐야 하는 버퍼는 총 "2개"이다. # 데이터 전송시 과정 1) 데이터가 표준 입출력 함수의 출력버퍼에 전달됨 2) 이어서 소켓의 출력버퍼로 데이터가 이동 3) 이어.. 2020. 8. 19. 14.멀티캐스트 & 브로드캐스트 #.다수의 클라이언트에게 동일한 데이터를 전송하는 일조차 서버와 네트워크의 트래픽 측면에서는 매우 부정적 - TCP 기반의 경우 : 클라이언트 수만큼 소켓연결을 유지해야 함 - UDP 기반의 경우 : 클라이언트 수만큼 데이터 전송이 필요 => 이러한 상황에서의 해결책으로 "멀티캐스트" 라는 기술이 존재 #.멀티캐스트 - UDP를 기반으로 함 - UDP 서버/클라이언트의 구현방식과 차이점이 있다면, UDP에서의 데이터 전송은 하나의 목적지를 두고 이루어지나, 멀티캐스트에서의 데이터 전송은 특정 그룹에 가입(등록)되어 있는 다수의 호스트가 목적지가 됨. 즉,단 한번에 데이터 전송으로 다수의 호스트에 데이터를 전송할 수 있음. #.멀티캐스트의 데이터 전송방식과 멀티캐스트 트래픽 이점 - 멀티캐스트 서버는 특정.. 2020. 8. 18. 13.다양한 입출력 함수들 #.send & recv. 리눅스 기반에서도 윈도우 기반의 send, recv 함수가 존재하며, 이둘은 차이가 나지 않는다. 리눅스의 write, read 함수와 다른 점은 옵션을 넣어줄 수 있다는 점이다. #.send 함수 소개. #include // 성공 시 전송된 바이트 수, 실패 시 -1 반환 ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags); - sockfd : 데이터 전송 대상과의 연결을 의미하는 소켓의 파일 디스크립터 전달, - buf : 전송할 데이터를 저장하고 있는 버퍼의 주소 전달. - nbytes : 전송할 바이트 수 전달. - flags : 데이터 전송 시 적용할 다양한 옵션 전달. #.recv 함수 소개 #in.. 2020. 8. 18. 이전 1 ··· 33 34 35 36 37 38 39 ··· 43 다음