본문 바로가기
Unreal/C++ 서버

C++, Visual Studio를 활용한 Boost.Asio 설치 및 실행

by 보안매크로 2024. 2. 18.
728x90

1. Boost 공식사이트에서 다운로드 받아주세요.

https://www.boost.org/

공식 홈페이지

2. Current Release 버전을 다운로드 해주세요. 아래 사진처럼 운영체제에 맞게 7z, zip 둘중에 아무거나 다운받고, 본인이 원하는 경로에 압축 풀어주세요.

 

3. bootstrap.bat 실행 > 자동으로 설치됨

 

4. b2.exe가 설치될 것입니다. 이를 또 실행시켜주세요.

5. Visual Stuido에서 C++ 프로젝트를 만들고, 우측에 프로젝트(사진에선 Test)를 클릭하고 View > Property Pages >>  Configuration > VC++ Directories > Include Directories 에서 Edit... > Boost.Asio를 압축해제한 디렉토리를 선택해줍니다. (아래사진 참조)

 

6. 테스트 코드를 실행시켜봅니다. 테스트 코드 설명은 다음 글 참고해주세요.

#include <iostream>
#include <boost/asio.hpp>

using namespace boost::asio;

class TCPServer {
public:
    TCPServer(io_service& io_service, short port)
        : acceptor_(io_service, ip::tcp::endpoint(ip::tcp::v4(), port)),
        socket_(io_service) {
        StartAccept();
    }

private:
    void StartAccept() {
        acceptor_.async_accept(socket_,
            [this](boost::system::error_code ec) {
                if (!ec) {
                    std::cout << "Client connected: " << socket_.remote_endpoint() << std::endl;
                    StartRead();
                }
                StartAccept();
            });
    }

    void StartRead() {
        async_read(socket_,
            buffer(data_),
            [this](boost::system::error_code ec, std::size_t length) {
                if (!ec) {
                    std::cout << "Received data: " << data_ << std::endl;
                    StartRead();
                }
                else {
                    std::cout << "Client disconnected: " << socket_.remote_endpoint() << std::endl;
                    StartAccept(); // Add this line to accept new connections after client disconnects
                }
            });
    }

    ip::tcp::acceptor acceptor_;
    ip::tcp::socket socket_;
    std::string data_;
};

int main() {
    try {
        io_service io_service;
        TCPServer server(io_service, 12345);
        std::cout << "Server started. Listening on port 12345..." << std::endl;
        io_service.run();
    }
    catch (std::exception& e) {
        std::cerr << e.what() << std::endl;
    }

    return 0;
}

 

7.  실행 확인

728x90