간단한 C++ 웹 서버

Gandanhan C Web Seobeo



이번 글에서는 C++ 웹서버에 대해 알아보겠습니다. 웹 서버의 주요 목적은 도착하는 HTTP 요청을 처리하고, 들어오는 모든 요청을 처리하고, 그 대가로 웹 HTML 콘텐츠로 응답하는 것입니다. 네트워킹 통신 및 문제를 처리하려면 '소켓'과 같은 네트워킹 라이브러리를 C++ 환경에 추가하여 C++로 웹 서버를 유지해야 합니다. 웹 서버는 인터넷의 백본이며 사용자와 기본 서버 간의 통신 방법입니다. 적절한 예제 구현을 통해 간단한 웹 서버를 만드는 과정을 평가해 보겠습니다.

환경 설정

먼저 환경에 필요한 모든 옵션을 설정해야 합니다. 들어오는 HTTP 요청을 수신하려면 소켓을 활용해야 합니다. 그런 다음 소켓을 호스트 시스템의 특정 포트에 시스템으로 바인딩합니다. 그 후 클라이언트가 요청을 호출하면 서버는 들어오는 연결된 요청을 수신합니다. 서버는 HTTP 요청을 통해 사용자의 요청에 응답하여 사용자의 요청을 서버로 가져옵니다. 그 후, 서버는 요청을 처리하고 적절한 제작을 통해 HTTP 응답을 사용자에게 반환합니다.







웹 서버의 소켓 처리

이번 세션에서는 소켓이 시스템에서 실행되는 다양한 프로세스 간의 통신을 생성하는 방법을 배웁니다. 소켓은 기본적으로 클라이언트의 브라우저와 서버 간의 통신이나 연결을 생성하는 데 사용됩니다. 소켓 연결은 다음에 언급된 방식으로 C++로 구축됩니다.



여기서는 소켓용 라이브러리를 “#include ”로 정의하겠습니다. 메인 함수에서는 “server_fd”를 초기화하여 소켓을 생성합니다. 그런 다음 스톡 연결 유효성 검사가 포함된 “server_fd” 값을 확인합니다. 서버가 다운되어 제대로 작동하지 않으면 '소켓 생성 실패' 메시지를 반환하거나 표시합니다. 그렇지 않으면 웹 서버의 IP 주소가 포함된 메시지에 웹 서버의 HTML 데이터가 표시됩니다.



#include
#include
#include
정수 메인 ( ) {
int server_fd = 소켓 ( AF_INET, SOCK_STREAM, 0 ) ;
만약에 ( server_fd == - 1 ) {
표준::cerr << '소켓 생성 실패' ;
반품 -1 ;
}
// 또 다른
// {
// 표준::cout << '출구' ;
// }
// 묶다
표준::cout << 'http//:127.0.0.1:8080' ;
// 추가 코드는 여기에 있습니다.
반품 0 ;
}


이 코드의 출력은 다음에 첨부되어 있습니다.






이는 C++에서 소켓이 성공적으로 생성되어 웹 서버에 연결되었음을 보여줍니다.

C++에서 웹 서버 처리

시스템의 웹 서버는 병합 정렬, 선형 정렬 등과 ​​같은 다양한 C++ 개념을 처리하도록 설정되었습니다. 중요한 네트워킹 라이브러리를 초기화하는 것을 잊지 마세요. 웹 서버는 로컬 시스템(127.0.0.1)에서 실행되며 포트 8080에서 수신 대기합니다.



다음과 같이 C++ 프로그래밍 언어에 필요한 라이브러리를 포함합니다.

# 포함하다 < 후원 / asio.hpp >


C++로 웹 서버를 만드는 것은 쉽고 시간이 많이 걸리는 프로세스가 아니라는 점을 기억하십시오. 'async_accept'를 사용하여 들어오는 연결을 처리할 수 있습니다.

웹 서버의 C++ 코드에 있는 서버 응답

서버 응답은 브라우저에서 작동하고 웹 페이지의 HTML 보기에 출력을 표시하는 HTTP여야 합니다. 모든 라이브러리는 서버를 관리하고 모든 유효한 요청을 처리합니다.

웹 서버 바인딩 및 수신

다음으로 웹페이지에서 코드를 쉽게 실행하기 위해서는 웹서버의 바인딩과 리스닝에 대해 알아야 합니다. 그런 다음 소켓을 시스템의 지정된 주소(기본적으로 이러한 소켓이 활성화된 IP 주소 및 포트)에 바인딩해야 합니다. 포트에서 들어오는 연결을 수신하기 시작합니다.

바인딩하고 링크하려면 몇 가지 라이브러리를 초기화해야 합니다.

Sockaddr_in 주소;


서버를 바인딩할 수 있습니다. 서버가 다운되거나 연결되지 않으면 어떤 브라우저의 웹 페이지에도 메시지가 표시되지 않습니다.

웹 서버에 대한 연결 수락

이 섹션에서는 클라이언트의 요청 흐름을 제어하는 ​​방법을 알아봅니다. 서버는 HTTP 프로토콜을 통해 모든 클라이언트 요청을 수락합니다. 서버 소켓은 클라이언트로부터 웹 서버로 수신되는 메시지의 크기를 나타냅니다. 메시지에는 서버 소켓 연결과 주소가 더 명확하고 고유하게 포함되어 있습니다. 사용자 소켓이 발견되었는지 여부에 따라 서버가 응답해야 하는지 확인합니다. 사용자 소켓 연결을 찾을 수 없으면 웹 서버에 대한 연결을 수락할 수 없습니다.

사용자와 서버단으로부터 데이터를 주고받는 방법

소켓 링크를 생성하고 연결을 수락한 후, 다음은 서버측으로 데이터를 보내고, 다른 키워드를 사용하여 서버로부터 데이터를 받고, 데이터 송수신과 관련된 기능을 C++로 구축하는 것입니다. 여기서는 데이터의 응답을 확인합니다. 이 요청은 데이터를 가져오기 위한 요청인가요, 아니면 웹 서버에서 데이터를 게시하기 위한 요청인가요? 클라이언트의 요청에 대한 응답 상태를 확인합니다. 웹 서버에 메시지나 출력을 표시하기 위해 모든 클라이언트 요청을 버퍼에 임시로 저장합니다.

C++의 선형 정렬

여기서 선형 정렬을 수행하고 선형 정렬 결과를 웹 서버에 쉽게 표시해 보겠습니다. 선형 정렬의 코드 조각은 다음과 같습니다.

#include
네임스페이스 std 사용;
무효 선형 검색 ( 정수 arr [ ] , int len, int 항목 ) {
~을 위한 ( 정수 = 0 ;나 < 렌;i++ ) {
만약에 ( 도착 [ ] == 아이템 ) {
시합 << 안건 << ' 색인에서 찾았습니다: ' << 나;
반품 ;
}
}
시합 << '찾을 수 없음' ;
}
정수 메인 ( ) {
정수 arr [ ] = { 10 , 5 , 열 다섯 , 이십 일 , - , 7 } ;
int len ​​= 크기 ( 도착 ) / 크기 ( 도착 [ 0 ] ) ;
정수 항목 = 이십 일 ;
선형검색 ( 아, 렌, 아이템 ) ;
반품 0 ;
}


이 예에서는 인덱스가 있는 항목 '21'을 검색합니다. 그래서 우리는 이 코드를 실행합니다. 이 코드의 출력은 다음에 첨부되어 있습니다.


이제 이 출력은 Chrome, Edge 등과 같은 모든 브라우저와 마찬가지로 웹 서버에서 열립니다.

출력 표시 후 모든 연결 종료

이는 웹 서버의 데이터를 처리하는 마지막 단계입니다. 필요한 출력을 수행한 후에는 소켓 연결을 닫는 것을 잊지 마십시오. 여기서는 'close(server_id)' 및 'close(client Socket)'와 같은 함수를 사용하여 소켓을 닫습니다.

서버 실행이 끝나면 “http//localhost:8080”으로 주소에 접속하면 예상되는 출력이 웹 페이지에 표시됩니다.

결론

이 기사의 끝에서 우리는 C++에서 처리하는 간단한 웹 서버가 정말 복잡하고 HTTP 클라이언트의 요청을 보내고 받으려면 완전한 집중이 필요하다고 말할 수 있습니다. 웹 서버 기능을 확장하여 웹 페이지에 콘텐츠를 동적으로 표시할 수 있습니다. 이 기사가 여러분에게 도움이 되기를 바라며 여러분의 환경에서 이러한 예제를 실행하여 C++로 간단한 웹 서버를 만드는 데 필요한 단계를 이해할 수 있기를 바랍니다.