お金をかけずにサーバーの勉強をしよう

C言語で C/Sプログラムを作ってみよう

2022年12月31日

メニューへ戻る

ちょっとできるようになったサーバーエンジニアは是非 C言語でクライアント/サーバー(C/S)プログラムを作ってみるのは大変良い勉強になります。

こんにちは

サーバーエンジニアになって3年くらいすれば OSの設定やらミドルウェアの設定にも慣れて設計に入っていく頃かと思います。

その頃は「そのままでも業務は続けられるし問題はないんだけど、そろそろステップアップしたいな…」と考える頃でしょう。

そういう気持ちになったらオススメなのが、C言語で自作のクライアント/サーバー通信プログラムを作ってみることです。

「クラサバなんて古いシステムでしょう? 今はWEBの時代っスよ? 今から勉強しても意味ないんじゃないスか?」

と思われるかも知れませんが、それは大きな誤りです。

何でかって?

サーバーエンジニアが扱っている通信系のソフトは全部クラサバだからです。

いや、単純にして明快。
クラサバは通信プログラムの超基礎です。

WEBなんて飾りです。偉い人にはそれが分かっとらんのですよ。


サーバーエンジニアで TCPや UDPのポートというものを知ってはいても、TCP/IP通信の本を読んだことがある人がそもそも稀で、ソケットって何なのかという所まで行くと理解しないままの人も多い印象です。

これらを理解しないでもやれはするんですが、クラサバのプログラムの動作原理を知ってると知らないではその後のステップアップの過程で雲泥の差になると思います。


これで奮起して「分かった。じゃやるわ。」となったとして、何で今さら C言語なの?と思いますよね。

それは、C言語だとクラサバプログラムが OSに対して通信作業を依頼することを必要とする事がよく見えるからです。

クラサバプログラムを作ることで、そこから拾える知識と経験に大変なものがありまして、C言語の経験が無くともこれのためだけに C言語を覚えても良いくらいだと思います。


さて、タイトルでは「作ってみよう」とか書いていますから、いつも通りソースが出てくんのかと思われた方、済みません。

C言語のクラサバプログラムの例は、ネットにいくらでも転がっていますので、そちらを探してみて下さい。


そして超オススメしたい本がこれ。
私は凄く大事にしていて「まだ買ってない奴は売っているうちに急げ!」と思っています。


本当の事を言っちゃうと、TCP/IPの本を読んでも C言語のクラサバプログラムをコピペで作っても、ソケットの観念がイマイチ腹落ちしなかったんですが、この本を読むのと C言語のクラサバプログラムのソースと動作を見るのをやっていってやっと理解できたのでした。

ソケットの理解のみならず、TCP通信で得られるデータが単に延々と続くデータの羅列でしかないこと、アプリケーションプロトコルの必要性、サーバープログラムがプログラム基礎で悪と習った永久ループをしていること、等々を「身を持って」知ることとなりました。

埋められていなかったジグソーパズルのピースがビシバシと入ってきて、急に目の前が明るくなるような体験でしたね。

上の本と C言語での通信プログラム作成を通してそれを理解してみれば、サーバーで稼働させる全ての通信について、サーバープログラム(プロセス)は何で、クライアントプログラム(プロセス)は何処にいるのだ、という観点を持つようになりました。

理論を知ってるのと、実物に触れるのでは大分違ったというのが素直な感想です。


やはり基本に立ち返って勉強してみると言うのは良いものです。

私は次にこの本を入手しました。
これもまた「まだ買ってない奴は売っているうちに急げ!」と思っています。


こちらの本のプログラムは実際には作りませんでしたが、おかげでイーサーネットから TCPまでの通信レイヤの理解が大変深まりました。

その後、改めて TCP/IPの本を読んでみると「何ということでしょう!あれだけ訳の分からなかった記述の意味が分かるように!」。


ここまでくると WireSharkの本も読み進められるようになり、サーバーにインストールしたミドルウェアの通信パラメータの意味も分かってくるようになりましたね。


もし私がサーバーエンジニア養成のためのお勉強カリキュラムを考えるなら、是非 C言語でのクラサバ通信プログラム作成を入れたいです。

なお、C言語での開発は Windowsよりも Linuxがオススメです。
コンパイラの gccを用意するのは簡単ですので。

複雑なものを作る必要はなく、本当にシンプルなもの、例えばクライアントプログラムから送信したメッセージに対して返答するだけのもので構いません。

自作のプログラムが通信する様子を Wiresharkを使って見てみれば、観念だけだった TCP/IP通信がきっと見えてきますよ。