connectは、指定のアドレスのサーバに接続するUNIXシステムコール・・・。
これまでtelnetでサーバに接続してきたが、今回はクライアントを作り、connectでサーバに接続して通信をする・・・。
サーバは、
"end"が送られてくるまで、クライアントからきた文字列をそのまま送り返す・・・。
クライアントは、
接続先の名前とポートを入力してもらって、
ホスト情報を取得・・・。
ソケット作成・・・。
ポートと先程のホスト情報のIPアドレスをtarget_addrにセットして、connectで接続・・・。
接続成功なら、こちらで入力した文字列を相手に送信し、そのあと相手からのデータを受信する・・・・。
それを、こちらが"fin"と入力されるまで繰り返す・・・。
$ ./send soc = 3 setsockopt(SO_REUSEADDR) success. bind success. listen success.
サーバ実行・・・。
$ ./connect hostname: bgstation0.com port: 3000 connect success. >
クライアント側を実行し、bgstation0.comの3000ポートに接続・・・。
一応、">"を入力フォームとしている・・・。
$ ./send soc = 3 setsockopt(SO_REUSEADDR) success. bind success. listen success. accept!(IPAddress = 27.120.97.162, Port = 49267)
サーバに繋がったようなので、やりとりしてみる・・・。
$ ./connect hostname: bgstation0.com port: 3000 connect success. >hogefoobar hogefoobar >
"hogefoobar"に対して、同じ文字列が帰ってくる・・・。
$ ./send soc = 3 setsockopt(SO_REUSEADDR) success. bind success. listen success. accept!(IPAddress = 27.120.97.162, Port = 49267) hogefoobar
サーバも受け取ってるのを確認・・・。
$ ./connect hostname: bgstation0.com port: 3000 connect success. >hogefoobar hogefoobar >fin $
"fin"を入力すると、クライアント側は終了・・・。
$ ./send soc = 3 setsockopt(SO_REUSEADDR) success. bind success. listen success. accept!(IPAddress = 27.120.97.162, Port = 49267) hogefoobar $
サーバは接続が切れる(sendやrecvに失敗した時)と終了するようにしている・・・。
Sample/connect.c at master · bg1bgst333/Sample · GitHub
Sample/send.c at master · bg1bgst333/Sample · GitHub