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