応用プログラミング I 7/13(改)
1
「魚の骨」ゲームの実装
無限ループ for(;;) {
printf("D@");
for(i=0; i< bones-2; i++) {
printf("+"); //骨を表示
}
printf("¥n");
if(turn) { // 自分の番 //
} else {
// 相手の番 //
}
turn=!turn;
}
自分の番 相手の番
//send
printf("Your turn > ");
for(;;) {
scanf("%d", &keyin);
if(1 <= keyin && keyin <=3) { break; } printf("*WRONG NUMBER*¥nRedo >");
}
bones-=keyin;
if(bones<2) {
sendmes(sock, "YOUWIN", &target);
printf("you lose!¥n");
break;
}
sprintf(buf, "%d", keyin);
sendmes(sock, buf, &target);
//recv
recvbuf(sock, buf, sizeof(buf), &target);
if(strcmp(buf, "YOUWIN")==0) { printf("you win!¥n");
break;
}
sscanf(buf, "%d", &keyin);
bones-=keyin;
}
OX ゲームのプロトコル
ポートは **** 番を使う。
送信データの形式は「<数値
x>,<数値y>」とする。数値
x,数値yは,OX 盤上の座標で,それぞれ
1~3の値を取るものとする。
数値
1が
0の場合はパス(後手が先手に始めさせるのにのみ用いる) ,-1 の場合はギブアップとする。
1.
接続相手に「0,0」を送信する
2.相手からの受信を受け付ける。
(数値
x=0)を受信すると,何も行わない(後手からの「0,0」により,先手はゲームを始める)(数値
x<0)を受信すると,相手がギブアップしたものとして,通信を終了する。3.
自分の手を送信する。
ギブアップの際は,x<0 の値を送信し,通信を終了する。
4. 2~3
を繰り返す。
応用プログラミング I 7/13(改)
2
SMTP のプロトコル
SMTP = Simple Mail Transfer Protocol
はメール送信に一般的に使われているプロトコルです(TCP ポ
ート番号 25) 。各コマンドは末尾に改行「¥r¥n」をつけたアスキー文字列です。通信手順は以下のよう になっています。
0.
開始メッセージ
1.接続の確認
2.
送信元メールアドレスの通知
3.宛先メールアドレスの通知
4.メッセージ本文の送信
5.接続の終了
0.
開始メッセージ
サーバに接続するとサーバは「220」から始まる開始メッセージを送信してくる。
1.
接続の確認
クライアント:サーバにコマンド「HELO <クライアントの
FQDN>」を送信。サーバから「250」から始まる応答があれば,メールを送信する準備ができた。
2.
送信元メールアドレスの通知
クライアント:サーバにコマンド「MAIL FROM: <送信元メールアドレス>」を送信。
サーバは問題がなければ「250」から始まる応答を返す。
3.
宛先メールアドレスの通知
クライアント:サーバにコマンド「RCPT TO: <宛先メールアドレス>」を送信。
サーバは問題がなければ「250」から始まる応答を返す。
4.
メッセージ本文の通知
クライアント:サーバにコマンド「DATA」を送信。サーバから「354」から始まる応答が返ってく るので,メールの本文を送信する。本文を送信し終わったら,最後に「.」 (ピリオド)と改行を送信 する。
サーバは問題がなければ「250」から始まる応答を返す。
5.
接続の終了
クライアント:サーバにコマンド「QUIT」を送信。
問題がなければサーバは「250」から始まる応答を返す。通信は終了する。
課題 21
学芸大のメールサーバ
mail.u-gakugei.ac.jp等に接続して,メールを送信する
SMTPクライアントを実 装しなさい。
(実際にメールは送れないが,debianのlocalhost 25番ポートに接続すれば,SMTPサーバの代わりになる。
それでテストしてもよい)