I. Tài liu tham kha*o ............................................................................................................ 11
I. Ý tư*ng
To mt ng dng web cho phép ngưi dùng đăng nhp để xem đưc thông tin ca ngưi to nên trang
web (2 thành viên trong nhóm thc hiện đồ án) và cho phép người dùng ti các tp tin t máy ch ca
trang web v máy.
II. Các c cài đặt ng dng này
S dng gói MFC để to template code.
Các file .cpp .h đưc to sn, ch cn viết hàm main() vào file .cpp đưc yêu cu ( đây
Web_Server.cpp), tạo thêm file Web_Server.h để khai báo các hàm, các thư viện cn thiết.
Phần này đã
đưc viết sn
Cài đặt hàm main
- To 2 class CSocket client server, CSocket server khi to bng hàm Create vi port ca
giao thức HTTP là port 80 được định nghĩa bằng DEFAULT_PORT Web_Server.h.
Phần này đã
đưc viết sn
Khi to thread
- Khi to 1 thread để làm vic vi socket trong thread đó
- S dng vòng lp tn để CSocket server luôn lng nghe chp nhn tín hiu t CSocket
client bng hàm Listen và Accept vi s kết ni tối đa là MAXCONN được định nghĩa trong
Web_Server.h.
- Khi to mt con tr client_socket kiu SOCKET*, tách SOCKET t CSocket client gán vào con
tr client_socket bng hàm Detach.
Port 80
Vòng lp vô tn cho vic lng
nghe, chp nhn gi nhn tín
hiu gia các CSocket
- Đưa con tr client_socket nàyom Receive_Send_Thread trong thread để thc hin vic
nhn d liu t socket và gi d liu tới socket độc lp với chương trình chính.
- Vòng lp tiếp tc lp li tn để nhn CSocket server lng nghe chp nhn kết ni t
CSocket client.
Để được đưa vào hàm Receive_Send_Thread con trỏ client_socket phi ép thành kiu LPVOID, vào bên
trong hàm Receive_Send_Thread, ép kiu con tr client_socket v li kiu SOCKET* ri gán giá tr ca
cho CSocket Used_ClientSocket.
S dng hàm Receive để nhn d liu t Used_ClientSocket lưu vào mng t receive_buffer vi độ
dài DEFAULT_BUFFER_LENGTH, hàm Receive tr v s byte d liu nhận được cho biến receive_result.
Nếu s byte nhận được lớn hơn 0, nhận d liu thành công và tiến hành phn hi; nếu s byte nhn
đưc bng 0, phía client ngng gi d liệu, đóng Used_ClientSocket và kết thúc hàm; nếu s byte nhn
được khác hai trường hp trên, quá trình nhn b lỗi, đóng Used_ClientSocket và kết thúc hàm.
Quá trình phn hi:
- X ni dung request t client cha bên trong receive_buffer bng hàm processRequest để biết
đưc các thông tin quan trọng như Request method (phương thức request), tài nguyên mà
client yêu cầu (trong phương thức GET), nhng d liu mà client gi tới (thông qua phương
thc POST) và chun b các thông tin cn thiết để to một response như Status-Code (mã phn
hi), tên file tài nguyên mà client yêu cu, loi tài nguyên mà client yêu cầu,…
- To response bng hàm createResponse, response gm 3 phn:
+ Status-Line cha các thông tin như HTTP version (phiên bn HTTP), Status-Code, Reason-
Pharse (mô t v mã phn hi)
+ Header cha các thông tin v Connection, Content-Type, Content-Disposition, Transfer-
Encoding, Location, Conten-Length,...và mt dòng trống để kết thúc phn Header.
+ Phn Body cha ni dung cn gi v cho client thông qua response.
- S dng hàm Send để gi response đi t Used_ClientSocket, hàm Send tr v s byte gi đưc
cho biến send_result, nếu send_result nh hơn hoặc bng 0, vic gi response tht bại, ngược
li, gi response thành công.
III. Chy thư*ng dng
- M tp tin “Web_Server.exe”.
Truy cp “localhost
- M trình duyt web truy cp vào “localhost”.
- Ti trang đăng nhp, nhp tên đăng nhp vào mc Username mt khu vào mc Password
(mặc định là admin/admin).
Nếu tên đăng nhp và/hoc mt khu không hp l, s phi nhp li.
Tên đăng nhập
và/hoc mt khu sai
Nếu tên đăng nhp và/hoc mt khu sai, trang 404 Not Found xut hin.
Tên đăng nhp
không hp l
Nhn vào nút này để
đến trang ti tp tin
Thông tin ca 2 thành
viên trong nhóm thc
hin
Nếu tên đăng nhp mt khu đúng, trang thông tin v 2 thành viên trong nhóm thc
hin đồ án hin ra, ti đây nút “DOWNLOAD FILES”, bm vào nút này để đến trang ti tp tin
t máy ch.
- Trang ti tp tin hin ra vi tên các tp tin th ti v, kích thước tp tin các thông tin liên
quan.
Trang 404 Not
Found xut hin
Chn v trí lưu, đặt
tên tp tin, nhn
“Save” để lưu
- Bm vào tên tp tin mun ti, hp thoại Save as” xuất hin và tên ca tp tin ti v đưc t
động đin vào ging như tên tp tin trên trang ti tp tin, bm vào nút “Save” đ ti tp tin v
y.
Các tp tin có th
ti v, bm vào tp
tin mun tải để ti
v
IV. Tài liu tham kh a*o
Tài liu v công ngh web cho lp trình viên:
https://developer.mozilla.org/en-US/
CAsyncSocket class:
https://docs.microsoft.com/en-us/cpp/mfc/reference/casyncsocket-class?view=msvc-160#detach
Transfer-Encoding: chunked
https://en.wikipedia.org/wiki/Chunked_transfer_encoding
Tp tin cn ti đã
được lưu thành
ng

Preview text:

I.
Tài liệu tham kh a*o ............................................................................................................ 11 I. Ý tư*ởng
Tạo một ứng dụng web cho phép người dùng đăng nhập để xem được thông tin của người tạo nên trang
web (2 thành viên trong nhóm thực hiện đồ án) và cho phép người dùng tải các tập tin từ máy chủ của trang web về máy.
II. Các bước cài đặt ứng dụng này
Sử dụng gói MFC để tạo template code.
Các file .cpp và .h được tạo sẵn, chỉ cần viết hàm main() vào file .cpp được yêu cầu (ở đây là
Web_Server.cpp), tạo thêm file Web_Server.h để khai báo các hàm, các thư viện cần thiết. Phần này đã được viết sẵn Phần này đã được viết sẵn Cài đặt hàm main -
Tạo 2 class CSocket là client và server, CSocket server khởi tạo bằng hàm Create với port của
giao thức HTTP là port 80 được định nghĩa bằng DEFAULT_PORT ở Web_Server.h. Port 80 -
Khởi tạo 1 thread để làm việc với socket trong thread đó Khởi tạo thread -
Sử dụng vòng lặp vô tận để CSocket server luôn lắng nghe và chấp nhận tín hiệu từ CSocket
client bằng hàm Listen và Accept với số kết nối tối đa là MAXCONN được định nghĩa trong Web_Server.h. -
Khởi tạo một con trỏ client_socket kiểu SOCKET*, tách SOCKET từ CSocket client và gán vào con
trỏ client_socket bằng hàm Detach. -
Đưa con trỏ client_socket này vào hàm Receive_Send_Thread trong thread để thực hiện việc
nhận dữ liệu từ socket và gửi dữ liệu tới socket độc lập với chương trình chính. -
Vòng lặp tiếp tục lặp lại vô tận để nhận CSocket server lắng nghe và chấp nhận kết nối từ CSocket client.
Vòng lặp vô tận cho việc lắng
nghe, chấp nhận và gửi nhận tín hiệu giữa các CSocket
Để được đưa vào hàm Receive_Send_Thread con trỏ client_socket phải ép thành kiểu LPVOID, vào bên
trong hàm Receive_Send_Thread, ép kiểu con trỏ client_socket về lại kiểu SOCKET* rồi gán giá trị của nó
cho CSocket Used_ClientSocket.
Sử dụng hàm Receive để nhận dữ liệu từ Used_ClientSocket và lưu vào mảng kí tự receive_buffer với độ
dài DEFAULT_BUFFER_LENGTH, hàm Receive trả về số byte dữ liệu nhận được cho biến receive_result.
Nếu số byte nhận được lớn hơn 0, nhận dữ liệu thành công và tiến hành phản hồi; nếu số byte nhận
được bằng 0, phía client ngừng gửi dữ liệu, đóng Used_ClientSocket và kết thúc hàm; nếu số byte nhận
được khác hai trường hợp trên, quá trình nhận bị lỗi, đóng Used_ClientSocket và kết thúc hàm. Quá trình phản hồi: -
Xử lí nội dung request từ client chứa bên trong receive_buffer bằng hàm processRequest để biết
được các thông tin quan trọng như Request method (phương thức request), tài nguyên mà
client yêu cầu (trong phương thức GET), những dữ liệu mà client gửi tới (thông qua phương
thức POST) và chuẩn bị các thông tin cần thiết để tạo một response như Status-Code (mã phản
hồi), tên file tài nguyên mà client yêu cầu, loại tài nguyên mà client yêu cầu,… -
Tạo response bằng hàm createResponse, response gồm 3 phần:
+ Status-Line chứa các thông tin như HTTP version (phiên bản HTTP), Status-Code, Reason-
Pharse (mô tả về mã phản hồi)
+ Header chứa các thông tin về Connection, Content-Type, Content-Disposition, Transfer-
Encoding, Location, Conten-Length,...và một dòng trống để kết thúc phần Header.
+ Phần Body chứa nội dung cần gửi về cho client thông qua response. -
Sử dụng hàm Send để gửi response đi từ Used_ClientSocket, hàm Send trả về số byte gửi được
cho biến send_result, nếu send_result nhỏ hơn hoặc bằng 0, việc gửi response thất bại, ngược
lại, gửi response thành công. III. Chạy thư*ứng dụng -
Mở tập tin “Web_Server.exe”. Mở tập tin Web_Server.exe -
Mở trình duyệt web và truy cập vào “localhost”. Truy cập “localhost” -
Tại trang đăng nhập, nhập tên đăng nhập vào mục Username và mật khẩu vào mục Password
(mặc định là admin/admin).
Nếu tên đăng nhập và/hoặc mật khẩu không hợp lệ, sẽ phải nhập lại. Tên đăng nhập không hợp lệ
Nếu tên đăng nhập và/hoặc mật khẩu sai, trang 404 Not Found xuất hiện. Tên đăng nhập và/hoặc mật khẩu sai Trang 404 Not Found xuất hiện
Nếu tên đăng nhập và mật khẩu đúng, trang thông tin về 2 thành viên trong nhóm thực
hiện đồ án hiện ra, tại đây có nút “DOWNLOAD FILES”, bấm vào nút này để đến trang tải tập tin từ máy chủ. Thông tin của 2 thành Nhấn vào nút này để viên trong nhóm thực đến trang tải tập tin hiện -
Trang tải tập tin hiện ra với tên các tập tin có thể tải về, kích thước tập tin và các thông tin liên quan. Các tập tin có thể tải về, bấm vào tập tin muốn tải để tải về -
Bấm vào tên tập tin muốn tải, hộp thoại “Save as” xuất hiện và tên của tập tin tải về được tự
động điền vào giống như tên tập tin ở trên trang tải tập tin, bấm vào nút “Save” để tải tập tin về máy. Chọn vị trí lưu, đặt tên tập tin, nhấn “Save” để lưu Tập tin cần tải đã được lưu thành công IV. Tài liệu tham k h a* o
Tài liệu về công nghệ web cho lập trình viên:
https://developer.mozilla.org/en-US/ CAsyncSocket class:
https://docs.microsoft.com/en-us/cpp/mfc/reference/casyncsocket-class?view=msvc-160#detach Transfer-Encoding: chunked
https://en.wikipedia.org/wiki/Chunked_transfer_encoding