[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 공식 웹사이트에서 확인할 수 있습니다.