Энгийн өгөгдлийн сангийн сервэр, клиент програм
Энэ лабораторийн ажлаар энгийн өгөгдлийн сангийн сервэр (үйлчлэгч) ба клиент (үйлчлүүлэгч) програмыг сокет ашиглан зохионо. Эцсийн хугацаа: XVI долоо хоног, 1 өдөр.
Илгээхдээ програмын ажилладаг файлыг (db_client, db_server), эх кодтой (db_client.c, db_server.c) нь хамт бие даалтын ажлын тайланг (report-sw99d999-ss2.doc, хэрхэн хийсэн, ямар асуудал тулгарсан, яаж шийдсэн гэх мэт) хавсаргаад ~/sw302/ss2 нэртэй директор дотор байрлуулаарай.
Сервэр програмын шаардлага:
1. Програм интернэтийн сокет үүсгэн клиент програмуудын хүсэлтийг хүлээнэ. Сокетын сонсох хаяг нь 0.0.0.0 буюу 0=256^3*0 + 256^2*0 + 256^1*0 + 256^0*0 байх ба портын дугаарыг командын мөрөөс өгдөг байна. Портын дугаар, IP хаяган дээр BigEndian, LittleEndian-ы асуудлыг мартав аа.
2. Ямар нэгэн клиент програм холбогдон хүсэлт илгээхэд хүсэлтийг боловсруулж тохирох үйлдлийг хийгээд хүсэлтийн хариуг илгээнэ. Хүсэлтийг лог(текст файл) файлд хадгална.
1. Хүсэлт нь дараах хэлбэртэй байна.
"CREATE name" - name нэртэй тэмдэгт мөр хадгалах өгөгдлийг үүсгэнэ. Хэрэв өмнө нь үүссэн байвал "ERROR" гэсэн хариу буцаана. Эсрэг тохиолдолд "SUCCESS" хариуг буцаана.
"DELETE name" - name нэртэй өгөгдлийг устгана. Хэрэв байхгүй байвал "ERROR" гэсэн хариу буцаана. Эсрэг тохиолдолд "SUCCESS" хариуг буцаана.
"GET name" - name нэртэй өгөгдлийн утгыг авна. Хэрэв байхгүй байвал "ERROR" гэсэн хариу буцаана. Эсрэг тохиолдолд өгөгдлийн утгыг буцаана.
"SET name, value" - name нэртэй өгөгдөлд утга онооно. Хэрэв байхгүй байвал "ERROR" гэсэн хариу буцаана. Эсрэг тохиолдолд "SUCCESS" хариуг буцаана.
"LOG" - сервэр ажиллаж эхэлснээс хойшхи клиент програмуудын бүх (алдаатай, алдаагүй) хүсэлтийг буцаана.
2. Хариу нь ганц тэмдэгт мөр байна. Жишээ нь:
хүсэлт - CREATE user
хариу - SUCCESS
хүсэлт - GET pass
хариу - ERROR
хүсэлт - GET user
хариу(user -т өмнө нь утга оноогоогүй үед түүнийг хоосон гэж тооцно) -
хүсэлт - SET user, dorj mini dee
хариу - SUCCESS
хүсэлт - GET user
хариу - dorj mini dee
хүсэлт - LOG
хариу - CREATE user | GET pass | GET user | SET user, dorj mini dee | GET user | LOG
3. Сервэр програм олон клиентүүдэд үйлчлэн төгсгөлгүй ажиллана. Тэдгээр клиентүүдэд нэгэн зэрэг үйлчлэх магадлалтай. Сервэр SIGTERM сигналыг хүлээн авч ажиллагаагаа дуусгахдаа "Shutting down db server..." гэсэн мэдээллийг стандарт гаралт руу гаргана. Тиймээс сервэрийг зогсоохдоо kill командыг SIGTERM сигналтайгаар ашиглаж болно.
4. Сервэр ажиллаж эхлэхдээ өөрийнхөө pid -г стандарт гаралт руу гаргана.
5. Сервэр ажиллаж дуусаад эргээд ажиллахад өмнө хадгалсан өгөгдлийн утгууд байж байх ёстой. Өгөгдлөө хадгалахын тулд файл ашиглах хэрэгтэй.
6. Командын мөрөөс ажиллуулах загвар:
[user@sunlab test]$ ./db_server --port 15333 &
Db server running... pid=8699
Клиент програмын шаардлага:
1. Сервэрийн IP хаяг, портын дугаар, хүсэлтийг командын мөрөөс оруулан сервэр рүү холбогдож хүсэлтээ явуулаад хариугаа стандарт гаралт руу гаргаад дуусна.
2. Хэрэв олон хүсэлт нэг командын мөрөнд байвал зүүн гар талынхаас эхлэн дэс дарааллуулан гүйцэтгэнэ.
3. Командын мөрөөс клиент програмыг ажиллуулах загвар:
[user@sunlab test]$ ./db_client --server_ip 127.0.0.1 --server_port 15333 --request "SET greeting, Hello World"
SUCCESS
[user@sunlab test]$ ./db_client --server_ip 127.0.0.1 --server_port 15333 --request "GET greeting" --request "DELETE greeter"
Hello World
ERROR
Сервэрийн портыг зааж өгөхдөө 1024-с дээш дугаартай бусад хүмүүсийнхтэй давхцахгүйгээр байлгах хэрэгтэй. Ойлгомжгүй юм гарвал энд асуулт үлдээгээрэй.
Энэ лабораторийн ажлаар энгийн өгөгдлийн сангийн сервэр (үйлчлэгч) ба клиент (үйлчлүүлэгч) програмыг сокет ашиглан зохионо. Эцсийн хугацаа: XVI долоо хоног, 1 өдөр.
Илгээхдээ програмын ажилладаг файлыг (db_client, db_server), эх кодтой (db_client.c, db_server.c) нь хамт бие даалтын ажлын тайланг (report-sw99d999-ss2.doc, хэрхэн хийсэн, ямар асуудал тулгарсан, яаж шийдсэн гэх мэт) хавсаргаад ~/sw302/ss2 нэртэй директор дотор байрлуулаарай.
Сервэр програмын шаардлага:
1. Програм интернэтийн сокет үүсгэн клиент програмуудын хүсэлтийг хүлээнэ. Сокетын сонсох хаяг нь 0.0.0.0 буюу 0=256^3*0 + 256^2*0 + 256^1*0 + 256^0*0 байх ба портын дугаарыг командын мөрөөс өгдөг байна. Портын дугаар, IP хаяган дээр BigEndian, LittleEndian-ы асуудлыг мартав аа.
2. Ямар нэгэн клиент програм холбогдон хүсэлт илгээхэд хүсэлтийг боловсруулж тохирох үйлдлийг хийгээд хүсэлтийн хариуг илгээнэ. Хүсэлтийг лог(текст файл) файлд хадгална.
1. Хүсэлт нь дараах хэлбэртэй байна.
"CREATE name" - name нэртэй тэмдэгт мөр хадгалах өгөгдлийг үүсгэнэ. Хэрэв өмнө нь үүссэн байвал "ERROR" гэсэн хариу буцаана. Эсрэг тохиолдолд "SUCCESS" хариуг буцаана.
"DELETE name" - name нэртэй өгөгдлийг устгана. Хэрэв байхгүй байвал "ERROR" гэсэн хариу буцаана. Эсрэг тохиолдолд "SUCCESS" хариуг буцаана.
"GET name" - name нэртэй өгөгдлийн утгыг авна. Хэрэв байхгүй байвал "ERROR" гэсэн хариу буцаана. Эсрэг тохиолдолд өгөгдлийн утгыг буцаана.
"SET name, value" - name нэртэй өгөгдөлд утга онооно. Хэрэв байхгүй байвал "ERROR" гэсэн хариу буцаана. Эсрэг тохиолдолд "SUCCESS" хариуг буцаана.
"LOG" - сервэр ажиллаж эхэлснээс хойшхи клиент програмуудын бүх (алдаатай, алдаагүй) хүсэлтийг буцаана.
2. Хариу нь ганц тэмдэгт мөр байна. Жишээ нь:
хүсэлт - CREATE user
хариу - SUCCESS
хүсэлт - GET pass
хариу - ERROR
хүсэлт - GET user
хариу(user -т өмнө нь утга оноогоогүй үед түүнийг хоосон гэж тооцно) -
хүсэлт - SET user, dorj mini dee
хариу - SUCCESS
хүсэлт - GET user
хариу - dorj mini dee
хүсэлт - LOG
хариу - CREATE user | GET pass | GET user | SET user, dorj mini dee | GET user | LOG
3. Сервэр програм олон клиентүүдэд үйлчлэн төгсгөлгүй ажиллана. Тэдгээр клиентүүдэд нэгэн зэрэг үйлчлэх магадлалтай. Сервэр SIGTERM сигналыг хүлээн авч ажиллагаагаа дуусгахдаа "Shutting down db server..." гэсэн мэдээллийг стандарт гаралт руу гаргана. Тиймээс сервэрийг зогсоохдоо kill командыг SIGTERM сигналтайгаар ашиглаж болно.
4. Сервэр ажиллаж эхлэхдээ өөрийнхөө pid -г стандарт гаралт руу гаргана.
5. Сервэр ажиллаж дуусаад эргээд ажиллахад өмнө хадгалсан өгөгдлийн утгууд байж байх ёстой. Өгөгдлөө хадгалахын тулд файл ашиглах хэрэгтэй.
6. Командын мөрөөс ажиллуулах загвар:
[user@sunlab test]$ ./db_server --port 15333 &
Db server running... pid=8699
Клиент програмын шаардлага:
1. Сервэрийн IP хаяг, портын дугаар, хүсэлтийг командын мөрөөс оруулан сервэр рүү холбогдож хүсэлтээ явуулаад хариугаа стандарт гаралт руу гаргаад дуусна.
2. Хэрэв олон хүсэлт нэг командын мөрөнд байвал зүүн гар талынхаас эхлэн дэс дарааллуулан гүйцэтгэнэ.
3. Командын мөрөөс клиент програмыг ажиллуулах загвар:
[user@sunlab test]$ ./db_client --server_ip 127.0.0.1 --server_port 15333 --request "SET greeting, Hello World"
SUCCESS
[user@sunlab test]$ ./db_client --server_ip 127.0.0.1 --server_port 15333 --request "GET greeting" --request "DELETE greeter"
Hello World
ERROR
Сервэрийн портыг зааж өгөхдөө 1024-с дээш дугаартай бусад хүмүүсийнхтэй давхцахгүйгээр байлгах хэрэгтэй. Ойлгомжгүй юм гарвал энд асуулт үлдээгээрэй.
 
 
No comments:
Post a Comment