connect

connectは、指定のアドレスのサーバに接続するUNIXシステムコール・・・。

Man page of CONNECT

これまで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