Boost.Asioによる同期接続処理

提供: C++入門
移動: 案内検索
スポンサーリンク

ネットワークプログラミング向けのC++ライブラリ Boost.Asio を利用して、同期の接続処理を書いてみました。

読み方

Boost.Asio
ぶーすと えいじお

概要

BSDソケットを直接扱うよりも、簡単に書くことができます。クロスプラットフォームなので、OSごとの違いを考えなくてよくなります。WinSockとBSDソケットなどを意識しなくて良いです。

ソースコード

IPアドレスやポート番号は適当に変更してください。

このプログラムは、指定されたIPアドレス:ポート番号にTCPで接続するだけのプログラムです。接続の成功・失敗に関わらず、終了します。

/*
 * boost_asio_connect1.cpp
 * Copyright (C) 2015 kaoru <kaoru@localhost>
 */
 
#include <iostream>
#include <boost/asio.hpp>
using boost::asio::ip::tcp;
 
int main(int argc, char const* argv[])
{
        boost::asio::io_service io_service;
        tcp::socket tcp_socket(io_service);
        boost::system::error_code error;
 
        std::string addr = "127.0.0.1";
        int port = 8080;
 
        tcp_socket.connect(
                tcp::endpoint(
                        boost::asio::ip::address::from_string(addr), port),
                        error);
 
        if (error) {
                std::cout << "cannot connect: " << error.message() << std::endl;
        } else {
                std::cout << "connected " << std::endl;
        }
 
        return 0;
}

コンパイル

c++ -I/usr/local/include boost_asio_connect1.cpp -L /usr/local/lib -lboost_system

実行例

$ ./a.out
connected

サーバプログラムを用意する

接続テスト用にTCPの接続待ちのプロセスが必要になります。すでに、あるプロセスを利用しても良いですし、ここで書いたように、プログラムを実行しても構いません。

たとえば、PHPでサーバを上げることもできます。

php -S 0.0.0.0:8080

ncatを使用して、バックドアのようなプログラムを起動することもできます。

ncat -l -p 8080 -e /bin/sh -k

関連項目




スポンサーリンク