今までサーバ―クライアント間の通信を挟むようなプログラムを書いたことがなかったのですが、今後、そういう技能も必要になりそうなので、試しで書いてみました。
将来的にはC++でサーバ-クライアント間で画像通信などができたら良いと考えていますが、全く知識がないので、まずはサーバ側のプログラムとクライアント側のプログラムを使って、その間のデータをやり取りするということをやってみたいと思います。
環境がWindowsなので、Winsock2を使ってみることにしました。WinsockはWindows環境でソケットを用いてネットワークプログラミングする際のAPIで、TCP/IPなどを用いた通信ができるようになります。
ソケットとは何ぞや? という話ですが、通信する際の口になるようなもので、もっと具体的に例えると電話機のようなものです。
今回は、まず簡単なプログラムを書いてみるということで、クライアント側から2つの数字を与え、サーバ側でこの2つの数字を加算して返してくれるプログラムを書きました。何に使うかとかは考えておらず、あくまで学習用のテストプログラムという位置づけです。
本来は2台のPCでやるべきなんでしょうが、2台PCを用意してネットワーク環境を用意してやるのが面倒だったので、今回は同じPCの中にVisual Studioで2つのソリューションを作り、それぞれ実行しました。
よって、サーバとクライアントのPCは同じで、繋ぐときのIPアドレスはこのPCのIPアドレスを指定してやっています。
目次
ソースコード
以下に、サーバ側とクライアント側のソースコードを示します。
実行例
まず、接続を待ち受けるサーバ側のプログラムを起動してみます。
以下のように、サーバ側プログラムを立ち上げると受信待ちの状態になります。
ここで、クライアント側のプログラムを立ち上げていきます。ここで、サーバのIPアドレスとポート番号を求められるので、それぞれ入力していきます。サーバとクライアントに同じPCを使っているので、このPCのIPアドレスがサーバのIPアドレスになります。
数字の入力を求められるので、2個入力するとその加算結果がサーバで計算されて返却されてきます。
サーバ側のコンソールは、このとき以下のような画面になっています。
正常に送受信ができているように見えます。
まとめ
今回は簡単にソケットプログラミングのコードを書いてみました。
応用することで画像データなども送れそうなので、今度は画像データを送ったり、サーバ用、クライアント用のPCを作って送受信したりしてみたいですね。
また、C++やPythonの間でデータのやり取りをするなど、違う言語で書いたプログラム間のデータのやり取りなどにも応用できるかもしれません。