C言語にて ソケット関数を使って TCP クライアントを作成する

C言語にて ソケット関数を使って エコーサーバを作成する
の続きです。

TCP クライアント

ソケット関数は、コネクション型の TCP (Transmission Control Protocol) と 非コネクション型の UDP (User Datagram Protocol) をサポートしている。

この記事では、エコーサーバに対応した TCP クライアントプロゴラムを作成する。

TCP クライアントを作成する

下記を参考にした。
TCP/IPネットワークプログラミング
http://onishi-lab.jp/programming/tcp_linux.html

connect 関数を使用して、サーバーに接続する。 この関数はOSのシステムコールです。

CONNECT
https://linuxjm.osdn.jp/html/LDP_man-pages/man2/connect.2.html

まず、ホスト名からIPアドレスを取得する。

下記を参照のこと。
C言語にて ホスト名からIPアドレスを取得する
https://ken-ohwada.hatenadiary.org/entry/2021/02/23/122908

次に、IPアドレスとポート番号を指定して、ソケットアドレスを作る。

connect 関数を使用して、サーバーに接続する。

下記のようなコードになる。

// ソケットを生成する
   int  sockfd  = socket( AF_INET, SOCK_STREAM, 0 );

// ソケットアドレスを作る
struct sockaddr_in sock_addr;
sock_addr.sin_family = AF_INET;
sock_addr.sin_addr.s_addr = inet_addr( ipaddress );
sock_addr.sin_port = htons( port );

// サーバーにに接続する
  connect( sockfd , (struct sockaddr *)&sock_addr, sizeof(sock_addr) );

// 送信と受信を繰り返す
for(int i=0; i<MAX_LOOP; i++)
{

// 数値を文字列にする
snprintf( send_buf, BUFSIZE, "%03d", i );

// 文字列を送信する
write( sockfd , send_buf, strlen(send_buf) );
printf("s: %s \n", send_buf);

// レスポンスを受信する
read( sockfd , read_buf, BUFSIZE );
printf("r: %s \n", read_buf);

}

実行すると下記のように表示する。

s: 000
r: 000
s: 001
r: 001
s: 002
r: 002

Githubにコードを公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/network/tcp