タグ

C++とネットワークに関するiwwのブックマーク (8)

  • 複雑なデータをTCP/IP通信で送受信する | Theolizer®

    2017年6月7日 Theolizer®最新版v1.1.0へ対応するために修正しました。 最新版のソース一式をGistに置いてます。 こんにちは。田原です。 TCP/IP通信と言えばsocketですが、これは何にでも対応できる低レベルなインタフェースなので その分使うのがたいへんです。Theolizer®の通信サンプルを開発するにはちょっと大掛かりになりすぎるので躊躇していました。しかし、Boost.Asioにstd::iostream形式でTCP/IP通信を行える機能が含まれていることが判りました。 そこで、Boost.Asioを使って家計簿データの送受信をやってみました。予想通り実に簡単に通信できましたので、ご紹介します。 今回作ったサンプルは、下記処理を行います。 家計簿データをサーバへ送信 サーバにて集計処理 集計結果だけをクライアントへ返却 クライアントで表示 TCP/IP通信で

    複雑なデータをTCP/IP通信で送受信する | Theolizer®
  • doc/html/boost_asio/example/timeouts/async_tcp_client.cpp - 1.52.0

  • ネットワーク - TCP - boostjp

    インデックス 接続 接続待機 メッセージ送信 メッセージ受信 名前解決して接続 タイムアウトを設定する 接続 同期バージョン 同期バージョンの接続には、boost::asio::ip::tcp::socketクラスのconnect()メンバ関数を使用する。 接続先の情報はtcp::endpointに、IPアドレス文字列と、ポート番号の2つを指定する。 connect()の第2引数としてerror_codeを渡した場合には、接続失敗時にエラー情報がerror_code変数に格納される。 error_codeを渡さなかった場合には、接続失敗時にboost::system::system_errorが例外として投げられる。 #include <iostream> #include <boost/asio.hpp> namespace asio = boost::asio; using asio:

  • boost.asioのタイムアウト処理を綺麗に書く方法教えて! - Qiita

    はじめに boost.Asioでは、非同期処理のタイムアウト処理を当然行うことが出来るが 一般的なソケットのような、関数にタイムアウト時間を設定するような簡易な方法ではない 非同期処理とは別に、タイマーWaitを非同期で書き、非同期処理が終了すればタイマーをキャンセルし タイマーが先に来れば 非同期処理をキャンセルしタイムアウト処理を行う という 冗長な処理が必要である それを、どのようにラップすればきれいに書けるのか?という話 まずはベタに書いてみる // タイムアウトを設定 deadline_timer.expires_from_now( boost::posix_time::milliseconds(timeout_ms)); deadline_timer.async_wait( [=](const boost::system::error_code &ec) { // タイムアウト

    boost.asioのタイムアウト処理を綺麗に書く方法教えて! - Qiita
    iww
    iww 2021/04/12
    タイムアウトが大変 という話
  • Boost.Asio 非同期処理のタイムアウトを設定する - Faith and Brave - C++で遊ぼう

    タイムアウトには、async系メソッドと別にdeadline_timerを動かし、タイムアウトを設定します。 タイムアウトの前に非同期処理が完了した場合はdeadline_timer::cancel()を呼び、タイムアウト用のタイマーをキャンセルします。 そうすると、タイムアウトのハンドラが呼ばれなくなる・・・のではなく!タイムアウトのハンドラにエラー(boost::asio::error::operation_aborted)が渡されるので、タイムアウトハンドラがエラーじゃなかった場合に実際のタイムアウト処理を行います。 以下、サンプルコード: #include <boost/asio.hpp> #include <boost/bind.hpp> #include <iostream> namespace asio = boost::asio; class Client { asio::

    Boost.Asio 非同期処理のタイムアウトを設定する - Faith and Brave - C++で遊ぼう
    iww
    iww 2021/04/12
    タイムアウトが大変 という話
  • CLX C++ Libraries

    Overvies CLX C++ Libraries は,文字列処理やネットワークプログラミングの補助などを行うための, ヘッダファイルのみで構成された C++ ライブラリです. CLX C++ Libraries は, BSDライセンスで配布しています.ソースコードの複製・改変は自由ですが, 自己責任でお願い致します. Usage CLX C++ Libraries を使用する際には,以下のファイルをダウンロードし, 解凍して出来た clx フォルダ以下のヘッダファイルを作業フォルダにコピーするか, または,インクルードオプションを適切に指定して下さい. CLX C++ Libraries で作成したクラスは clx 名前空間の中に定義してあります. 利用する場合は,直接指定するか適切な using ディレクティブを指定して下さい. 動作確認は gcc 4.0.2 (Linux), gc

    iww
    iww 2012/06/29
    なんかいろいろあるライブラリ。BSDライセンス
  • Hello, OpenSSL! - Cube Lilac

    SSL 通信用のライブラリを追加しようと少し調べたところ,OpenSSL ライブラリを使うのがやはり王道っぽいので OpenSSL を使って実装してみました. gcc gcc を使う環境 (Linux, cygwin, ...) だと大抵の場合は最初からインストールされているようです.ない場合は,ソースコードをダウンロードして make するか,apt-get install とか適当なコマンドでインストールするとすんなり入るだろうと思います.コンパイル時には,crypto と ssl をリンクする必要があるようです. g++ -Wall -o test example_ssl.cpp -lcrypto -lssl VC++ Windows 版は,Shining Ligth Productions - Win32 OpenSSL からバイナリをダウンロードすることができるようです.Ligh

    Hello, OpenSSL! - Cube Lilac
  • OpenSSLとselect - Cube Lilac

    OpenSSL を使用しているときに複数のソケットの入力状況を管理する場合,通常の socket と同じように select や epoll を用いて制御を行うとうまくいかないときがあります. SSL のような暗号通信の場合、送信は「垂れ流し」では済まず、ハンドシェークを行なう必要があるからだが、この時、受信しようと思っていなかったデータ、つまり通信相手が送信したデータまで読み込んでしまう場合がある。 すると、SSL_write を呼んでいるのに、 OpenSSL の受信バッファに、意図せずデータが溜まってしまう。こうなってしまうと、select(2) や epoll(2) では検知できない。 select(2) や epoll(2) は、 I/O レベルでの受信データの有無を調べるシステムコールであり、それより上のレベルである OpenSSL ライブラリの受信バッファのことは関知しないか

    OpenSSLとselect - Cube Lilac
  • 1