0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C#でm5stackとhttp通信してみる

Posted at

#はじめに
前回記事、http通信を勉強するで実際に勉強した上でhttpクライアントのプログラムを作成していきます。

##開発環境

  • windows 10 Home 64bit
  • Visual Studio Code 1.41.1
  • .NET Core 3.0

#C#http通信するプログラムを作る段取り

  • VScodeC#の開発環境をセットアップする
  • C#http通信プログラムを作成する。

###VScodeC#の開発環境を構築する
こちらの方はたくさんの方々が記事を挙げているのですごいざっくり紹介です。
せっかくなので.NET Coreを使っていきます。以下のドキュメントで開始手順が書いているので進めていきましょう。

C# および Visual Studio Code の使用を開始する
microsoft公式なので安心です。

###C#http通信プログラムを作成する。
今回はGUIが面倒だったのでコンソールプログラムで作成します。
作るのはhttpのクライアント側なので以下の公式ドキュメントのサンプルを実行してみましょう。

HttpClient クラス
microsoft公式です。
このサンプルでクライアントが送る情報は、GETとHost情報(ドメイン名 or IPアドレス)だけでした。

こちらのサンプルはクライアントから非同期スレッド(GetAsyncが非同期スレッドの様子)でHttpResponseMessageを受け取って表示するといったサンプルプログラムになっていますので、HttpResponseMessageクラスについてもしらべてみました。

HttpResponseMessage クラス
レスポンスメッセージが詰まっている様子。
コンテンツはstring型のプロパティでゲットできます。
ヘッダー部分は各種特定の型として取得できる様子です。結構な種類があるので全部読むのは時間がかかりそうです。

#実際にm5stackとつないでみたよ

C#のコード(アクセスするアドレスを変更しただけ)
sample

using System;
using System.Threading.Tasks;
using System.Net.Http;

namespace httptest_C_
{
    class Program
    {
        // HttpClient is intended to be instantiated once per application, rather than per-use. See Remarks.
        static readonly HttpClient client = new HttpClient();
        static async Task Main()
        {
            // Call asynchronous network methods in a try/catch block to handle exceptions.
            try
            {
                HttpResponseMessage response = await client.GetAsync("http://192.168.10.254/");
                response.EnsureSuccessStatusCode();
                string responseBody = await response.Content.ReadAsStringAsync();
                // Above three lines can be replaced with new helper method below
                // string responseBody = await client.GetStringAsync(uri);
                Console.WriteLine(responseBody);
            }
            catch (HttpRequestException e)
            {
                Console.WriteLine("\nException Caught!");
                Console.WriteLine("Message :{0} ", e.Message);
            }
        }
    }
}

結果は以下になりました。
最初はリクエストメッセージ(C# -> m5stack)

GET / HTTP/1.1

Host: 192.168.10.254

次はレスポンスメッセージ(C# <- m5stack)

Click <a href="/H">here</a> to turn ON the LED.<br>Click <a href="/L">here</a> to turn OFF the LED.<br>

うーん、ほんとにシンプルで男らしい・・・
m5stack側は上記のhtmlとステータスコード(HTTP/1.1 200 OK),コンテンツタイプ(Content-type:text/html)が来ているはずですが、表示するように作っていないので表示されていません

###今回引っかかったこと

  • C#のビルドがない!?
    • この公式チュートリアルだといきなりコンソールプログラムを作成してrunコマンドで実行してデバッグの説明に入っていますが、buildに関してはコマンド名が出てくるのみとなっていたのでてっきりrunを実行するとビルドされるものだと勘違いしました。
    • buildに関して、VisualStudio2017などではコンパイルするとファイルの保存をコンパイルが同時に実行されますが、VScodeでは保存しないと前のファイルをコンパイルしてしまいます。パワーシェル?コマンドプロンプト?でビルドを行うので当たり前なのですが慣れないと絶対忘れますね・・・
  • .NET Coreにはhttpclientがない!?
    • 初めに、サンプルを実行しようとしたのですが、usingディレクティブが見つかりませんと出てきました。なんでだろう?と色々試した結果、system.NET.HttpHを大文字にしていなかったのが原因でした。コードインテリジェンスを使用してtabで楽していたのがはまった原因でした。

#まとめ
今回はC#.NET Coreを使ったhttp通信をm5stackとやってみました。使うだけなら非常に楽なのですが、実際に作りこむとなるとHttpResponseMessageのヘッダー部分やステータスコードを判別対象に使わないといけないのでまた勉強が必要そうです。
また、VSCodeで今回は作りましたが、結構コードインテリジェンスが効かない印象を受けました。(Visual Studioが効きすぎなだけかもですが・・・)
ですが、自分のような浅い初心者ではコードインテリジェンスがないと型がわからなかったりこの型で合ってるのか確認するのに時間がかかるのでこれはこれでやりにくかったです。
m5stackVSCodeでやってるのでやれるのならばいっしょにしたいのですが、何かいい手はないでしょうかねぇ・・・

次回はswifthttp通信を行ってみたいと思います。
有意義な年末ライフをぜひお楽しみください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?