2022-01-01から1年間の記事一覧

C言語にてソケット関数を使って WebSocket サーバー を作成する

C言語にてソケット関数を使って WebSocket クライアント を作成する の続きです 前回はWebSocket クライアント を作成したので 今回はWebSocket サーバー を作成する。 まずはオープニングハンドシェイクから。 HTTP/1.1 101 Switching Protocols Upgrade: w…

C言語にてソケット関数を使って WebSocket クライアント を作成する

Boost.Beast で WebSocket を試す の続きです。 前回は TCP通信のやり取りを解析したので、 今回はC言語のソケット関数を使ってクライアント を作成してみます。 すでにやっている人がいて どこかにコードがあると思ったが、見つからなかった。 下記のプロト…

Boost.Beast で WebSocket を試す

Boost.Beast は Boost.Asio の上に実装された HTTP と WebSocket の C++ライブラリです。 WebSocket は 単一のTCPコネクション上に双方向通信のチャンネルを提供する 通信プロトコルです。 RFC 6455 として標準化されている。 Boost.Beast wikipedia: WebSoc…

C++ にて Boost を使って UUID を生成する

Mac にて UUID を生成する の続きです Boost はC++用のソフトウェアライブラリです。 Boost には UUID を生成する random_generator() などの関数がある。 wikipedia: Boost C++ライブラリ 下記を参考にした。 boostjp: オブジェクトにユニークなIDを付ける …

Mac にて UUID を生成する

UUID(Universally Unique Identifier)は、ソフトウェア上でオブジェクトを一意に識別するための識別子です。 wikipedia: UUID Mac にてUUID を生成する方法は2つある。 (1) libuuid Linuxと同様にC言語のAPI (2) CFUUID Mac固有のAPIで,Objective-C(ある…

C++にて Boost を使って SHA1 ハッシュを計算する

C言語にて Openssl を使って SHA1 ハッシュを計算する の続きです Boost はC++用のソフトウェアライブラリです。 Boost にはハッシュ関数として sha1, md5 が用意されている。 wikipedia: Boost C++ライブラリ ハッシュ関数の使い方は、下記を参考にした。 C…

C言語にて Openssl を使って SHA1 ハッシュを計算する

Openssl は SSLプロトコルのライブラリです。 SHA1はハッシュ関数の1つです。 ハッシュ関数は任意のデータから短い値を得るための関数です。 その値をハッシュ(hash)あるいはダイジェス(digest)という。 wikipedia: OpenSSL wikipedia: SSL (Secure Sockets…

C言語にて MySQL に画像データを保存する

Mac に MySQL をインストールする の続きです。 MySQL には 大きなバイナリデータを保存する BLOB型 (Binary Large Object) が用意されている。 mysql: BLOB 型と TEXT 型 wikipedia: バイナリ・ラージ・オブジェクト しかしMySQL には BLOB 型を扱うための…

C++にて Boost を使ってバイナリデータを16進文字列に変換する

C言語にてバイナリデータを16進文字列に変換する の続きです。 Boost はC++用のソフトウェアライブラリです。 Boost には、hex()/unhex() などの関数がある。 wikipedia: Boost C++ライブラリ boost hex 下記を参考にした。 Faith and Brave - C++で遊ぼう i…

C言語にてバイナリデータを 16進文字列に変換する

16進文字列は 1バイト(8ビット)のデータを16進文字 2文字で表現したものです。 どこかに定義がありそうな気がするが、 見つからなかった。 十六進法 下記を参考にした。 C言語 hexdump(16進ダンプ)を自作する // 読み込んだデータを1バイトずつ16…

C++ にて Boost を使ってバイナリデータを Base64 文字列に変換する

C言語にてバイナリデータを Base64 文字列に変換する の続きです。 Boost はC++用のソフトウェアライブラリです。 Base64の変換テーブルを内蔵していて、base64_from_binary などの関数がある。 wikipedia: Boost C++ライブラリ boost base64_from_binary.hp…

C言語にてバイナリデータを Base64 文字列に変換する

Base64 は電子メールに画像を添付する際に用いられる変換形式です。 RFC 4648で標準化されている。 wikipedia: Base64 RFC 4648 - The Base16, Base32, and Base64 Data Encodings 仕様はシンプルなので仕様とおりに作ればよいが。 6ビット毎に変換するので…

C++ にて MySQL Connector/C++ を使って MySQLを操作する

Mac に MySQL をインストールする の続きです。 MySQL Connector は MySQL サーバーへ接続するためのクライアントライブラリです。 オラクルよりプログラム言語別に提供されている。 MySQL Connector/C++ はC++用のライブラリです。 MySQL Connector および …

Mac に MySQL をインストールする

下記を参考にした。 qiita: Macでmysqlを扱う方法 苦戦したので、メモとして残す。 MySQL はオープンソースのデータベースです。 wikipedia: MySQL Mac の場合は、brewコマンドでインスールできる。 Homrbrew mysql インストールする。 % brew install mysql…

Macにて libtool を使って静的ライブラリを作る

Macにて gcc を使って動的共有ライブラリを作る の続きです。 libtool はソースコードから共有ライブラリを作成するための ツールプログラムです。 wikipedia: GNU_Libtool libtool manual: Linking static libraries 前回は、動的ライブラリを作った。 今回…

Mac にて gcc を使って動的共有ライブラリを作る

下記を参考にした。 Mac OSXでダイナミックライブラリdylibを作ったり使ったりする方法 gcc は C言語のコンパイラーです。 wikipedia: GNU C Compiler この記事では下記の "Hello World" を出力する ソースコード hello.c を 共有ライブラリにする。 hello.c…

C/C++ の HTTP Server

C/C++ で構築できる HTTP Server についてまとめた。 下記を参考にした。 qiita: C/C++アプリケーション組込みHTTPサーバの調査 C 言語 編 (1) libmicrohttpd HTTP サーバーの Cライブラリ。 GNUプロジェクトにより開発されている。 ライセンスは、 GNU LGPL…

C 言語にて libcurl と libmicrohttpd を使って Gmail + OAuth で メールを送信する

C 言語にて libcurl を使って Gmail + OAuth で メールを送信する の続きです。 libcurl libcurl は様々な通信プロトコルに対応している C ライブラリです。 メール関連では、smtp, pop3, imap に対応している。 libcurl Mac の場合は、brewコマンドでインス…

Gmail の仕様変更

(1) ユーザー名とパスワードによるログイン 以前は「安全でないアプリの使用を許可する」 というオプションがあり、 利用することができたが、 2022 年 5 月で終了した。 Google: 安全性の低いアプリと Google アカウント (2) OAuth認証の(OOB)フロー 以前…

The Modern C++ Challenge 第12章

The Modern C++ Challenge 第11章 の続きです。 今回は第12章に挑戦します。 まずは目次を読む。 第12章 ネットワーキングとサービス 95 ホストの IP アドレスを見つける 96 クライアントサーバー Fizz-Buzz 97 ビットコインの為替レート 98 IMAP を使用した…

The Modern C++ Challenge 第11章

The Modern C++ Challenge 第10章 の続きです。 今回は第11章に挑戦します。 まずは目次を読む。 第11章 暗号化 88 シーザー暗号 89 ヴィジュネル暗号 90 Base64 エンコーディングとデコーディング 91 ユーザー資格情報の検証 92 ファイルハッシュの計算 93 …

The Modern C++ Challenge 第10章

The Modern C++ Challenge 第9章 の続きです。 今回は第10章に挑戦します。 まずは目次を読む。 第10章 アーカイブ、画像、およびデータベース 79 ZIP アーカイブ内のファイルの検索 80 ZIP アーカイブへの/からのファイルの圧縮および解凍 81 パスワード付…

The Modern C++ Challenge 第9章

The Modern C++ Challenge 第8章 の続きです。 今回は第9章に挑戦します。 まずは目次を読む。 第9章 データのシリアル化 73 XML との間のデータのシリアライズとデシリアライズ 74 XPath を使用した XML からのデータの選択 75 データを JSON にシリアライ…

The Modern C++ Challenge 第8章

The Modern C++ Challenge 第7章 の続きです。 今回は第8章に挑戦します。 まずは目次を読む。 第8章 デザインパターン 67 パスワードの検証 68 ランダムパスワードの生成 69 社会保障番号の生成 70 承認制度 71 観測可能なベクターコンテナ 72 割引を含む注…

The Modern C++ Challenge 第7章

The Modern C++ Challenge 第6章 の続きです。 今回は第7章に挑戦します。 まずは目次を読む。 第7章 同時実行 61 並列変換アルゴリズム 62 スレッドを使用した並列最小および最大要素アルゴリズム 63 非同期関数を使用した並列最小および最大要素アルゴリズ…

The Modern C++ Challenge 第6章

The Modern C++ Challenge 第5章 の続きです。 今回は第6章に挑戦します。 まずは目次を読む。 これだけで、お腹いっぱいになりそう。 第6章 アルゴリズムとデータ構造 優先キュー 循環バッファー ダブルバッファ 範囲内で最も頻度の高い要素 テキスト ヒス…

The Modern C++ Challenge 第5章

The Modern C++ Challenge 第4章 の続きです。 今回は第5章に挑戦します。 まずは目次を読む。 第4章 日付と時間 計測機能実行時間 2 つの日付の間の日数 曜日 年間通算日と週 複数のタイムゾーンの会議時間 月間カレンダー 問題文を読む。 問39 関数の実行…

The Modern C++ Challenge 第4章

The Modern C++ Challenge 第3章 の続きです。 今回は第4章に挑戦します。 まずは目次を読む。 第4章 ストリームとファイルシステム パスカルの三角形 プロセスリストの表形式の印刷 テキストファイルから空行を削除する ディレクトリのサイズの計算 特定の…

The Modern C++ Challenge 第3章

The Modern C++ Challenge 第2章 の続きです。 今回は第3章に挑戦します。 まずは目次を読む。 第3章 文字列と正規表現 23 バイナリから文字列への変換 24 文字列からバイナリへの変換 25 記事のタイトルを大文字にする 26 区切り文字で区切られた文字列を結…

The Modern C++ Challenge 第2章

The Modern C++ Challenge 第1章 の続きです。 今回は第2章に挑戦します。 まずは目次を読む。 目次からは内容が推測できない。 第2章 言語機能 15 IPv4 データ型 16 範囲内の IPv4 アドレスの列挙 17 基本操作による 2D 配列の作成 18 任意の数の引数を持つ…