[c++] HTTP 클라이언트 및 서버 구현
HTTP(HyperText Transfer Protocol)는 웹 서버 및 클라이언트 간에 데이터를 교환하는 프로토콜입니다. 이번에는 C++로 HTTP 클라인언트 및 서버를 간단하게 구현해보겠습니다.
HTTP 클라이언트 구현
#include <iostream>
#include <boost/asio.hpp>
#include <string>
using namespace boost::asio;
using ip::tcp;
int main() {
// TCP 연결
io_service io_service;
tcp::endpoint endpoint(ip::address::from_string("127.0.0.1"), 80);
tcp::socket socket(io_service);
socket.connect(endpoint);
// HTTP 요청 생성
std::string request =
"GET / HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n";
write(socket, buffer(request));
// HTTP 응답 수신 및 출력
boost::asio::streambuf response;
boost::asio::read_until(socket, response, "\r\n");
std::istream response_stream(&response);
std::string http_version;
response_stream >> http_version;
unsigned int status_code;
response_stream >> status_code;
std::string status_message;
std::getline(response_stream, status_message);
std::cout << "응답: " << status_code << " " << status_message << std::endl;
if (status_code == 200) {
boost::asio::read_until(socket, response, "\r\n\r\n");
std::cout << &response;
}
return 0;
}
HTTP 서버 구현
#include <iostream>
#include <boost/asio.hpp>
using namespace boost::asio;
using ip::tcp;
int main() {
// TCP 연결 대기
io_service io_service;
tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 80));
tcp::socket socket(io_service);
acceptor.accept(socket);
// HTTP 요청 수신 및 출력
boost::asio::streambuf request;
boost::asio::read_until(socket, request, "\r\n");
std::cout << &request;
// HTTP 응답 전송
std::string response = "HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, World!";
write(socket, buffer(response));
return 0;
}
이렇게 하면 간단한 형태의 HTTP 클라이언트와 서버를 C++로 구현할 수 있습니다.
이러한 코드를 사용하기 전에 boost 라이브러리를 설치해야 합니다. 자세한 내용은 Boost 공식 웹사이트에서 확인할 수 있습니다.