「Boost.Asioによる同期接続処理」の版間の差分

提供: C++入門
移動: 案内検索
(ページの作成:「ネットワークプログラミング向けのC++ライブラリ Boost.Asio を利用して、同期の接続処理を書いてみました。 '''読み方''' ;B...」)
 
 
行8: 行8:
 
BSDソケットを直接扱うよりも、簡単に書くことができます。クロスプラットフォームなので、OSごとの違いを考えなくてよくなります。WinSockとBSDソケットなどを意識しなくて良いです。
 
BSDソケットを直接扱うよりも、簡単に書くことができます。クロスプラットフォームなので、OSごとの違いを考えなくてよくなります。WinSockとBSDソケットなどを意識しなくて良いです。
 
== ソースコード ==
 
== ソースコード ==
 +
IPアドレスやポート番号は適当に変更してください。
 +
 +
このプログラムは、指定されたIPアドレス:ポート番号にTCPで接続するだけのプログラムです。接続の成功・失敗に関わらず、終了します。
 
<syntaxhighlight lang="cpp">
 
<syntaxhighlight lang="cpp">
 
/*
 
/*
行49: 行52:
 
$ ./a.out
 
$ ./a.out
 
connected
 
connected
 +
</syntaxhighlight>
 +
== サーバプログラムを用意する ==
 +
接続テスト用にTCPの接続待ちのプロセスが必要になります。すでに、あるプロセスを利用しても良いですし、ここで書いたように、プログラムを実行しても構いません。
 +
 +
たとえば、PHPでサーバを上げることもできます。
 +
<syntaxhighlight lang="bash">
 +
php -S 0.0.0.0:8080
 +
</syntaxhighlight>
 +
 +
ncatを使用して、バックドアのようなプログラムを起動することもできます。
 +
<syntaxhighlight lang="bash">
 +
ncat -l -p 8080 -e /bin/sh -k
 
</syntaxhighlight>
 
</syntaxhighlight>
 
== 関連項目 ==
 
== 関連項目 ==

2015年7月25日 (土) 11:04時点における最新版

ネットワークプログラミング向けの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

関連項目