usagi / virtual-keyboard-prototype-1

仮想キーボード試作1型
3 stars 0 forks source link

reciever.cxx、15,16行目について #5

Closed arisin closed 10 years ago

arisin commented 10 years ago

boost::asio::io_service service; udp::socket socket(service, udp::endpoint(udp::v4(), port));

この2行は通信をつすための準備、ということでしょうか? よろしくお願いします。

usagi commented 10 years ago

サンプル、recieverとsenderではUDP/IPを扱う為にBoostライブラリーの一部のASIOという機能を使っています。

UDP/IPを扱う仕組みはOSによって異なりますが、Boostライブラリーがライブラリー内部でその差異を吸収してくれる事で、同じコードをOSX、Windows、GNU/Linuxなど多数のプラットフォームで扱えて便利なので今回はBoostのASIOを使っています。

boost::asio::io_service service;

これはboost::asio::io_service型のserviceを使う為に定義しています。boost::asio::io_service型はBoostのASIO機能の入手力(IO)を管理するための型だと思ってくれれば差し当たりはそれで構いません。

udp::socket socket(service, udp::endpoint(udp::v4(), port));

先ず、udp::socketは、それより少し前でusing boost::asio::ip::udp;を行っていますので、本来ならばboost::asio::ip::udp::socketとフルに名前空間を書かなければならないものを、いくらなんでも長ったらしい過ぎるのでusingでboost::asio::ip::udpをudpとして使えるようにしています。

一部省略した表記でのudp::socket型(=boost::asio::ip::udp::socket型)のオブジェクトをsocketというシンボル名で定義をしているのがこの部分です。

定義の際にsocket(service, udp::endpoint(udp::v4(), port))としてudp::socket型のコンストラクターを呼び出しています。serviceは先に定義していたboost::asio::io_serviceのオブジェクト、 udp::endpoint(udp::v4(), port)は「エンドポイント(IP通信の基点)として、IPv4で、ポート番号portとして」という事を定義しています。サンプルのportはデフォルトだと、だいぶ前の方でconstexpr auto default_port = 30000;として30000になるようにしてあります。

参考 // いまはまだ、このBoostのドキュメントや中身をみてもなんやらわからんかも。とりあえずはサンプルみて使うことができれば良いです。実際この中身はむずかしいので。

usagi commented 10 years ago

つまり、

この2行は通信をつすための準備、ということでしょうか?

そういう事です。

その後のwhile(true)ループで、

これを繰り返します。この部分でも何かあればまた個別にどうぞ。

usagi commented 10 years ago

閉じます。