C++ Builder CE ネットワークプログラミング

1. IO-DATA TS-WLCEから静止画をGet

TS-WLCEをいじるプログラムないしスクリプトのシリーズで、少し前の静止画をcurlで得る回によると具体的なcurlのコマンドラインは、

curl --digest -o /mnt/nas/images/now.jpg -u uname:passwd http://192.168.0.112/snapshot.jpg

でした。同等のことをC++ Builder CEのプログラムで行えばいいわけですが、httpのGetをすればいいので、比較的簡単です。ただし、上記のように“snapshot.jpg”というファイルに落として、それを開いて確認するというのではアプリを実行する意味がないので、ボタンを押せば、現在の画像が画面に表示されるという感じに作りましょうかね?使う部品は、もちろんボタン(TButton)それからhttpのプロトコルを扱えるコンポーネント(TIdHTTP)、さらに画像を表示するためのコンポーネント(TImage)になります。まずIDEを起動しましょう。そして必要な部品3個をフォームに置きます。その状態が下図、

こんな感じにとりあえず置いて、位置、大きさを整えます。IdHTTP1はプログラム実行時には見えないので、フォームの端やらタイトルバー付近においてもおけです。調整した様子が、

IdHTTP1をクリックして、プロパティーのHTTPOptionsを開いて、下図のようにしておきましょう。

追加でセットするのは、hoInProcessAuth=Trueだけです。

こんな感じですかね。とりあえず動かしてみてからフォームは調整しましょうかね。フォーム上のButton1をダブルクリックして、以下のコードを追加します。

void __fastcall TForm1::Button1Click(TObject *Sender)
{
	TMemoryStream* ms = new TMemoryStream(); //取得したデータを格納する

	IdHTTP1->Get("http://192.168.0.112/snapshot.jpg", ms);


	ms->Position = 0;
	Image1->Picture->LoadFromStream(ms);
	delete ms;

	IdHTTP1->Disconnect();


}

Form1のコンストラクタの方には、用意したid,passwordを設定するコードを書きます。

__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
	IdHTTP1->Request->Username = "guest";
	IdHTTP1->Request->Password = "time-lapse";

}

ここまで来たら、一旦セーブしておきましょうかね?その後”F9″で。プログラムを起動して、Button1をクリックすれば、

が得られます。めでたし、めでたし。めちゃくちゃ簡単ですね。動いてみれば……。うまく動かない場合に、どうやってネットワーク上のやりとりを確認するかなどはまた機会を改めて。

コメント

  1. […] 前記事で単純なhttpのGetを扱いましたが、今回はhttpsなGetをやってみます。こちらの方が普通ですかね。VCLプログラムの新規作成を選んで、新規フォームの上に、コンポーネント(TIdHTTP)とボタン、結果を表示するためのTLabelを2個配置します。今回は、htmlをGetするのではなく、サーバーの証明書関係の情報を得ることにしましょう。証明書は、ブラウザから確認することもできます。 […]