ダウンロードしたサーバプログラムをdg_server,クライアントプログラムをdg_clientとする.
まず,それらプログラムに実行権を与える.そのためには,chmodコマンドを用いて,
% chmod 755 dg_server
% chmod 755 dg_client
と入力する.lsコマンドによりディレクトリの内容を表示させてみよう.
% ls -l
-rwxr-xr-x 1 matsumi user 7313 9月 16日 18:03 dg_client
-rwxr-xr-x 1 matsumi user 7241 9月 16日 18:03 dg_server
となっていれば,これらプログラムに実行権が与えられている.
プログラムの実行は,まず,サーバプログラムを
% ./dg_server
と入力することにより実行し,次にクライアントプログラムを,
% ./dg_client
と入力することにより実行する.
キーボードからCTRL+Dを入力する(CtrlキーとDを同時に押す)とファイルの終わりを表すEOFが標準入力からプログラムに送られる.(ただし,ワークステーションルームのマシンでは,CAPS+Dを押すこと.)
入力関数は,CTRL+Dを受け取ると,それぞれの関数に決められた戻り値を返す.
例えば,関数scanf()はコードEOFを返す.従って,例えば,CTRL+Dの入力によりwhileループを抜けるようなプログラムは次のように書けばよい.
while(1) { ..... if(scanf("%s", key) == EOF) break; /* CTRL+Dの入力でbreak */ ..... }
また,関数fgets()はNULLを返す.従って,同様のプログラムは次のようになる.
while(1) { ..... if(!fgets(key, MAXKEYLEN, stdin)) break; /* CTRL+Dの入力でbreak */ ..... }
文字関数strtok()が使える.例えば,文字列"abc,def,ghi,jkl,mno"から,"abc","def","ghi""jkl","mno"を切り出すには,次のようにすればよい.
char str[] = "abc,def,ghi,jkl,mno"; char* token; token = strtok(str, ","); do { tokenを用いた処理; ..... } while(token = strtok(NULL, ",")); /* strtok()がNULLを返すまで繰り返し */
詳細は,Cの参考書を参照のこと.
scanf("%s", line)に対して,文字列"abc def ghi"を入力すると,lineには"abc"が代入され,"def ghi"はバッファに残ったままになる.fgets()は空白を含む文字列を読み込むのでfgets()を用いる方が簡単である.
データベースの初期設定
static char *db[] = {"amano-taro","0426-91-9418","ishida-jiro","0426-91-9872", "ueda-saburo","0426-91-9265","ema-shiro","0426-91-7254", "ooishi-goro","0426-91-9618",NULL};を次のように書き換えます.
static char *db[11]; for(i=0; i<=9; i++) db[i] = (char *)malloc(32); strcpy(db[0], "amano-taro"); strcpy(db[1], "0426-91-9418"); strcpy(db[2], "ishida-jiro"); strcpy(db[3], "0426-91-9872"); strcpy(db[4], "ueda-saburo"); strcpy(db[5], "0426-91-9265"); strcpy(db[6], "ema-shiro"); strcpy(db[7], "0426-91-7254"); strcpy(db[8], "ooishi-goro"); strcpy(db[9], "0426-91-9618"); db[10] = NULL;
学生用のマシンをe408d133(150.37.192.133)とe408d201(150.37.192.201)とし,e408d133でサーバプログラムdg_serverを,e408d201でクライアントプログラムdg_clientを起動するとする.まず,e408d133でサーバプログラムを起動する.
e408d133 % ./dg_server
次にクライアントプログラムをe408d201で起動する.
e408d201 % ./dg_client
server host name?
上のようにサーバホスト名を聞いてくるので,IPアドレス"150.37.192.133"を入力する.
ただし,ファイアウォールの関係で,学生用マシン間でコネクションが張れるTCPポート番号は8000~8050のみである.
~/home/.qt/qtrcファイルを開いて,次の一行
[XIMInputStyle=On The Spot]を
[XIMOnputStyle=Over The Spot]に変更して保存後,ターミナルを再起動する.