1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo Đồ Án 1 môn học mạng máy tính Đề tài Ứng dụng client server truyền và nhận file qua giao thức tcp

18 2 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Ứng Dụng Client-Server Truyền Và Nhận File Qua Giao Thức TCP
Tác giả Lê Nhật Thành, Nguyễn Tiến Thành, Đặng Lê Đức Thịnh
Người hướng dẫn ThS. Lê Hà Minh
Trường học Đại học Quốc gia Thành phố Hồ Chí Minh
Chuyên ngành Mạng máy tính
Thể loại báo cáo đồ án
Năm xuất bản 2024
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 18
Dung lượng 1,28 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

ID Tên thành viên Mã số sinh viên Nhiệm vụ1 Lê Nhật Thành 23120357 - Làm phần upload folder - Tìm hiểu về socket và phổ biến lại cho cả nhóm - Kiểm thử chương trình và sửa lỗi - Tham gia

Trang 1

BÁO CÁO ĐỒ ÁN 1

Môn học: Mạng máy tính

ĐỀ TÀI: "Ứng dụng Client-Server truyền và nhận file qua

giao thức TCP"

Giảng viên hướng dẫn: ThS Lê Hà Minh Lớp: 23CTT5

Nhóm thực hiện: Nhóm 9 Thành viên nhóm

1 23120357 - Lê Nhật Thành

2 23120358 - Nguyễn Tiến Thành

3 23120360 - Đặng Lê Đức Thịnh

Trang 2

2 Cấu trúc chương trình 3

2.1 Tổng thể 3

2.2 Cấu trúc chương trình server 3

2.3 Cấu trúc chương trình client 5

2.3.1 Phần xử lí 5

2.3.2 Phần giao diện GUI 6

3 Cách thức hoạt động 9 3.1 Server 9

3.2 Client 9

4 Quá trình xử lí 10 4.1 Tải tệp tin lên (upload) 10

4.2 Tải lên thư mục (upload folder) 12

4.3 Tải tệp tin xuống (download) 13

4.4 Ghi log tại server 16

5 Các thư viện và công nghệ đã sử dụng 16

6 Các vấn đề trong quá trình thực hiện và khắc phục 17

Trang 3

ID Tên thành viên Mã số sinh viên Nhiệm vụ

1 Lê Nhật Thành 23120357

- Làm phần upload folder

- Tìm hiểu về socket và phổ biến lại cho cả nhóm

- Kiểm thử chương trình và sửa lỗi

- Tham gia viết báo cáo

- Xây dựng cấu trúc cơ bản client-server

2 Nguyễn Tiến Thành 23120358

- Làm phần download file

- Thiết kế giao diện download file

- Viết các hàm kiểm tra, chuẩn hóa input

- Tham gia viết báo cáo

- Thiết kế cây thư mục

3 Đặng Lê Đức Thịnh 23120360

- Làm upload file

- Thiết kế giao diện upload và giao diện tổng quan

- Tìm hiểu về tính năng đăng nhập và ghi log

- Liên kết code xử lí với giao diện

- Tham gia viết báo cáo

1 Thông tin nhóm

2 Cấu trúc chương trình

2.1 Tổng thể

− Chương trình bao gồm hai phần chính

+ Server: Quản lý, lưu trữ tệp tin, nhận yêu cầu từ client và xử lý truyền/ nhận file

+ Client: Gửi yêu cầu đến server và thực hiện truyền/nhận file

− Các file cấu trúc chương trình:

+ Server.py: Chương trình server xử lý upload/download file

+ Client.py: Chương trình client giao tiếp với server

+ Thư mục "DOWNLOADS": Nơi server lưu trữ các file upload từ client

+ File “Users.txt”: Dùng để lưu trữ cái tài khoản đăng nhập của client

2.2 Cấu trúc chương trình server

1 start_server()

• Chức năng: Khởi động server, lắng nghe các kết nối từ client

• Tạo một luồng mới để xử lý từng kết nối client

Trang 4

2 handle_client(conn, addr)

• Chức năng: Xử lý các yêu cầu từ client trên một luồng riêng

• Các thao tác chính: Đăng nhập, xử lý lệnh từ client, đăng xuất

3 client_login(conn)

• Chức năng: Xác thực thông tin đăng nhập của client bằng cách đối chiếu với dữ liệu trong file Users.txt

• Trả về: Kết quả đăng nhập (thành công hoặc thất bại)

4 main(conn, addr, userName, isLogined)

• Chức năng: Xử lý các lệnh từ client sau khi đăng nhập thành công

• Hỗ trợ các lệnh: upload, upload_folder, download, logout

5 normalize_input(request)

• Chức năng: Chuẩn hóa lệnh từ client, loại bỏ khoảng trắng thừa và trích xuất lệnh cùng đường dẫn file

6 receive_file_from_client(conn, filePath)

• Chức năng: Nhận file từ client và lưu vào thư mục DOWNLOADS của server

• Xử lý tên file trùng lặp bằng cách thêm số thứ tự vào tên file

7 receive_folder_from_client(conn, base_dir)

• Chức năng: Nhận toàn bộ thư mục từ client và lưu vào thư mục DOWNLOADS của server

• Tạo cấu trúc thư mục tương ứng trên server

8 send_file_to_client(socketClient, filePath)

• Chức năng: Gửi file từ server đến client qua socket

9 send_list_file_to_client_v2(socketClient, addrClient)

• Chức năng: Gửi danh sách thư mục và file có trong thư mục DOWNLOADS của server cho client

• Tổ chức dữ liệu theo dạng cây thư mục

10 send_preOrder(socketClient, root)

• Chức năng: Gửi thông tin các thư mục và file đến client theo thứ tự duyệt trước (Pre-order traversal)

Trang 5

11 traversal_folder(folderPath, root)

• Chức năng: Duyệt qua toàn bộ các thư mục và file trong một đường dẫn, lưu thông tin vào cấu trúc cây thư mục

12 get_info(filePath)

• Chức năng: Lấy thông tin kích thước file và thời gian chỉnh sửa cuối cùng của một file

13 read_file_user()

• Chức năng: Đọc danh sách tài khoản người dùng từ file Users.txt

• Trả về: Danh sách người dùng và mật khẩu dưới dạng từ điển

14 send_message(conn, msg)

• Chức năng: Gửi một thông điệp tới client thông qua socket

15 receive_message(conn)

• Chức năng: Nhận thông điệp từ client thông qua socket

2.3 Cấu trúc chương trình client

2.3.1 Phần xử lí

1 receive_message()

• Nhận một tin nhắn từ server Đầu tiên nhận độ dài của tin nhắn, sau

đó nhận và trả về nội dung tin nhắn

2 send_message(msg)

• Gửi một tin nhắn tới server Đầu tiên mã hóa nội dung tin nhắn, sau đó gửi độ dài và nội dung tin nhắn

3 client_login(username, password)

• Xử lý đăng nhập của người dùng bằng cách gửi tên người dùng và mật khẩu tới server Nếu đăng nhập thành công, trả về True, ngược lại False

4 main(username)

• Hàm chính của giao diện người dùng Xử lý các tác vụ upload file/folder, dowload

• choose_upload()

Trang 6

– Tạo cửa sổ cho phép người dùng chọn tải file hoặc tải thư mục lên.

• normalize_input(request)

– Xử lý và chuẩn hóa đầu vào của người dùng Tách lệnh và đường dẫn

từ một chuỗi

• upload_file(filePath)

– Xử lý việc tải file lên server, bao gồm việc hiển thị thanh tiến trình

và gửi dữ liệu

• upload_folder(folderPath)

– Xử lý việc tải thư mục lên server, bao gồm việc gửi các file và thư mục trong thư mục đã chọn

• show_list_file()

– Hiển thị danh sách các file và thư mục từ server dưới dạng cây

• receive_file(path)

– Xử lý việc tải file từ server, bao gồm việc hiển thị thanh tiến trình

và nhận dữ liệu

• ib_message(event=None)

– Xử lý gửi tin nhắn từ người dùng

– Kiểm tra nội dung tin nhắn và thực hiện các hành động:

∗ Xóa nội dung trắng hoặc không hợp lệ

∗ Xử lý lệnh logout

∗ Hiển thị tin nhắn lên giao diện

∗ Gửi tin nhắn đến server

∗ Xử lý các lệnh dowload hoặc upload file/thư mục và hiển thị thông báo thành công hoặc thất bại

• click_logout()

– Gửi lệnh logout đến server

– Chuyển giao diện về màn hình đăng nhập (menu_login)

2.3.2 Phần giao diện GUI

1 temp_frame

• Khung hiển thị thông tin server và nút LOGOUT

2 server_label

• Hiển thị tên người dùng, địa chỉ IP và cổng server

Trang 7

3 logout_button

• Nút đăng xuất, kích hoạt hàm click_logout

4 main_frame

• Khung chính chứa tin nhắn, bao gồm:

– canvas: Vùng cuộn hiển thị tin nhắn

– vertical_scrollbar: Thanh cuộn dọc

– horizontal_scrollbar: Thanh cuộn ngang

– scrollable_frame: Khung để chứa các tin nhắn và thông báo

5 entry_frame

• Khung nhập tin nhắn, bao gồm:

– upload_button: Nút tải lên file/thư mục

– download_button: Nút hiển thị danh sách file để tải xuống

– entry: Trường nhập tin nhắn

– send_button: Nút gửi tin nhắn

6 menu_login()

• Xóa toàn bộ các widget hiện tại và thiết lập giao diện đăng nhập

• Đặt tiêu đề cửa sổ, kích thước và màu nền

• Tạo các khung, tiêu đề và các thành phần giao diện:

– Tiêu đề: Hiển thị chữ "Sign in"

– Khung tên đăng nhập: Gồm nhãn "Username:" và ô nhập

– Khung mật khẩu: Gồm nhãn "Password:" và ô nhập

7 user_focus_in(e)

• Xóa nội dung mặc định trong ô nhập tên đăng nhập khi người dùng nhấp vào

8 user_focus_out(e)

• Đặt lại nội dung mặc định "Username" nếu ô nhập trống

9 pass_focus_in(e)

• Xóa nội dung mặc định trong ô nhập mật khẩu khi người dùng nhấp vào

• Hiển thị ký tự ẩn ("*") khi nhập mật khẩu

Trang 8

10 pass_focus_out(e)

• Đặt lại nội dung mặc định "Password" và bỏ ẩn ký tự nếu ô nhập trống

11 click_Login(event=None)

• Xử lý sự kiện khi người dùng nhấn nút đăng nhập hoặc phím Enter

• Lấy thông tin tên đăng nhập và mật khẩu từ ô nhập

• Gửi yêu cầu đăng nhập đến server thông qua hàm client_login(username, password)

• Nếu đăng nhập thành công:

– Hiển thị thông báo thành công với tên người dùng

– Chuyển đến giao diện chính (main(username)) sau 2 giây

• Nếu đăng nhập thất bại:

– Hiển thị thông báo lỗi "Login failed"

– Tự động xóa thông báo sau 2 giây

12 login_button

• Nút đăng nhập, kích hoạt hàm click_Login

13 logout_button

• Nút đăng xuất, cần được tích hợp để chuyển người dùng về giao diện menu_login() khi được nhấn

14 click_reset

• Hàm xử lý sự kiện khi nhấn nút "Reset password"

• Có thể mở một giao diện mới để nhập email hoặc xác minh thông tin phục vụ việc đặt lại mật khẩu

15 client_login

• Hàm kết nối với server, xác thực tên người dùng và mật khẩu

• Trả về trạng thái đăng nhập thành công hoặc thất bại

16 main

• Hàm chuyển đổi sang giao diện chính sau khi đăng nhập thành công

• Hiển thị các thành phần như main_frame, khung chat, các nút chức năng, v.v

17 reset_login_flag

Trang 9

• Đặt lại trạng thái của biến check_click_login về False sau khi hoàn tất một lượt đăng nhập

• Được gọi bằng root.after() để tránh xử lý đăng nhập đồng thời

3 Cách thức hoạt động

Chương trình hoạt động theo giao thức TCP và giao tiếp theo mô hình client -server

3.1 Server

1 Khởi tạo socket TCP/IP: Server khởi tạo socket để lắng nghe kết nối từ client

2 Quản lý danh sách file:

• Tạo danh sách file trong thư mục "DOWNLOADS" theo cấu trúc cây

• Lưu trữ các file đã upload và xử lý các yêu cầu download

3 Chức năng chính:

• Upload: Nhận file/folder từ client

• Download: Gửi file tới client

• Danh sách file: Gửi danh sách file hiện có đến client

3.2 Client

1 Kết nối đến server

• Client kết nối tới server qua giao thức TCP/IP, sử dụng socket

2 Cung cấp giao diện GUI

• Giao diện người dùng bằng Tkinter, bao gồm các tùy chọn upload, down-load, xem danh sách file (tích hợp trong dowload) , đăng nhập

3 Chức năng

• Upload file/folder: Chọn file/folder từ máy client để upload lên server

• Download file: Hiển thị danh sách file đã được các tài khoản khác upload lên server, cho phép chọn file để tải về theo thư mục được chỉ định

Trang 10

4 Quá trình xử lí

4.1 Tải tệp tin lên (upload)

Server

1 Chuẩn bị file: Có hai chức năng để người dùng lựa chọn

Hình 1: Hai chức năng để người dùng lựa chọn

2 Người dùng chọn upload từ giao diện sẽ hiển thị hai chế độ để upload: upload file và upload folder

Trang 11

Hình 2: Hai tính năng upload: folder và file

3 Người dùng chọn file/folder muốn upload từ giao diện và giao diện sẽ trả về

cú pháp "upload <Đường dẫn tới file/thư muc>" Đây là cách để gửi tín hiệu tới server để yêu cầu upload file

Hình 3: Người dùng chọn file từ cửa sổ File Explorer

4 Người dùng sẽ bấm vào nút "Send" Khi đó, một thanh hiển thị tiến trình tải lên hiện ra

Trang 12

Hình 4: Tiến trình tải lên file

5 Cuối cùng, sau khi hoàn tất tải file, chương trình sẽ thông báo file đã tải lên thành công Nếu thất bại, chương trình cũng sẽ in ra thông báo

Hình 5: Thông báo tải lên file thành công

Hình 6: Chương trình báo tải lên không thành công

4.2 Tải lên thư mục (upload folder)

Tương tự như upload tệp tin, người dùng có thể chọn upload folder để tải lên hệ thống một thư mục (Có thể gồm nhiều thư mục con)

Trang 13

Hình 7: Tải lên một thư mục

4.3 Tải tệp tin xuống (download)

1 Client:

− Gửi request:

• Đường dẫn cần lưu file trên máy client

Hình 8: Chọn thư mục để lưu file

• Tên file cần tải xuống từ server

Trang 14

Hình 9: Chọn file để download từ Tree view

− Nhận file:

• Người dùng nhấn nút "Send" để gửi lệnh "download <đường dẫn file>" tới server Thanh tiến trình sẽ hiện ra và tiến trình tải xuống

sẽ bắt đầu

Trang 15

Hình 10: Tiến trình tải xuống bắt đầu

• File đã tải về thành công và giao diện hiển thị thông báo cho người dùng

Hình 11: Thông báo file đã tải thành công

2 Server:

− Gửi request:

• Gửi danh sách file (được biểu diễn dưới dạng cây) để client chọn file cần tải

− Nhận file:

• Gửi dữ liệu file cho client theo từng gói dữ liệu

• Gửi tín hiệu kết thúc cho client khi file đã gửi hết

Trang 16

4.4 Ghi log tại server

Tất cả hoạt động của client sẽ được ghi lại trong đây , mỗi file đại diện cho 1 lần server hoạt dộng , nếu server bị mất kết nối thì sẽ tự động tạo file mới để ghi cho lần tiếp theo

Hình 12: Ghi log các hoạt động tại server

5 Các thư viện và công nghệ đã sử dụng

1 Ngôn ngữ lập trình: Python

2 Các thư viện và module đã sử dụng trong đồ án:

(a) Socket: Quản lý giao tiếp TCP/IP

(b) Tkinter: Tạo giao diện người dùng (GUI) cho client

• Module filediaglog: Mở file explorer lên để chọn thư mục/file

• Module messagebox: Làm hộp thoại thông báo

(c) Threading: Xử lý đa luồng, cho phép server xử lý nhiều client cùng lúc (d) Os: Xử lý file, thư mục và quản lý tên file

(e) time: Lấy thời gian để làm thanh tiến trình

(f) sys: dùng lệnh f lush() để cập nhật tiến trình

(g) datetime: Lấy ngày (dateModified của file, thư mục)

(h) logging: Thư viện hỗ trợ việc ghi log (Nhật kí) trong Python

Trang 17

6 Các vấn đề trong quá trình thực hiện và khắc phục

Vấn đề

1 Trùng tên file: Khi client tải lên file cùng tên, nguy cơ ghi đè tồn tại

2 Hiển thị danh sách file của server: Cần tổ chức danh sách dưới dạng cây thư mục

3 Không đồng bộ giữa việc gửi nhận file của client - server

4 Tích hợp các chức năng của các hàm vào giao diện người dùng dễ gặp lỗi, tốn khá nhiều thời gian xử lí

Khắc phục

1 Trùng tên file: Tự động thêm số vào tên file khi có trùng

2 Quản lý file theo cây thư mục: Sử dụng câu trúc cây trong Python và các phương pháp duyệt

3 Xem xét và tổ chức lại cách thức truyền nhận file một cách hợp lý

4 Tra cứu từ nhiều nguồn tài liệu khác nhau để liên kết với nhau chặt chẽ

7 Một số vấn đề nhóm chưa xử lí được

1 Upload file song song

2 Khi client ngưng tải dữ liệu đột ngột thì server chỉ báo lỗi và chưa có cách nếu client muốn tải tiếp file đó

8 Liên kết tới đồ án của nhóm

Liên kết tới github trong suốt quá trình làm đồ án của nhóm

https://github.com/Zelus120805/Socket_Final.git

Trang 18

Tài liệu tham khảo

[1] Stack Overflow, where developers and technologists share private knowledge https://stackoverflow.com/

[2] Python Software Foundation Tkinter — Python interface to Tcl/Tk Python 3 Documentation Retrieved from https://docs.python.org/3/ library/tkinter.htmlPython 3 Tkinter Documentation

[3] Real Python, Python GUI Programming with Tkinter Retrieved from https://realpython.com/python-gui-tkinter/

[4] Real Python, Introduction to Python Threading Retrieved from https:// realpython.com/intro-to-python-threading/

[5] Real Python, Socket Programming in Python (Guide) Retrieved from https://realpython.com/python-sockets/

[6] Python Software Foundation, Socket — Low-level networking interface Python 3 Documentation Retrieved from https://docs.python.org/3/ library/socket.html

Ngày đăng: 07/01/2025, 18:29

HÌNH ẢNH LIÊN QUAN

Hình 1: Hai chức năng để người dùng lựa chọn - Báo cáo Đồ Án 1 môn học mạng máy tính Đề tài Ứng dụng client server truyền và nhận file qua giao thức tcp
Hình 1 Hai chức năng để người dùng lựa chọn (Trang 10)
Hình 2: Hai tính năng upload: folder và file - Báo cáo Đồ Án 1 môn học mạng máy tính Đề tài Ứng dụng client server truyền và nhận file qua giao thức tcp
Hình 2 Hai tính năng upload: folder và file (Trang 11)
Hình 3: Người dùng chọn file từ cửa sổ File Explorer - Báo cáo Đồ Án 1 môn học mạng máy tính Đề tài Ứng dụng client server truyền và nhận file qua giao thức tcp
Hình 3 Người dùng chọn file từ cửa sổ File Explorer (Trang 11)
Hình 4: Tiến trình tải lên file - Báo cáo Đồ Án 1 môn học mạng máy tính Đề tài Ứng dụng client server truyền và nhận file qua giao thức tcp
Hình 4 Tiến trình tải lên file (Trang 12)
Hình 9: Chọn file để download từ Tree view - Báo cáo Đồ Án 1 môn học mạng máy tính Đề tài Ứng dụng client server truyền và nhận file qua giao thức tcp
Hình 9 Chọn file để download từ Tree view (Trang 14)
Hình 10: Tiến trình tải xuống bắt đầu - Báo cáo Đồ Án 1 môn học mạng máy tính Đề tài Ứng dụng client server truyền và nhận file qua giao thức tcp
Hình 10 Tiến trình tải xuống bắt đầu (Trang 15)
Hình 12: Ghi log các hoạt động tại server - Báo cáo Đồ Án 1 môn học mạng máy tính Đề tài Ứng dụng client server truyền và nhận file qua giao thức tcp
Hình 12 Ghi log các hoạt động tại server (Trang 16)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w