본문 바로가기

공부/tcp/ip 프로그래밍

24장 http 서버 제작하기 웹서버의 이해 http(hypertext transfer protocol)프로토콜을 기반으로 웹 페이지에 해당하는 파일을 클라이너트에게 전송하는 역할의 서버 HTTP 요청/응답 과정 HTTP 요청 헤더 요청방식 1. GET = 데이터를 요청하는 경우 2. POST = 데이터를 전송하는 경우 GET /index.html HTTP/1.1의 의미 = index.html 파일을 요청(GET)합니다 그리고 저는 HTTP프로토콜 버전 1.1을 기준으로 통신하기를 원합니다 메세지 헤더에는 응답 받을 브라우저 정보, 사용자 인증정보 등 HTTP메세지에 대한 부가적인 정보가 담김 HTTP 응답 헤더 HTTP/1.1 200 OK의 의미 = 나는 HTTP 프로토콜 버전 1.1을 기준으로 응답하겠다. 또한 너의 요청은 성공적.. 더보기
23장 IOCP(Input Output Completion Port) Overlapped IO를 기반으로 IOCP 이해하기 넌 블로킹 모드의 소켓 구성하기 SOCKET hLisnSock; int mode = 1; ... hLisnSock = WSASocket(PF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED); ioctlsocket(hLisnSock, FIONBIO, &mode); // for non-blocking socket 핸들 hLisnSock이 참조하는 소켓의 입출력 모드(FIONBIO)를 변수 mode에 저장된 값의 형태로 변경함 FIONBIO는 소켓의 입출력 모드를 변경하는 옵션, 함수의 세 번째 인자로 전달된 주소 값의 변수에 0이 저장되어 있으면 블로킹 모드로, 0이 아닌 값이 저장되어 있으면 넌-블로킹 모드로.. 더보기
22장 Overlapped IO 모델 Overlapped IO 모델 Overlapped IO의 주안점 비동기 IO(nonblocking 모드 입출력함수) + 입출력 완료결과 확인 Overlapped IO에서 입출력의 완료 및 결과를 확인하는 2가지 방법 1. WSASend, WSARecv 함수의 여섯 번째 매개변수, Event 오브젝트 기반 1) IO가 완료되면 WSAOVERLAPPED 구조체 변수가 참조하는 Event 오브젝트가 signaled 상태가 됨 WSASend() 이용시 1> 바로 전송이 완료되면 밑의 과정이 필요없음 2> 바로 전송이 되지 못하고 시간이 걸릴 경우 WSASend()의 반환 값 = SOCKET_ERROR, WSAGetLastError()의 반환 값 = WSA_IO_PENDING일때 는 event오브젝트가 signa.. 더보기
리눅스 기반 소스를 윈도우 기반으로 바꾸는 4가지 방법 1. WSAStartup, WSACleanup 함수호출을 통한 소켓 라이브러리의 초기화와 해제 2. 자료형과 변수의 이름을 윈도우 스타일로 변경하기 3. 데이터 송수신을 위해서 read, write 함수 대신 recv, send 함수 호출하기 4. 소켓의 종료를 위해서 close 대신 closesocket 함수 호출하기 더보기
21장 Asynchronous Notification IO 모델 동기와 비동기에 대한 이해 위 : 동기 아래 : 비동기 *동기화된 입출력의 단점과 비동기의 해결책 동기화된 입출력의 단점 입출력이 진행되는 동안 호출된 함수가 반환을 하지 않으니, 다른 일을 할 수가 없다 비동기의 해결책 데이터의 송수신 완료에 상관없이, 호출된 함수가 반환을 하기 때문에 다른 일을 진행 할 수 있음 *Notification(알림) IO(입출력) 입력버퍼에 데이터가 수신되어서 데이터의 수신이 필요하거나, 출력버퍼가 비어서 데이터의 전송이 가능한 상황의 알림 *동기화된 Notification IO모델 가장 대표적인 동기화된 Notification IO모델은 select방식 IO가 필요한 또는 가능한 상황이 되는 시점이(간단히 말해서 IO관련 이벤트의 발생 시점이) select함수가 반환하는.. 더보기
20장 windows에서의 쓰레드 동기화 모드 종류 설명 유저모드 응용 프로그램이 실행되는 기본모드로, 물리적인 영역으로의 접근이 허용 되지 않으며, 접근할 수 있는 메모리의 영역에도 제한이 따른다 커널모드 운영체제가 실행될 때의 모드로, 메모리뿐만 아니라, 하드웨어의 접근에도 제한이 따르지 않음(리소스, 커널오브젝트에 관련된 모든 일) 유저모드 및 커널모드에서 오브젝트 생성 및 리소스와의 연결 동기화와 쓰레드에 관한 함수 사용 순서 WaitForSignalObject함수 리소스에 따른 상태 동기화 모드 종류 설명 유저모드 속도가 빠름(커널모드로의 전환이 없음), 기능이 제한적, 하나의 프로세스 안의 쓰레드 간의 동기화 가능 기법 : CRITICAL_SECTION 커널모드 속도가 느림, 제공되는 기능이 많음, 서로 다른 프로세서간의 동기화 가능.. 더보기
19장 windows에서의 쓰레드 사용 윈도우는 가장 기본이 되는 프로그램의 main함수가 반환되면 그 안에 담겨있는 모든 쓰레드들도 종료 리눅스는 가장 기본이 되는 프로그램의 main함수가 반환되어도 그 안에 담겨있는 모든 쓰레드들은 남아있음(리눅스는 쓰레드를 삭제해주는 함수를 꼭 사용해야 함) 핸들, 커널오브젝트, 리소스의 관계 커널오브젝트를 만드는 이유 : 리소스를 효과적으로 관리하기 위해서 리소스를 쓰레드라고 가정 1. 프로그램에서 쓰레드를 만들어 달라고 요청 2. OS는 쓰레드(리소스)를 생성하고 그에 관한 명세서로 커널오브젝트를 만듬 3. OS는 프로그램에게 커널오브젝트를 가리키는 handle을 전달 1. 프로그램이 핸들에 어떠한 행위를 요청 2. OS는 리소스에 요청을 반영 3. OS는 커널오브젝트에 리소스의 변화를 반영 Crea.. 더보기
정적 라이브러리와 동적라이브러리 차이 정적 라이브러리(*.lib)란 말 그대로 동적이 아닌 정적으로 프로세스에 붙는 라이브러리입니다. 여기서 라이브러리란 printf와 같은 자주 쓰는 함수들의 정의들이 들어가 있는 파일입니다. DLL은 동적 라이브러리, 동적 연결 라이브러리라고도 합니다. (Dynamic Link Library) 정적 라이브러리와 DLL의 차이는 라이브러리라는 측면에서는 동일하지만 정적 라이브러리는 정적이고, DLL은 동적이라고 할 수 있습니다. 즉 정적 라이브러리는 컴파일 할 때 실행파일에 존속되지만, DLL은 필요할 때 가져다 쓸 수 있어 메모리적인 측면에서 효율적이라고 볼 수 있습니다. 런타임 라이브러리는 동적 라이브러리, 공유 라이브러리 등으로 불려지는것 같습니다. 런타임 라이브러이의 가장 대표적인 것이 바로 stan.. 더보기