Cơ chế làm việc của chương trình là từ tang ứng dụng nơi chương trình được cải đặt và làm việc, chương trình sẽ truyền các gói tin được chia nhỏ từ một file, rồi từ đó các tầng mạng tiếp
Trang 1TRUONG DAI HOC QUY NHON
KHOA TIN HOC
Giáo viên : Lê Văn Tuấn
Nguyễn Thanh Bình
Lê Ngọc Hùng Phạm Giang Trường Quốc Phan Thanh Quý
Trần Thị Hà Tuyên
Quy Nhơn 06/2005
Đồ án kết thúc môn học: Thực hành nâng cao - Nhóm 3
Trang 2MUC LUC
Lop information Lop packageData Lop Client
Lop Service Client
Lớp Server Lớp dataResume Lớp myCellRenderer
Lớp my lree Lớp my Vector
j Lớp Tree server
7 Cách sử dụng chương trình - - - - - - - -c c c s3 23369680 133 1535131555532
8 Thành viên nhÓIm - - - - - - << c Ă c 3 63 680686839368 899681133 8591935 5558s32
Đồ án kết thúc môn học: Thực hành nâng cao - Nhóm 3
0801 ö›°ó
Giao diện chương frÌnH . - c5 2 2666663331311 1511115115111155151 555 Các tính năng chính của chương trình MytinyF TP - - Giao thức cài đặt và các bước hoạt động của chương trình
Cài đặt các lớp và các phương thức trong chương trình
Trang 3I Gidi thiệu
FTP (File transfer Protocol) được biết đến như một giao thức truyền file nổi tiếng
trong cac mang TCP/IP Voi cac chương trình có cùng tên kèm theo trong các hệ điệu
hành có hồ trợ TCP/IP như Linux, Unix, Windows 2000/XP người sử dụng có thê lây
các file trên máy chủ ở xa, cũng như upload file lên máy chủ một cách dê dàng
Khi sử dụng FTP, phần mềm FTP trên máy cục bộ phải được kết nối đến phần mém
FTP trên máy ở xa, nơi bạn muốn lấy file về hay tải lên đó Thông thường thì người
dùng phải được cấp một tài khoản mới truy cập được vào máy ở xa Nhưng cũng trong
đa số các trường hợp người dùng không cần phải được cấp tải khoán trước mà có thể
dùng tài khoản vô danh (Anonymous Account), voi cdc han chế về truy cập tài nguyên
Trong đồ án kết thúc môn học “Thực hành nâng cao” này, nhóm 3 đã viết một ứng
dụng client/server nhỏ mô phỏng một chương trình FTP với một sô chức năng đơn giản:
MyTinyF TP Chương trình được cài đặt băng ngôn ngữ Java
H Giao diện của chương trình
tổ MyTinyFTP - Version 10 7777777777777 50750000 0n vn hư nàn hân hàn tư Tư cty tớ vn ni [x]
Host [localhost | Part |1 805 | Connect
-Local FileSystern- Remote Connection
DATã (62 ~ |m||#| |ci| [B8] z=|
(J Baita (1 Pictures
P LFl My Documents x [ Ban ran (J RECYCLED ==
[nata (1 Softwares ELwic
(J Documents write My ee
(J Duong [4 thoitrany_0001.wma A My Music
Gil Fbook i by Eachaae
(4 FTPRoat (1 Phim lien THẬN 15-5-2005 L1 bzip?
2 Music Beis (binh).doc ry = |
Exit
Đồ án kết thúc môn học: Thực hành nâng cao - Nhóm 3 3
Trang 4Chương trình khi chưa kêt nội với Server sẽ cĩ giao diện như trên Vì chưa kết nơi
với Server nên bên phía cửa sơ Client vân là các file trên máy cục bộ Khi client kêt nơi
VỚI server, cửa sơ bên server sẽ hiên thị danh sách file của máy chủ:
TẾŸ MyTimtTP - Version 1.11 -
-Local HleSystem Remote Connection
DATA (G2) me | [ca | | Bố Refresh | @ Explorer ‘_) Tree
CL Data (3) Softwares CJ boi so cua 1024
(4 Documents E lwnite hehe
[ Duong [D thạtrang_0001.wma (4 New Folder :|
4 chook TT] New Folder? A
(4 Linh tinh L] Client.class 5
Remove Remove
Remaveal | RemavsAll
Connected with localhost successfull
Working port number: 1905 Copyright by Group 3 - THBQQ-
Exit
Người dùng cĩ thê chuyển chế độ hiện thị dạng cây thư mục bên cửa sơ server:
` Lá
Đồ án kêt thúc mơn học: Thực hành nâng cao - Nhĩm 3
Trang 52 MyTinyFTP - Version 1.0 =~
Host localhost ‘Port 1905 | Disconnect |
Local FileSystem Remote Connection
a - -
Õ Haitan (1 Pictures ® C4 Test
(J Documents EI write ? [hehe
(J Duong [* thoitrang_0001.wma # Co backup
a Ba ngon nentung ling 0001 wmy
(J Ebook
ry Duyen may va su lua chon.doc (i FIPRoot L1 furtinn nrarlin-[I.4.0.dnr
(GHOST ® (9 New Folder
EE Musir ® (4 New Folder?
(74 Nese Folder Select Select
Remove Remove |
SEND Ì GET
HL Cac tinh nang chinh cia chuong trinh MyTinyFTP
Chương trình MyTinyFTP gồm có những chức năng chính sau:
e Cho phép gửi/nhận một/nhiều file hoặc thư mục từ máy trạm đến máy chủ ở xa
(thông qua mạng cục bộ)
e Cho phép nhiều Client cùng kết nối đến một Server trong quá trình vận hành
chương trình
e Hỗ trợ chức năng resume trong trường hợp bị ngắt kết nối bất thường khi đang
truyện một file từ Client lên Server và ngược lại
e© Với hai danh sách chọn file tương ứng với hai phía Client và Server người dùng
có thê thao tác với nhiêu file/thư mục ở nhiêu nơi khác nhau đê tải về Client
hoặc chép lên Server
Đồ án kết thúc môn học: Thực hành nâng cao - Nhóm 3 5
Trang 6e Với chức năng Tree bên phía Server, người dùng có thê để dàng hình dung được tông thê toàn bộ câu trúc file cũng như thư mục bên phía Server mà mình được phép truy nhập, và cũng có thê dê dàng chọn file/thư mục từ đây
e Cho phép thiét lập linh động thư mục gốc (FTPRoot) bên Server mà người dùng được phép truy cập vào
e©_ Ngoài ra còn cho phép người dùng linh động với nhiều tuỳ chọn trong lúc khởi động chương trình
IV Giao thức được cài đặt và các bước hoạt động của chương trình
Một hệ thống client/server luôn phải cài đặt một giao thức bên trong nó, với chương trình này giao thức được cài đặt là TCP Với đặc tính là một giao thức hướng liên kết (connection-orienteđ), ôn định và chính xác nên TCP rất thích hợp cho việc truyền tải file qua mạng, tuy nhiên chính ưu điểm này khiến cho nó tiêu tốn khá nhiều tài nguyên mạng Cơ chế làm việc của chương trình là từ tang ứng dụng (nơi chương trình được cải đặt và làm việc), chương trình sẽ truyền các gói tin được chia nhỏ từ một file, rồi từ đó các tầng mạng tiếp tục xử lý các gói tin đó để chuyền qua mạng cho máy nhận
Hoạt động của chương trình như sau:
Server sẽ hoạt động và lang nghe trên một công mặc định (hoặc do người dùng quy định), và để Client có thể kết nối được với Server thì cần phải cung cấp cho Client biết tên của máy chủ cũng như công mà máy chủ làm việc
Khi Server được khởi động, nó sẽ tạo ra một file LOG (nếu chưa có) để ghi lại các lỗi có thể xảy ra trong quá trình làm việc Sau đó server sẽ chạy vào một vòng lặp vô tận chờ Client gửi các yêu cầu (hợp lệ) lên Trong chương trình, các yêu cầu sau là yêu cầu hợp lệ:
Send Nhận file từ Client gửi lên
Get Load file tir server vé may Client
Ngai Ngắt kết nối
Chuyenthumuc chuyên thư mục hiện hành
Yeucauresume Yêu câu resume trong trường hợp upload
Yeucauloadtiep Yêu cầu resume trong trường hợp download
Đồ án kết thúc môn học: Thực hành nâng cao - Nhóm 3 6
Trang 7layJTree_JTable Cap nhat khung duyét va cay
layJTree Cap nhat cay
layJTable Cap nhat khung duyét
Khi Client kết nối thành công với Server, trước tiên nó sẽ gửi yêu cầu layJTree_JTable đến Server lẫy danh sách file trong FTPRoot để hiến thị lên giao diện bên Client Sau đó Client sẽ tạo file LOG bén Client nếu nó chưa tôn tại, còn nếu đã có file Log rồi thì Client sẽ kiểm tra xem có cần Resume không (xét cả hai trường hợp upload và download) bằng cách kiểm tra các file log Nếu trong lần kết nối trước đó, chương trình bị ngắt kết nỗi bất thường trong khi truyền chưa xong một file nào đó thì chương trình sẽ hỏi người dùng xem có muôn tiếp tục truyền hoàn thành file đó không; nêu câu trả lời nhận được là có thì chương trình sẽ tiến hành Resume
Quá trình truyền một file diễn Ta như sau: đầu tiên chương trình sẽ lẫy thông tin của file cân truyện, sau đó tình toán số lượng cũng như kích thước các gói sẽ được chia nhỏ
ra dé truyền qua mạng Tên file cùng với các thông tin phụ sẽ được gửi đi trước, bên nhận sẽ kiểm tra sự tôn tại của file sắp được chuyền có có trong thư mục hiện tại hay không Sau quá trình kiểm tra và xác nhận của người dùng (nếu cần thiếu, chương trình
sẽ tiễn hành gửi các gói dữ liệu đi Trong quá trình nhận các gói tin, nêu có lỗi xảy ra, ngay lập tức file mới được đóng lại và thông tin của lần truyện file bị lỗi này sẽ được lưu vào file log để phục vụ cho quá trình resume trong lần kết nối sau
Tất cả các lỗi cũng như các thông báo của chương trình trong quá trình vận hành được hiện thị trong khung Status Riêng những lỗi trong lúc khởi động sẽ hiện thị trên màn hình Console
V Các khó khăn kỹ thuật đã giải quyết
Trong qua trình cài đặt chương trình, một vẫn đề khó khăn nổi lên là làm sao nhận biết được ranh giới giữa các gói tin cũng như các thông điệp trong luồng nhập cũng như luong xuất Và khi tiến hành truyền nhiều file hoặc truyền một thư mục (không rỗng) thi vẫn dé là làm sao biết được ranh giới đữ liệu giữa các file với nhau trong luồng Với cách làm thông thường xử lý từng byte một thì việc này đòi hỏi cần phải có một sự kiểm soát luồng cực kỳ chặt chẽ (chặt chẽ đến từng byte một) thi MỚI CÓ thé dam bao cho chương trình vận hành ôn định Một giải pháp khác là ta không tiến hành gửi/nhận các byte mà ta sẽ gửi/nhận một đối tượng Như vậy thì tất cá mọi thông tin muốn gửi qua mạng ta chỉ cần “đóng gói” chúng vào một đối tượng và chuyển chúng vào luồng
Ở đầu bên kia của luồng, ta lại đọc ra nguyên một đối tượng với đầy đủ dữ liệu cũng như các phương thức được xây dựng sẵn của đối tượng đó, rất thuận tiện cho việc thao tác đữ liệu Hơn nữa một “gói” (đối tượng) có thể chứa nhiều cả về loại lẫn số lượng
Đồ án kết thúc môn học: Thực hành nâng cao - Nhóm 3 7
Trang 8các dữ liệu nên ta có thể gộp nhiều thông tin vào một gói và gửi đi một lần, dễ dàng hơn trong việc kiểm soát luồng Đề có thể truyền được các đối tượng qua mạng thì các đối tượng này phải được cài đặt (implements) giao diện Serializable Các đối tượng loại này trong chương trình gồm có:
e packageData : gói chứa dữ liệu được chia nhỏ từ các file cùng một số thông tin liên quan
e Information : gói chứa thông tin của file sẽ được truyền đi
e myTree : ĐÓI tạo cây
e Trec server : gói phục vụ quá trình tạo cây
e myVector : gói chứa danh sách file bên Server gửi qua cho Client
e dataResumc : gói phục vụ cho quá trình resume
Một khó khăn nữa là việc hiển thị danh sách các file ở Server trên máy Client Vì việc sử dụng đối tượng JFileChooser trở nên phức tạp trong trường hợp này, nên việc lựa chọn đối tượng sử dụng cũng như hình thức thê hiện gặp nhiều khó khăn, vướng mắc Mỗi một thành phần (componenf) có một ưu thế cũng như nhược điểm riêng trong
việc thể hiện danh sách file của Server Giải pháp được đưa ra là tích hợp nhiều thành
phan dé cho phép người sử dụng tuỳ chọn trong quá trình sử dụng Trong chương trình thì hai thành phân da duoc str dung la: JTree va JList Dé co thé load được các icon trong JList, d6i tuong JList phai duoc setCell/Renderer voi d6i sé cua phuong thitc nay
là một đối tượng kiểu Cel/Renderer (va cu thé trong chương trình này là lớp myCellRenderer được kê thừa từ lớp ListCeliRenderer)
Việc lựa chọn loại của luông (nhập/xuất), cũng như các phương thức đọc/ghi cũng gặp nhiều van đề Bởi vì nếu sử dụng không đúng thì dữ liệu sau khi chuyên qua mạng
sẽ bị hỏng cấu trúc, không sử dụng được Vấn đề này được giải quyết chỉ băng kinh nghiệm và sự thử nghiệm các luông cũng như các phương thức đê kiêm tra
VI.Cài đặt các lớp và phương thức trong chương trình
Chương trình bao gồm I1 lớp với các chức năng chính của từng lớp được tóm tắt trong bảng sau:
Client là lớp chính bên phía máy khách, thực hiện các chức năng
truyện tải file cũng như hiên thị giao diện
Server là lớp thực thi bên phía máy chủ, có chức năng tạo ra các
luong cho moi Client nôi vào
Đồ án kết thúc môn học: Thực hành nâng cao - Nhóm 3 8
Trang 9
Service Client là lớp chính bên phía máy chủ, thực hiện các chức năng
truyền tải file
packageData là gói chứa thông tin và dữ liệu (được chia nhỏ ra từ các
file) đê truyền qua mạng
dataResume là gói chứa thông tin của file cần được resume
information chứa thông tin của file sẽ được truyền qua mang
myCellRenderer lớp phục vụ cho việc hiện thị cac icon trong đối tuong JList
myTree lớp phục vụ cho việc truyền đối tuong JTree qua mang
my Vector lớp phục vụ cho việc truyền đối tượng Vector qua mạng
Tree server lớp dùng để tạo đỗi tượng JTree
Vector _server lớp phục vụ cho việc trình bày các file và thư mục của
Server bén Client (sap xêp trình bày theo loại)
1 Lớp information
Lớp này dùng để chứa các thông tin của một file/thư mục chuẩn bị được truyền qua mạng Do phải truyền qua mạng nên lớp này phải implements lớp Serializable Lớp bao gồm có 4 thuộc tính cùng với các phương thức set/get cho mỗi thuộc tính này Ý nghĩa của các thuộc tính:
e Stringten :chứa tên của file/thư mục chuẩn bị được truyền qua
e Stringloai :xác định thông tim gửi là một file hay là thư mục
e ¡intsoluong :xác định số lượng file/thư mục con trong thư mục được gửi
qua (trong trường hợp đôi tượng gửi qua là thư mục)
e Stringpath :chứa vị trí của đối tượng (file/thư mục) trên máy gửi (dùng
cho chức năng Resume) Lớp này được dùng trong các phương thức gử1/nhận file của hai lop Client và Service_Client
Lớp packageData
Lớp này dùng để chứa dữ liệu cùng với các thông tin liên quan để chuyển qua mạng Dữ liệu chứa trong các gói chính là dữ liệu của các file được “cắt” nhỏ ra để chuyên qua mạng Lớp bao gém có 4 thuộc tính cùng với các phương thức set/get cho mỗi thuộc tính này Ý nghĩa của các thuộc tính:
Đồ án kết thúc môn học: Thực hành nâng cao - Nhóm 3 9
Trang 10e byte[] dulieu : mảng chứa đữ liệu
e int kichthuoc : kích thước thật sự của mảng dữ liệu
e booleangoicuoi : xác định gói được chuyên có phải là gói cuối cùng
của một file hay không
e int goiso : thứ tự của gói được chuyên
Phương thức khởi tạo có một đối số là: kích thước đữ liệu tối đa mà một gói
có thê chứa trong một lân gửi đi Lớp này được dùng trong các phương thức gửi file của các lop Client va Service_Client
3 Lớp dataResume
Lớp nay dung dé chứa các thông tin phục vụ cho việc Resume Khi một client kết nối với server, nếu có yêu cầu cần Resume thì các thông tin Resume sẽ được chuyển qua lại giữa các máy bằng gói này Lớp bao gồm có 2 thuộc tính cùng với các phương thức get cho mỗi thuộc tính này Phương thức khởi tạo của lớp có 2 đối số, chính là các giá trị khởi tạo cho các thuộc tính này Y nghĩa của các thuộc tính:
e String path : đường dẫn của file trên máy gửi
e int goiso : là gói truyền bị lỗi, nếu resume thì cần gửi bắt đầu từ gói
này trở đi
4 Lớp myCellRenderer
Lớp này là lớp “chức năng” phục vụ cho việc load icon (để phân biệt đâu là thư mục, đâu là file) trong thành phần JList Lớp này kế thừa (extends) lớp JLabel
và “thực thi” (implements) lớp ListCellRenderer, bởi vì ta dùng cả hình ảnh (icon) lẫn văn bản đề hiển thị trong mỗi ô của JList ListCellRenderer là một giao diện đơn giản chỉ có một phương thức:
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
Phương thức này được gọi mỗi khi đối tượng JList muốn hiển thị 6 trong
thành phân danh sách Ta quan tâm đên đôi sô thứ 2 đê xác định ô đó thê hiện file hay thư mục đề load Icon tương ứng
File f = (File)value;
if(f.isDirectory())
setIcon(new Imagelcon("images"+File.separator+"folder_icon.gif"));
else
setIcon(new Imagelcon("images"+File.separator+"file_icon.gif"));
Đồ án kết thúc môn học: Thực hành nâng cao - Nhóm 3 10