ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
-
HÀNH
SOCKET
MÔN HỌC: MẠNG MÁY TÍNH
H c kỳ I (20 ọ 20-2021)
L P: Ớ 19CTT2
SV Th c hi n 1 ự ệ : LÊ SỸỸ THUẦỒN MSSV: 19120387
SV Th c hi n 2 ự ệ : TR ƯƠ NG MINH NH T Ậ MSSV: 19120318
TP HỒ CHÍ MINH, THÁNG 12 NĂM 2020
MỤC LỤC
I Ý tưởng 2
II Các bước cài đ t ng d ng nàyặ ứ ụ 2
Trang 2IV Tài li u tham kh 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 tn 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 tn 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 fle cpp và h được t o săẵn, ch cầồn viêết hàm main() vào fle cpp đạ ỉ ược yêu cầồu ( đầy là ở
Web_Server.cpp), t o thêm fle Web_Server.h đ khai báo các hàm, các th vi n cầồn thiêết.ạ ể ư ệ
Trang 3Cà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.ị ở
Phầồn này đã
được viêết săẵn
Phầồn này đã
được viêết săẵn
Trang 4- Kh i t o 1 thread đ làm vi c v i socket trong thread đóở ạ ể ệ ớ
- S d ng vòng l p vô t n đ CSocket server luôn lăếng nghe và chầếp nh n tn 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.ỏ
Port 80
Kh i t o threadở ạ
Trang 5- Đ 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 têế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
Đ để ượ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
Vòng l p vô t n cho vi c lăếngặ ậ ệ nghe, chầếp nh n và g i nh n tnậ ử ậ
hi u gi a các CSocketệ ữ
Trang 6S d ng hàm Receive đ nh n d li u t Used_ClientSocket và l u vào m ng kí t receive_bufer 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à têế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_bufer băồng hàm processRequest đ biêết ử ộ ừ ứ ể
được các thông tn 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 tn cầồn thiêết đ t o m t response nh Status-Code (mã ph n hôồi), ẩ ị ể ạ ộ ư ả tên fle 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 tn 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 tn vêồ Connecton, Content-Type, Content-Dispositon, Transfer-ứ
Encoding, Locaton, 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 tn “Web_Server.exe”.ở ậ
Trang 7- M trình duy t web và truy c p vào “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 , seẵ ph i nh p l i.ậ ặ ậ ẩ ợ ệ ả ậ ạ
M t p tn Web_Server.exeở ậ
Truy c p “localhost”ậ
Trang 8Nêế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ậ
không h p lợ ệ
Tên đăng nh pậ
và/ho c m t kh u saiặ ậ ẩ
Trang 9Nêếu tên đăng nh p và m t kh u đúng, trang thông tn 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 tn ệ ệ ạ ể ả ậ
t máy ch ừ ủ
- Trang t i t p tn hi n ra v i tên các t p tn có th t i vêồ, kích thả ậ ệ ớ ậ ể ả ước t p tn và các thông tn liên ậ quan
Trang 404 Not
Found xuầết hi nệ
Nhầến vào nút này để đêến trang t i t p tnả ậ
Thông tn c a 2 thànhủ
viên trong nhóm th cự
hi nệ
Trang 10- Bầếm vào tên t p tn muôến t i, h p tho i “Save as” xuầết hi n và tên c a t p tn t i vêồ đậ ả ộ ạ ệ ủ ậ ả ược t ự
đ ng điêồn vào giôếng nh tên t p tn trên trang t i t p tn, bầếm vào nút “Save” đ t i t p tn vêồ ộ ư ậ ở ả ậ ể ả ậ máy
Các t p tn có thậ ể
t i vêồ, bầếm vào t pả ậ
tn muôến t i đ t iả ể ả
vêồ
Ch n v trí l u, đ tọ ị ư ặ
tên t p tn, nhầếnậ
“Save” đ l uể ư
Trang 11IV Tài li u tham kh 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
T p tn cầồn t i đãậ ả
đượ ưc l u thành
công