ĐỒ ÁN THC HÀNH 1 LP TRÌNH SOCKET
MÔN MNGY TÍNH
1. Quy định chung
-
Đồ án được làm theo nhóm: mi nhóm tối đa 3 sinh viên, ti thiu 2 sinh viên, sinh viên t
chn nhóm (s dng nhóm thc hành đã đăng nếu có), nhng sinh viên làm 1 mình phi gi
email cho GV (LT hoc TH) trình bày do. Nhóm sinh viên s chn đề tài tha quy định sau:
đề tài = (tng ch s cui cùng MSSV ca các sinh viên) mod 2 + 1
-
Các bài làm ging nhau s đều b đim 0 toàn b phn thc hành tt c các nhóm liên
quan (dù có đim các bài tập, đồ án thc hành khác).
-
Môi trường lp trình: T do la chn ngôn ng lp trình, t do la chọn môi trường h điu
hành: Windows, Unix/Linux, macOS
-
Ngôn ng lp trình GV th h tr: C/C++, C#, Java, Python
-
Thư viện h tr lp trình socket cho phép s dng: Socket, CSocket, winsock. Tc ch s
dụng các thư viện Socket do ngôn ng lp trình cung cp, còn nhng phn không liên quan ti
socket thì th dùng thư vin bên ngoài. Đây bài tập Socket, không phi lp trình
website.
2. Cách thc np i
- Np bài trc tiếp trên Website môn hc, không chp nhn np bài qua email hay
hình thc khác.
- Tên file: -ĐỀ_ MSSV1_MSSV2_MSSV3.zip (Vi MSSV1 < MSSV2 < MSSV3)
d: Nhóm gm 2 sinh viên: 2012001, 2012002, 2012003 làm đề 1, tên file np:
1_2012001_2012002_2012003.zip
Cu trúc file np gm:
1.
Report.pdf: cha báo cáo v bài làm
2.
Release: thư mục cha file thc thi của chương trình, nếu (*.exe/ ...) (nếu làm
python thì không cn to file exe, ch cn report những thư viện cài thêm trong report
nếu có)
3.
Source: thư mc cha source code của chương trình , yêu cầu np c project đã xoá
b thư mục Debug và các file không cn thiết khác.. Nhóm nào ch np file *.cpp *.h
và không biên dịch đưc thì b 0 điểm.
Lưu ý: Cn thc hin đúng các yêu cu trên, nếu không, bài làm s không đưc chm.
3. Hình thc chm bài
Chm vn đáp vào thi đim kết thúc phn thc hành.
4. Tiêu chí đánh g
V cơng trình:
-
Mc tiêu của đồ án này tp trung ch yếu vào 2 vấn đ: lp trình socket, xây dng giao thc
trao đổi gia client server. Do đó các tiêu chí đánh giá dựa vào các chức năng chính đưc
lit kê trong yêu cu của chương trình (có ghi chú thang điểm cho tng chức năng)
V báo cáo:
Thông tin ca nm.
Đánh giá mức độ hoàn thành t 0 100% (Chú thích nhng mc làm được,chưa làm
đưc và còn b li)
Kch bn giao tiếp ca chương trình: Giao thức trao đổi gia client và server, cu trúc
thông điệp, kiu d liu ca thông điệp, cách t chức cơ sở d liu (nếu có).
Môi trường lp trình các framework h tr để thc thi ng dng.
ng dn s dng các tính năng chương trình.
Bng phân công công vic cho biết ràng ai làm vic mt cách ng.
Các ngun tài liu tham kho.
Lưu ý: Trong báo cáo không dán các đoạn source code của chương trình. chương trình chỉ
trình bày nếu tht s cn thiết nếu cn minh họa cho các hình cài đặt hay các chế
đồng b (minh ha dng mã gi, prototype hàm).
V vn đáp:
Chun b thiết b, chương trình, báo cáo đầy đủ (không cn in).
Tr li các câu hi t GV
Trường hp tr li sai hoc không tr li đưc s tr trc tiếp đim vào tng đim đồ
án.
Lưu ý: Tt c thành viên ca nhóm phi tham gia bui vấn đáp. Thành viên vng mt s x
theo quy định sau:
phép (gi email xin phép trước bui vn đáp): tr đim vn đáp trc tiếp
Không phép: 0 đim toàn đồ án.
HyperText Transport Protocol (HTTP)
Web browser (Chrome, IE, Firefox, Safari …) s dụng HyperText Transport Protocol (HTTP) đ truy xut các trang web (page) t
mt máy ch (Web Server). Browser to kết nối TCP/IP đến WebServer, gi mt HTTP request cho máy ch thông qua kết ni đó,
đọc kết qu tr v (HTTP response) hin th nội dung trang web (page) cho người dùng. C hai HTTP requests HTTP
responses đều là dng text, có th d dàng đọc hiu ni dung.
Mt HTTP request bao gm:
Mt dòng request line
Tiếp theo mt hay nhiu header lines cha nhng ni dung b sung
Phn body nếu
(Xem thêm slide bài ging thuyết).
Để truy xut mt web page, web browser s dng "GET" method, ch định page cn truy xut version ca HTTP protocol đưc s
dng (Version hin ti là HTTP/1.1 hoc HTTP/2).
d: web browser gi yêu câu (request) "GET /index.html HTTP/1.1" để truy xut page "/index.html" t mt máy ch. "GET"
request bt buc phi kèm theo một header để ch định tên ca website, ví d: "Host: www.fit.hcmus.edu.vn" (trong trường hp
nhiu website cùng chy trên cùng mt máy ch).
Ví dụ, để truy xut trang web http://example.com/index.html , web browser s to mt kết ni đến máy ch example.com vi port 80,
và gửi HTTP request như sau:
HTTP/1.1 200 OK\r\n
Accept-Ranges: bytes\r\n
Age: 471725\r\n
Cache-Control: max-age=604800\r\n
Content-Type: text/html; charset=UTF-8\r\n
Date: Wed, 12 Oct 2022 09:38:18 GMT\r\n
Etag: "3147526947"\r\n
Expires: Wed, 19 Oct 2022 09:38:18 GMT\r\n
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT\r\n
Server: ECS (oxr/8321)\r\n
Chú ý, mi dòng s kết thúc với “\r\n”, toàn b request GET s kết thúc vi "\r\n", d trên yêu cu nh nht ca mt HTTP
request. Web browser thường s kèm nhiu nhng header khác ngoài header "Host:", để điu khin kết ni, ch định format hoc
ngôn ng, cookies, ....
Khi web server nhn mt HTTP GET request cho mt page tn ti, s tr li "HTTP/1.1 200 OK" response, kèm theo mt s
header lines để cung cp mt s thông tin cho response, mt dòng trng, cui cùng body ca page. Nhng header lines nên
mt "Content-Length:" header, header này s ch định kích thước body của page dưới dng bytes.
d mt HTTP reponse ("..." text đã rút gn)
GET /index.html HTTP/1.1\r\n
Host: example.com\r\n
\r\n
HTTP/1.1 404 Not Found\r\n
Cache-Control: max-age=604800\r\n
Content-Type: text/html; charset=UTF-8\r\n
Date: Wed, 12 Oct 2022 10:25:15 GMT\r\n
Chú ý, mi dòng s kết thúc vi \r\n”, gia header body s cách bit bng "\r\n".
Ví d trên, "Content-Length:" là 1256 bytes, nghĩa là sẽ có chính xác 1256 bytes trong phn body ca reponse (Tính t t "<"
ca dòng "<!doctype html>" kết thúc vi ">" ca dòng "</html>").
Nếu mt request truy cp mt page không tn ti, server th response with li 404 "file not found". S có "Content-Type:
text/html" header, còn body ca response cha ni dung HTML thông báo li.
Vary: Accept-Encoding\r\n
X-Cache: HIT\r\n
Content-Length: 1256\r\n
\r\n
<!doctype html>
<html>
<head>
<title>Example Domain</title>
...
</body>
</html>
Ngoài ra còn nhng reponse khác, đưc phân bit da vào con response code trong dòng đầu tiên ca response. (Xem thêm
slide bài ging v response code: 200, 201, 400, 404, 500, 502).
Expires: Wed, 19 Oct 2022 10:25:15 GMT\r\n
Server: EOS (vny/0452)\r\n
Vary: Accept-Encoding\r\n
Content-Length: 1256\r\n
\r\n
<!doctype html>
<html>
<head>
<title>Example Domain</title>
...
</body>
</html>
ĐỀ 1
Web Server
Ni dung:
Mc tiêu viết một web server đơn giản. Webserver s bind trên port 8080. Bn th dùng bt k trình duyt web nào làm client
(Firefox, Chrome, Safari, ...) để gi request đến web server webserver s gi li response cho client (ni dung ca page, hoc
li). Ni dung ca trang web đã đưc lp trình sn, web server s đọc ni dung file tr v cho client (src_html_de01 folder)
Handle connection bn:
Server to một TCP socket, bind trên port 8080, sau đó listen accept connection t browser. Khi chp nhn kết ni t browser,
server đọc parse request. Dòng đầu tiên ca data (request line) s kết thúc bng (\r\n) để xác định đưc kiu ca HTTP request
to bi browser.
Nếu request bắt đu với "GET" theo sau đó "/" hoặc tên filename ( d index.html, css/style.css, ...), cui cùng
HTTP/1.1, server cn phi parse thông tin của request để biết được cn phải load file nào cho request đó. Nếu "/" thì coi
như "index.html". Tên filename sẽ liên quan đến thư mục ca máy ch tương ng (i.e. css/style.css, avatars/1.png, ...). Sau
khi parse request để xác đnh filename, server s gi reponse với HTTP header tương ng, kèm theo body (ni dung ca
file). Sau đó đóng kết ni (không gi connection - không Keep alive)
Nếu filename tn ti, thì tr v thành công "200 OK" kèm theo ni dung ca file
Phn "..." trong mu trên là nhng phn ni dung tiếp theo ca trang HTML. Ni dung ca body phi đọc t
file. Ví d sau khi web browser nhn data:
HTTP/1.1 200 OK\r\n
Content-Type: text/html\r\n
Connection: close\r\n
\r\n
<!DOCTYPE html>
<html>
...
HTTP/1.1 404 Not Found\r\n
Nếu file không tn ti, tr v "404 File Not Found". Đây mt d ca mt response "404 File Not Found"
HTTP/1.1 401 Unauthorized\r\n
Content-Type: text/html\r\n
Connection: close\r\n
\r\n
<!DOCTYPE html>
<h1>401 Unauthorized</h1><p>This is a private area.</p>
Nếu request bắt đầu vi "POST", thì server s nhận được thông tin "uname" "psw" kèm theo trong body ca request.
Server cn parse thông tin này ra kim tra nếu "uname" "admin" "psw" "123456" thì tr v ni dung ca trang
"images.html". Nếu không thì tr v "401 Unauthorized". Đây là một ví d ca mt response "401 Unauthorized"
Content-Type: text/html\r\n
Connection: close\r\n
\r\n
<!DOCTYPE html>
<html>
<head>
<title> 404 Not Found </title>
</head>
<body>
<p> The requested file cannot be found. </p>
</body>
</html>
Ch đnh content type:
Trong ni dung ca các page, kèm theo hình ảnh (png jpg), file CSS, đưc link vào trong HTML ca pages. Để cho browser
nhn dạng được nhng images hoc file CSS, bn cn phi kèm theo "Content-Type:" header tương ứng trong response ca server.
"Content-Type:" phc thuc vào loi file ca filename.
d:
Content-Type:
Content-Type: text/html
Content-Type: text/plain
Content-Type: image/jpeg
Content-Type: image/gif
Content-Type: image/png
Content-Type: text/css
Content-Type: application/octet-stream
Bn s cn phi parse filename trong HTTP GET request đ xác định được loại file, sau đó điền "Content-Type:" tương ng khi gi
response.
Nâng cao:
Cho phép gi nhiu request cho mi kết ni: Hin ti web browser m mt TCP connection cho mi request khi nhiu file cn
đưc truy cp => ko hiu qu, HTTP cho phép gi nhiu request trên mt kết nối trước đó. Nếu server không header
"Connection: close" trong response, client có th gi kết ni, tiếp tc gi nhng request tiếp theo. Để cho phép Client có
th phân bit data t nhiu request, server bt buc phi "Content-Length:" header để ch định kích thước ca data tr v
cho client. Kết ni ch đóng li khi client đóng kết ni, khi đó hàm "recv" trên server s return 0 khi kết ni b đóng.
Cho phép nhiu client truy cp cùng lúc (Handling Multiple Connections in Parallel, concurrency by thread for each
connection, ...)
Yêu cu:
Chc năng
Ý nga
Test-cases
1
KT NI
0,5 đim
Cho phép client kết ni đến server
thông qua kết ni TCP
2
QUN KT
NI
0,5 đim
Khi client hoc server mt kết nối đt
ngt, không làm chương trình treo hay
xy ra li
3
Ti đưc page
index.html
3.5 đim
Browser th render lên đầy đủ ni
dung ca trang index.html.
Trang index.html hin th 1 HTML form
cho phép đăng nhp (yêu cu 4). Form
này phn action tr đến Web server.
Tham kho:
http://localhost:8080
http://localhost:8080/index.html
http://<ip>:8080
http://<ip>:8080/index.html
https://www.w3schools.com/html/html_f
orms.asp
4
ĐĂNG NHP
2 đim
POST method, gi "uname" "admin"
và "psw" là "123456"
Kim tra login tr 401 nếu không đúng (0.5đ)
Kim tra login (0.5đ)
Load đưc trang images.html khi đăng nhp đúng (1đ)
5
Li page
0.5 đim
Tr 404 khi load page không đúng
http://localhost:8080/gacon
http://localhost:8080/fit.html
http://<ip>:8080/gacon
http://<ip>:8080/fit.html
...
6
Multiple
requests
1 đim
gi nhiu requests trong mt
connection
7
Multiple
connection
1 đim
Concurrent, handle nhiu client cùng
c
8
Report
1 đim
Theo quy định tn
ĐỀ 2
Web Client
Ni dung:
Mc tiêu viết mt web client đơn gin. Web client s gi request đến web server, port 80 đ ti ni dung ca page lưu vào file
Handle connection bn:
Client to mt TCP socket, kết ni đến port 80 ca web server. Sau khi kết ni đến web server, client s gi request đến web server
để ti page. Client yêu cu s dng HTTP/1.1 và "Connection: keep-alive", khi đó hàm "recv" sẽ vn ch nhn d liu mặc dù đã
nhn đủ ni dung file. Sinh viên cn tính toán để biết khi nào đã nhn xong data đóng kết ni. Vy làm sao Client th biết đưc
là đã nhận đủ data, thì bn da vào một trong các trường hp:
"Content-Length:" cho biết ni dung ca body hoc
"Transfer-Encoding: chunked", khi đó webserver s tr v d liu tng chunk, làm sao nhn biết đưc độ dài 1 chunk khi
nào nhn hết các chunk, Tham kho: https://en.wikipedia.org/wiki/Chunked_transfer_encoding,
https://bunny.net/academy/http/what-is-chunked-encoding/
Yêu cu ti lưu file
File download hay folder download s nm cùng cp vi binary
Vi các request "/" gc thì mc định ti lưu thành file “<domain>_index.html”, d
http://example.com hoc http://example.com/, thì client s ti lưu thành file "example.com_index.html"
http://www.bing.com hoc http://www.bing.com/, thì client s ti u thành file "www.bing.com_index.html"
Vi các request ti mt file, d *.html, *.pdf, *.jpg ..., thì client s ti lưu thành tên file tương ng kèm theo domain theo
cu trúc: "<domain>_<tenfile>". Ví d:
http://example.com/index.html, thì s ti u thành file “example.com_index.html
http://web.stanford.edu/dept/its/support/techtraining/techbriefing-media/TB-080610-ProtectYourData.ppt, thì s ti
lưu thành file “web.stanford.edu_TB-080610-ProtectYourData.ppt”
Vi request c subfolder, thì download hết tt c các file trong folder đó kèm domain theo cu trúc:
"<domain>_<tenfolder>". Ví d:
http://web.stanford.edu/class/cs224w/slides/ thì ti lưu hết tt c các file vào folder “web.stanford.edu_slides”, trong
folder đó sẽ chứa các file tương ứng mà không có domain kèm theo.
Nâng cao:
Cho phép gi nhiu request cho mi kết ni: Hin ti client m mt TCP connection cho mi request khi nhiu file cần được
truy cp => ko hiu qu, HTTP cho phép gi nhiu request trên mt kết nối trước đó. Nếu server không có header
"Connection: close" trong response, client th gi kết ni, tiếp tc gi nhng request tiếp theo nếu client gi header
"Connection: keep-alive". Để cho phép Client có th phân bit data t nhiu request, server bt buc phi có
"Content-Length:" hoc "Transfer-Encoding: chunked" header để ch định kích thước ca data tr v cho client. Kết ni ch
đóng đưc khi client đóng kết ni, khi đã ti xong hoàn toàn d liu. Áp dng khi download nhiu file trong subfolder. d:
./<tên file chy> http://web.stanford.edu/class/cs224w/slides/
Cho phép client ti nhiu trang cùng lúc (Handling Multiple Connections in Parallel, concurrency by thread for each
connection, ...). Áp dng khi Client có nhiu link download cùng lúc. Ví d:
./<tên file chy> http://web.stanford.edu/class/cs231a/project.html http://web.stanford.edu/class/cs224w/slides/08-GNN-application.pdf ...
Yêu cu:
Chc năng
Ý nga
Test-cases
1
KT NI
0,5 đim
Cho phép client kết ni đến server
thông qua kết ni TCP
2
QUN KT NI
0,5 đim
Khi client hoc server mt kết nối đt
ngt, không làm chương trình treo hay
xy ra li
3
Tải và lưu thành file
dng "Content-Length"
3 đim
Download file thành ng
http://example.com/
http://example.com/index.html
http://web.stanford.edu/dept/its/support/techtraining/t
echbriefing-media/Intro_Net_91407.ppt
http://web.stanford.edu/class/cs224w/slides/01-intro.
pdf
http://web.stanford.edu/class/cs224w/slides/08-GNN
-application.pdf
http://web.stanford.edu/class/cs231a/assignments.ht
ml
http://web.stanford.edu/class/cs231a/project.html
http://gaia.cs.umass.edu/wireshark-labs/alice.txt
http://www-net.cs.umass.edu/wireshark-labs/Wiresh
ark_Intro_v8.1.docx
...
4
Tải và lưu thành file
dng "Transfer-Encoding:
chunked"
1.5 đim
Download file thành ng
http://www.google.com
http://www.google.com/index.html
http://www.bing.com
http://anglesharp.azurewebsites.net/Chunked
http://www.httpwatch.com/httpgallery/chunked/chunk
edimage.aspx
...
5
Ti các file trong folder
1.5 đim
Lưu tt c các file trong folder
http://web.stanford.edu/class/cs224w/slides/
http://web.stanford.edu/class/cs142/lectures/
http://web.stanford.edu/class/cs143/handouts/
http://web.stanford.edu/class/cs231a/course_notes/
...

Preview text:

The requested file cannot be found.