connect〜TCP/IPを使いソケット通信を行う クライアント編2〜


目次に戻る


socket関数を使ったソケットのオープン(初期化)を先日紹介しましたが、このままではサ ーバと通信を行うことができません。TCP通信はコネクション型と言って、サーバとクライ アントの間でコネクションの確立という動作を行う必要があります。(非コネクション型通信 はUDPと言います。これは別の機会で紹介します。)
 
コネクションを確立するために使用する関数がconnectですが、渡す引数の設定が 面倒です。
 
/* コネクションの確立 */
char *addres = "127.0.0.1";   /* 接続先のアドレス */
unsigned short port = 12345;  /* 接続先のポート番号 */
struct sockaddr_in serv_addr;
int re;

serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons( port );

/* serv_addr.sin_addrの決定の仕方がUNIX系とWindows系 で異なります。*/
/* UNIXここから */
re = inet_aton( addres , &(serv_addr.sin_addr) );
if( re == 0 ){
    /* エラー */
}
/* UNIXここまで */

/* Windowsここから */
serv_addr.sin_addr.s_addr = inet_addr( addres );
if( serv_addr.sin_addr.s_addr == INADDR_NONE ){
    /* エラー */
}
/* Windowsここまで */

/* 以下共通 */
/* 接続を確立する */
re = connect( fd , &serv_addr , sizeof( serv_addr ) );
 
if( re < 0 ){
    /* エラー */
}

色々ごちゃごちゃしたことをしていますが、ここで重要なのは最初と最後の部分。
 
/* 重要な部分 */
char *addres = "127.0.0.1";   /* 接続先のアドレス */
unsigned short port = 12345;  /* 接続先のポート番号 */
         :
         :
         :
/* 接続を確立する */
re = connect( fd , &serv_addr , sizeof( serv_addr ) );
addresとportに接続先のサーバのアドレスを指定して、connect関数を呼び出すことで接 続を確立します。中間部分はconnectに渡す引数を変数addresとportから導出する処理 がかかれています。
 
addresはいわゆるIPアドレスの事で、IPアドレスはネットワーク上のマシンを 特定する為に使います。ここではサーバが置いてあるマシンに割り当てられたIPアドレス を指定します。インターネットに接続されているマシンにはIPアドレスが必ず割り振られて います。"127.0.0.1"はlocalhostと呼ばれるアドレスで、自分自身のマシンを表します。
 
portはサーバ側から指示されている数値です。FTPサーバなら21番、 TELNETサーバなら23番等とサーバごとに固有の数値が決まっています。この値はサー バのマニュアルを見るか、サーバソフトを作った人に聞くなどして決定します。12345とい う数値は適当です。(^^;
 
わけわかんないですね。とりあえずは「ふ〜〜〜〜〜〜ん、そうなんだ」程度に思っ ていてください。


目次に戻る