小春网

 找回密码
 注册账号
查看: 889|回复: 2
收起左侧

[问题讨论] 紧急求救。C语言作业。TCP/IP通信型クイズ出題クライアントプログラム。拜托。

[复制链接]
发表于 2010-4-18 18:00:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

x
朋友们你们好。我是来寻求帮助的。老师出了C语言的一道通信题,我实在不会做。
其实题挺有意思的。可惜我没悟出它的解法。
希望高手们可以抽空帮我看一下,小妹在三感谢。以下是日语解释。

課題
􀂄 次の要件と次ページ以降の通信規定を満たすTCP/IP通信型クイズ出題クライアントプログラムを作成せよ
􀂋サーバ(作成不要)
􀁺 認証されたユーザに対しクイズを出題,5問正解したら秘密のメッセージを送信する
􀁺 すべての状態において,クライアントからの要求に対して受動的に動作を行う
􀂋クライアント
􀁺 クイズサーバに対応したユーザインタフェースを実現する

通信規定(1/7)
􀂄 状態の規程
􀂋サーバには以下の状態が存在
􀁺 ユーザ名を受け付ける状態(状態1)
􀁺 パスワードを受け付ける状態(状態2)
􀁺 クイズ出題を受け付ける状態(状態3)
􀁺 解答を受け付ける状態(状態4)
􀁺 秘密のメッセージの送信を受け付ける状態(状態5)
􀂄 クライアントでは,サーバがどの状態にあるかを判断して,必要なデータ送信を実施すること

通信規定(2/7)
􀂄 ユーザ名受付状態(状態1)
􀂋 ユーザ名として,自分の学籍番号(CD付)を使用すること
􀂋 例: p010123(アルファベットは小文字)
􀂋 ユーザ名の送信には,「USER <ユーザ名>」の形式を使用すること
􀂋 正しいユーザ名が入力された場合には,文字列“OK”を返し,パスワード受付状態(状態2)に遷移すること
􀂋 誤ったユーザ名が入力された場合には,文字列“NG”を返し,状態を遷移しないこと
􀂋 「USER」以外のコマンドが入力された場合には,文字列“ERROR”を返し,状態を遷移しないこと

通信規定(3/7)
􀂄 パスワード受付状態(状態2)
􀂋 パスワードとして,自分の学籍番号(CD付)を反対から書いた文字列を使用すること
􀂋 例: 321010p
􀂋 パスワードの送信には,「PASS <パスワード>」の形式を使用すること
􀂋 正しいパスワードが入力された場合には,文字列“OK”を返し,クイズ出題受付状態(状態3)に遷移すること
􀂋 誤ったパスワードが入力された場合には,文字列“NG”を返し,ユーザ名受付状態(状態1)に遷移すること
􀂋 「PASS」以外のコマンドが入力された場合には,文字列“ERROR”を返し,状態を遷移しないこと

通信規定(4/7)
􀂄 クイズ出題受付状態(状態3)
􀂋 クイズの正解数はサーバ・クライアント双方で保持しておくこと
􀂋 クイズの出題要求には,「QUIZ <現在の正解数>」の形式を使用すること(すなわち,正解数はクライアントでも保持しておく必要がある)
􀂋 正しい正解数が入力された場合には,クイズを出題(すなわち,クイズの文章を送信)し,解答受付状態(状態4)に遷移すること
􀂋 誤った正解数が入力された場合には,文字列“NG”を返し,状態を遷移しないこと
􀂋 「QUIZ」以外のコマンドが入力された場合には,文字列“ERROR”を返し,状態を遷移しないこと

通信規定(5/7)
􀂄 解答受付状態(状態4)
􀂋 解答の送信には,「ANSR <答え>」の形式を使用すること
􀂋 正しい解答が入力された場合には,文字列“OK”を返し,正解数を1増加させること
􀂋 間違えた解答が入力された場合には,文字列“NG”を返すこと
􀂋 正解数が5になった場合には,秘密メッセージ受付状態(状態5)に遷移すること.それ以外の場合にはクイズ出題受付状態(状態3)に遷移すること
􀂋 「ANSR」以外のコマンドが入力された場合には,文字列“ERROR”を返し,状態を遷移しないこと

通信規定(6/7)
􀂄 秘密メッセージ受付状態(状態5)
􀂋 秘密のメッセージは「GET MESSAGE」にて要求すること
􀂋 正しいコマンドが送られてきた場合には,秘密のメッセージ文章を返し,状態を遷移しないこと.
􀂋 引数部に誤りがある場合(すなわち「MESSAGE」以外の文字列を受信した場合)には,文字列“NG”を返し,状態を遷移しないこと
􀂋 「GET」以外のコマンドが入力された場合には,文字列“ERROR”を返し,状態を遷移しないこと

通信規定(7/7)
􀂄 終了メッセージ
􀂋 サーバは「QUIT」を受信すると“GOOD BYE”を返し,どの状態にいても接続を切断すること
􀂋 クライアントは「GOOD BYE」を受信すると,プログラムを終了する(とよい)
クライアントの条件
􀂄 クライアントでは通信規定に基づき的確なユーザインタフェースを実現すること
􀂋 「ユーザ名を入力して下さい→」の表示
􀂋 サーバからのメッセージを受信したときには,それをそのまま表示するのではなく適当な文章に変換して表示
􀂋 NG → 「パスワードが違います」など
􀂄 必要な状態を記憶しておくこと
􀂋 クイズ正解数は利用者が覚えておくのではなく,クライアントソフトで自動的に記憶可能である
􀂋 クライアントによる支援クイズサーバ簡易版とクライアントを提供します.

圧縮にはzipを利用し,sample_oli_utf8.zipとしてあります.
Linux環境で解凍するには,以下のコマンドを実行します.
unzip sample_oli_utf8.zip
これにより,実行ファイル「quiz_server」と「client」が取り出せます.
インタフェースは組み込まれていません.
(なお,同名ファイルがあれば上書きされる恐れがあります.注意して下さい.)
このままでは実行許可がありませんので,次のコマンドにてパーミッションを変更して下さい.
chmod u+x quiz_server
chmod u+x client

● 実行環境
クイズサーバプログラム「quiz_server」は,Linux環境でコンパイルされた実行型ファイルです.
Linux上でのみ動作します.漢字コードは,UTF-8です.

● 実行方法
ポート番号は起動時に指定するようにしてあります.実行する場合には,
./quiz_server 12345
のように,第1引数にポート番号を指定して下さい.起動後は,第2回課題で指定したプロトコルにしたがって動作します.

クライアントのほうは,
./client 127.0.0.1 12345
のように,第1引数にIPアドレス,第2引数にポート番号を指定して下さい.なお,サーバと同じマシンでクライアントを起動する場合には,IPアドレスを127.0.0.1(ローカルアドレス)とすれば動作します.

● アカウント
ユーザ名とパスワードには,以下の4種類が登録されています.
ユーザ名 パスワード
test1  1tset
test2  2tset
test3  3tset
test4  4tset

● クイズ出題
プログラムを簡略化するため,15問のみ用意してあります.
● 秘密のメッセージ
ユーザ名 メッセージ
test1  secret_message1
test2  secret_message2
test3  secret_message3
test4  secret_message4

提供sample_oli_utf8.zip sample_oli_utf8.zip (12.05 KB, 下载次数: 0) ,里面有可以执行的server ,client , 还有需要改变的client.c

上面说的挺麻烦,其实依我理解,要做的client.c需要做的改变是,
没改之前,需输入USER test1,改后,就变成提问的形式,ユーザ名を入力して下さい→test1
没改之前,需输入PASS 1tset,改后,就变成提问的形式,パスワードは?→1tset
等。。

上面说的有点乱,小妹QQ:75748086。。随时恭候您的疑问和指导。。
由于作业很重要,哪怕是一点点思想也好。
拜托传授。麻烦烦您了。再次致以最崇高的谢意。。。
头像被屏蔽
发表于 2010-4-18 20:28:41 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2010-4-19 10:10:20 | 显示全部楼层
太长了,估计没人有那么多时间帮你了,MM。同情下!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小春网
常务客服微信
微信订阅号
手机客户端
扫一扫,查看更方便! 快速回复 返回顶部 返回列表