【ただの技術備忘録】【第1回】LinuxC、ソケットプログラミング初歩
諸般の事情によりソケットプログラム初歩を記してみるなど。
ソケットプログラミングというと何だか小難しく聞こえるが、基本的にはファイルディスクリプタを媒介として入出力を行うだけだ。言い換えるとパイプ処理とプロセス間通信の延長戦に過ぎない。それが理解できればソケットプログラミングは60%終わったようなものだ。後はそれぞれの関数とタイミング、バイトオーダーなどを考慮すれば良いだけである。
前述のとおりソケットプログラミングでは、ファイルディスクリプタ使用してデータのやり取りを行う。コレは、パイプの概念を拡張し、新たにネットワークの概念を取り入れたもの、という認識で大方間違いはないと思われる。ソケットインターフェースの規格に関してはWindowsSockets(俗称winsock)が有名で、名前から予想が付くとおりWindowsOSで動作する規格である。LinuxやUNIXのソケットとやや異なるが、コンセプトは同じなので相互に通信処理を行うことも当然できる。まぁ、そうでないと困るわけだが。
さて、前口上はこの辺で、実際にソケットプログラミングをするときに行う手順を確認しておく。これはあくまでも概略なのでご配慮願いたい。
- ソケットを生成
- ソケットに命名
- 接続する
- 処理
- 接続を切る
- 消えろソケット!
実際に作成するときは、接続元と接続先、もっと言えばクライアントとサーバの二つのソケットプログラムを作成する必要があるので注意が必要。最も、引数やオプションでサーバクライアントを分けるように組んでも良いので結局のところ個人の自由である。何を選択するかは各個々人にお任せする。
ここで、多くの書籍やサイトではクライアントプログラムを書き始めるが、僕はサーバ側から組みたいと思う。恐らくクライアントプログラムから始めるのは、処理が少なくプログラムがわかりやすいせいだと思うが、先に受け皿を作ってからのほうが気分的によろしい。
【仕様】 クライアントからサーバに入力された文字を、 一つずらしてサーバからクライアントに返す。 【例】 クライアント入力「A」→サーバ出力「B」 【基本設計】 +使用するIPはlocalhost(ループバックアドレス:127.0.0.1) +使用するポートは7743(特に意味はない。強いて言えば名無しさん。) +標準入力は加味せず、ベタの決めうち(エラー処理とか改行処理が面倒なので)
ということで、次回はさくっとプログラムを記載したいと思う。