ĐỒ ÁN THC HÀNH 1 LP TRÌNH SOCKET
MÔN MNG MÁY 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 (trong trường
hợp sĩ số lp l), sinh viên t chn nhóm (s dng nhóm thực hành đã đăng ký nếu có).
- 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ó điểm 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 như: Socket, CSocket, winsock. Tức là
ch s dụng các thư viện Socket do ngôn ng lp trình cung cấp, không dùng các thư viện
bên ngoài liên quan đến Socket
2. Cách thc np bà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 3 sinh viên: 2212001, 2212002, 2212003, tên file np:
2212001_2212002_2212003.zip
Cu trúc file np gm thư mc MSSV1_MSSV2_MSSV3 cha các file:
1. Report.pdf: cha báo cáo v bàim
2. Release: thư mục cha file thc thi của chương trình, nếu có (*.exe, nếu Python thì
không cn)
3. Source: thư mục cha source code của chương trình , yêu cầu np c project đã
xóa b thư mục Debug và các file không cn thiết khác.. Nhóm nào ch np file *.cpp
và *.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 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, t đưa ra được
giao thc truyn file giữa client và server. Do đó các tiêu chí đánh giá dựa vào các chc
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 rõ nhng mục làm được,chưa
làm đưc còn b li)
Kch bn giao tiếp của chương trình: Giao thức trao đổi gia client và server, cu
trúc thông điệp, kiu d liu của 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 và cho biết rõ ràng ai làm vic gì cách rõ ràng. Không ghi
chung chung như chia đều công vic hay cùng làm mi vic.
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. Mã chương trình
ch trình bày nếu tht s cn thiết và nếu cn minh họa cho các mô 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 để chy Client và Server trên 2 máy khác nhau (có th dùng mt
máy tht và 1 máy ảo, ...), 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 vắng mt s x
lý 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 điểm đồ án.
File1.zip 5MB
File2.zip 10MB
File3.zip 20MB
File4.zip 50MB
File5.zip 100MB
File6.zip 200MB
File7.zip 512MB
File8.zip 1GB
5. Ni dung:
Lưu ý ni dung đồ án gm 2 phn cn đưc thc hin.
Phn I (6.5đ): S dng TCP ti tng Transport
Viết chương trình Client/Server cho phép client download song song nhiều phn
khác nhau(chunk) ca mt file t Server.
d phn mm IDM bên i
t - d:
Server:
S dng 1 file Text hoc JSON (hoc s dng file cấu trúc khác) để lưu
danh sách các file cho phép client download gm tên file, dung lượng.
d file text (.txt):
Server s nhn yêu cu t Client download file nào, t offset nào để gửi đến
Client.
File cha trên Server, không đưc ct nh sn thành các file nh hơn.
File1.zip
File2.zip
(Ví d File2.zip được thêm vào file input.txt sau khong 20 giây lưu file này li,
client s phát hin so vi lần đọc trước đó thì File2.zip file mới cần được
download sau khi hoàn thành download xong File1.zip)
Downloading File5.zip part 1 ........45%
Downloading File5.zip part 2 ........15%
Downloading File5.zip part 3 ........25%
Downloading File5.zip part 4 ........85%
Server có th phc v đồng thi yêu cu download file t nhiu client.
Client:
Client kết nối đến Server, Client s nhận được thông tin danh sách các file t
server và hin th trên màn hình.
Để thc hin vic download file t server thì client một file để ghi nhn
danh sách các tên file s đưc download, file này input.txt. Người dùng s
thêm vào cui danh sách file cn download trong tp tin input.txt (không xóa
file ghi li) tên nhng file cn download bt c khi nào mun không làm
nh ng vic thc thi ca chương trình (Lưu ý: th thêm mt hoc
nhiu tên file mi ln, th s dụng chương trình khác để m file thêm
vào th công).
Client chu trách nhim duyt file input.txt mi 5s mt ln, để lấy được danh
sách file vừa được thêm mi thc hin download t server. (không thc
hin download những file đã duyệt trước đó).
d file input.txt
Mi Client download tun t tng file theo danh sách trong tp tin input.txt.
Vi mi mt file cn download, client s m 4 kết ni song song đến Server
để bắt đầu download các phn ca 1 file. Có th dựa vào dung lượng ca file
và chia 4 để yêu cu server gi tng chunk cho mi kết ni. Trên màn hình
client cho phép hin th t l % (t 0-xx%) da trên tiến độ download các phn
của file đang thực hiện download (Lưu ý: Một client ch đưc m 4 kết ni
song song đến Server để download 1 file).
Sau đó, client cần ni các phần đã download của mt file thành file hoàn
chnh. (kim tra bng cách kim tra tổng dung lượng và m file thành công)
Khi Client hoàn thành download, thì có th bm "Ctrl + C" để kết thúc
chương trình.
(https://www.tutorialspoint.com/how-do-i-catch-a-ctrlplusc-event-in-cplusplus)
d màn hình console ca Client:
Gi ý: Sinh viên cn tạo protocol cho chương trình ca mình (Application
protocol) để đánh dấu chunk bắt đầu-đang-kết thúc download thuc tp tin
nào và khi nhận thì ghi các chunk đúng đủ o file để nhận đủ 100% dung
ng tp tin cn download.
Phn II (3đ): S dng UDP ti tng Transport ( 1 Client
- 1 Server)
Tương t bài phn 1, các bn s s dng UDP. Các bn cn t đưa ra
chế để gi d liu tin cy (rdt - reliable data transfer) tng Application.
Gợi ý: đưa ra phương thức kim tra th ti tin, kim tra mt mát gói tin, li
gói tin,...
Server ch phc v duy nht 1 Client download (1 socket duy nht ti Server).
Client có th download nhiu chunk (nhiu socket) cùng lúc t Server.
Không cn xây dng chế congestion control.
Chương trình ch test 1 client-1 server trong phn II.
6. Tài nguyên
Các bn có th lấy các file test có dung lượng khác nhau đây (5MB, 10MB, 20 MB,
50 MB, ...):
https://www.thinkbroadband.com/download
https://ash-speed.hetzner.com/
http://xcal1.vodafone.co.uk/
Trong trường hp bn mun test bandwidth chm vi máy ảo để test (chy Server
hoc Client), bn có th chnh bandwidth đây để gii hn tốc đ gi chm li
Hoc bn có th ng tools bên dưới để gii hn tốc độ bandwidth gia
Client-Server:
NetLimiter
TMeter
Clumsy
Hoc có th dùng sleep để test chương trình ca mình.
7. Thang đim
STT
Yêu cầu
Điểm
Phần I
Nhiều clients thể nhận được danh sách các file từ Server và ctrl-c
1
Hiển thị percent download các chunk của file
1
5s quét file input.txt 1 lần
0.5
Client để download chunk đầu tiên của file thành công
1
Nhiều client thể tải đủ các chunk thành công từ Server.
Tập tin sau khi download phải đúng và đủ dung lượng
3
Phần II
UDP download thành công 1 chunk kèm chế rdt (reliable data transfer)
1
UPD download thành công toàn bộ file kèm chế rdt (reliable data
transfer)
2
Báo cáo
0,5

Preview text:

ĐỒ ÁN THỰC HÀNH 1 – LẬP TRÌNH SOCKET MÔN MẠNG MÁY TÍNH 1. Quy định chung
- Đồ án được làm theo nhóm: mỗi nhóm tối đa 3 sinh viên, tối thiểu 2 sinh viên (trong trường
hợp sĩ số lớp lẻ), sinh viên tự chọn nhóm (sử dụng nhóm thực hành đã đăng ký nếu có).
- Các bài làm giống nhau sẽ đều bị điểm 0 toàn bộ phần thực hành tất cả các nhóm
liên quan (dù có điểm các bài tập, đồ án thực hành khác)
.
- Môi trường lập trình: Tự do lựa chọn ngôn ngữ lập trình, tự do lựa chọn môi trường hệ
điều hành: Windows, Unix/Linux, macOS
- Ngôn ngữ lập trình GV có thể hỗ trợ: C/C++, C#, Java, Python
- Thư viện hỗ trợ lập trình socket cho phép sử dụng như: Socket, CSocket, winsock. Tức là
chỉ sử dụng các thư viện Socket do ngôn ngữ lập trình cung cấp, không dùng các thư viện
bên ngoài liên quan đến Socket 2. Cách thức nộp bài
- Nộp bài trực tiếp trên Website môn học, không chấp nhận nộp bài qua email
hay hình thức khác.
- Tên file: MSSV1_MSSV2_MSSV3.zip (Với MSSV1 < MSSV2 < MSSV3)
Ví dụ: Nhóm gồm 3 sinh viên: 2212001, 2212002, và 2212003, tên file nộp:
2212001_2212002_2212003.zip
Cấu trúc file nộp gồm thư mục MSSV1_MSSV2_MSSV3 chứa các file:
1. Report.pdf: chứa báo cáo về bài làm
2. Release: thư mục chứa file thực thi của chương trình, nếu có (*.exe, nếu Python thì không cần)
3. Source: thư mục chứa source code của chương trình , yêu cầu nộp cả project đã
xóa bỏ thư mục Debug và các file không cần thiết khác.. Nhóm nào chỉ nộp file *.cpp
và *.h và không biên dịch được thì bị 0 điểm.

Lưu ý: Cần thực hiện đúng các yêu cầu trên, nếu không, bài làm sẽ không được chấm.
3. Hình thức chấm bài
Chấm vấn đáp vào thời điểm kết thúc phần thực hành.
4. Tiêu chí đánh giá Về chương trình:
- Mục tiêu của đồ án này tập trung chủ yếu vào 2 vấn đề: lập trình socket, tự đưa ra được
giao thức truyền file giữa client và server. Do đó các tiêu chí đánh giá dựa vào các chức
năng chính được liệt kê trong yêu cầu của chương trình (có ghi chú thang điểm cho từng chức năng) Về báo cáo: ● Thông tin của nhóm.
● Đánh giá mức độ hoàn thành từ 0 – 100% (Chú thích rõ những mục làm được,chưa
làm được và còn bị lỗi)
● Kịch bản giao tiếp của chương trình: Giao thức trao đổi giữa client và server, cấu
trúc thông điệp, kiểu dữ liệu của thông điệp, cách tổ chức cơ sở dữ liệu (nếu có).
● Môi trường lập trình và các framework hỗ trợ để thực thi ứng dụng.
● Hướng dẫn sử dụng các tính năng chương trình.
● Bảng phân công công việc và cho biết rõ ràng ai làm việc gì cách rõ ràng. Không ghi
chung chung như chia đều công việc hay cùng làm mọi việc.
● Các nguồn tài liệu tham khảo.
Lưu ý: Trong báo cáo không dán các đoạn source code của chương trình. Mã chương trình
chỉ trình bày nếu thật sự cần thiết và nếu cần minh họa cho các mô hình cài đặt hay các cơ
chế đồng bộ (minh họa dạng mã giả, prototype hàm). Về vấn đáp:
● Chuẩn bị thiết bị để chạy Client và Server trên 2 máy khác nhau (có thể dùng một
máy thật và 1 máy ảo, ...), chương trình, báo cáo đầy đủ (không cần in).
● Trả lời các câu hỏi từ GV
● Trường hợp trả lời sai hoặc không trả lời được sẽ trừ trực tiếp điểm vào tổng điểm đồ án.
Lưu ý: Tất cả thành viên của nhóm phải tham gia buổi vấn đáp. Thành viên vắng mặt sẽ xử lý theo quy định sau:
● Có phép (gửi email xin phép trước buổi vấn đáp): trừ điểm vấn đáp trực tiếp
● Không phép: 0 điểm đồ án. 5. Nội dung:
Lưu ý nội dung đồ án gồm có 2 phần cần được thực hiện.
Phần I (6.5đ): Sử dụng TCP tại tầng Transport
Viết chương trình Client/Server cho phép client download song song nhiều phần
khác nhau(chunk) của một file từ Server.
Ví dụ phần mềm IDM bên dưới Mô tả - ví dụ: Server:
● Sử dụng 1 file Text hoặc JSON (hoặc sử dụng file có cấu trúc khác) để lưu
danh sách các file cho phép client download gồm tên file, và dung lượng. Ví dụ file text (.txt): File1.zip 5MB File2.zip 10MB File3.zip 20MB File4.zip 50MB File5.zip 100MB File6.zip 200MB File7.zip 512MB File8.zip 1GB
● Server sẽ nhận yêu cầu từ Client download file nào, từ offset nào để gửi đến Client.
● File chứa trên Server, không được cắt nhỏ sẵn thành các file nhỏ hơn.
● Server có thể phục vụ đồng thời yêu cầu download file từ nhiều client. Client:
● Client kết nối đến Server, Client sẽ nhận được thông tin danh sách các file từ
server và hiển thị trên màn hình.
● Để thực hiện việc download file từ server thì client có một file để ghi nhận
danh sách các tên file sẽ được download, file này là input.txt. Người dùng sẽ
thêm vào cuối danh sách file cần download trong tập tin input.txt (không xóa
file ghi lại) tên những file cần download bất cứ khi nào muốn mà không làm
ảnh hưởng việc thực thi của chương trình (Lưu ý: có thể thêm một hoặc
nhiều tên file mỗi lần, có thể sử dụng chương trình khác để mở file và thêm vào thủ công).
● Client chịu trách nhiệm duyệt file input.txt mỗi 5s một lần, để lấy được danh
sách file vừa được thêm mới và thực hiện download từ server. (không thực
hiện download những file đã duyệt trước đó). Ví dụ file input.txt File1.zip File2.zip
(Ví dụ File2.zip được thêm vào file input.txt sau khoảng 20 giây và lưu file này lại,
client sẽ phát hiện so với lần đọc trước đó thì File2.zip là file mới cần được
download sau khi hoàn thành download xong File1.zip)

Mỗi Client download tuần tự từng file theo danh sách trong tập tin input.txt.
● Với mỗi một file cần download, client sẽ mở 4 kết nối song song đến Server
để bắt đầu download các phần của 1 file. Có thể dựa vào dung lượng của file
và chia 4 để yêu cầu server gửi từng chunk cho mỗi kết nối. Trên màn hình
client cho phép hiển thị tỉ lệ % (từ 0-xx%) dựa trên tiến độ download các phần
của file đang thực hiện download (Lưu ý: Một client chỉ được mở 4 kết nối
song song đến Server để download 1 file).
● Sau đó, client cần nối các phần đã download của một file thành file hoàn
chỉnh. (kiểm tra bằng cách kiểm tra tổng dung lượng và mở file thành công)
● Khi Client hoàn thành download, thì có thể bấm "Ctrl + C" để kết thúc chương trình.
(https://www.tutorialspoint.com/how-do-i-catch-a-ctrlplusc-event-in-cplusplus)
Ví dụ màn hình console của Client:
Downloading File5.zip part 1 ........45%
Downloading File5.zip part 2 ........15%
Downloading File5.zip part 3 ........25%
Downloading File5.zip part 4 ........85%
Gợi ý: Sinh viên cần tạo protocol cho chương trình của mình (Application
protocol) để đánh dấu chunk bắt đầu-đang-kết thúc download thuộc tập tin
nào và khi nhận thì ghi các chunk đúng và đủ vào file để nhận đủ 100% dung
lượng tập tin cần download.
Phần II (3đ): Sử dụng UDP tại tầng Transport ( 1 Client - 1 Server)
● Tương tự bài phần 1, các bạn sẽ sử dụng UDP. Các bạn cần tự đưa ra cơ
chế để gửi dữ liệu tin cậy (rdt - reliable data transfer) ở tầng Application.
Gợi ý: đưa ra phương thức kiểm tra thứ tự gói tin, kiểm tra mất mát gói tin, lỗi gói tin,...
● Server chỉ phục vụ duy nhất 1 Client download (1 socket duy nhất tại Server).
Client có thể download nhiều chunk (nhiều socket) cùng lúc từ Server.
● Không cần xây dựng cơ chế congestion control.
● Chương trình chỉ test 1 client-1 server trong phần II. 6. Tài nguyên
Các bạn có thể lấy các file test có dung lượng khác nhau ở đây (5MB, 10MB, 20 MB, 50 MB, ...):
● https://www.thinkbroadband.com/download
● https://ash-speed.hetzner.com/
● http://xcal1.vodafone.co.uk/
Trong trường hợp bạn muốn test bandwidth chậm với máy ảo để test (chạy Server
hoặc Client), bạn có thể chỉnh bandwidth ở đây để giới hạn tốc độ gửi chậm lại
Hoặc bạn có thể dùng tools bên dưới để giới hạn tốc độ bandwidth giữa Client-Server: ● NetLimiter ● TMeter ● Clumsy
Hoặc có thể dùng sleep để test chương trình của mình. 7. Thang điểm STT Yêu cầu Điểm Phần I
Nhiều clients có thể nhận được danh sách các file từ Server và ctrl-c 1
Hiển thị percent download các chunk của file 1
5s quét file input.txt 1 lần 0.5
Client có để download chunk đầu tiên của file thành công 1
Nhiều client có thể tải đủ các chunk thành công từ Server. 3
Tập tin sau khi download phải đúng và đủ dung lượng
Phần II UDP download thành công 1 chunk kèm cơ chế rdt (reliable data transfer) 1
UPD download thành công toàn bộ file kèm cơ chế rdt (reliable data 2 transfer) Báo cáo 0,5