GIỚI THIỆU CHUNG
Đặt vấn đề
Ngày nay, sự phát triển nhanh chóng của khoa học và công nghệ đã làm cho máy tính trở nên phổ biến và quen thuộc với hầu hết người dùng, không chỉ ở Việt Nam mà trên toàn thế giới Máy tính đã tích cực đi sâu vào đời sống con người, tạo ra nhu cầu giao lưu và học hỏi ngày càng cao Sự ra đời của Internet và các ứng dụng trên nền tảng này đã giúp con người dễ dàng và nhanh chóng trao đổi thông tin và dữ liệu.
Ngày nay, Internet là kho tàng thông tin khổng lồ, cho phép người dùng tìm kiếm và truy cập dữ liệu một cách dễ dàng và nhanh chóng Việc tìm kiếm thông tin chỉ cần một cú nhấp chuột cùng với một vài từ khóa đơn giản, mang lại sự thuận tiện tối đa cho người sử dụng.
Khi người dùng tìm thấy thông tin và tài nguyên cần thiết trên Internet, họ thường có nhu cầu lưu trữ và sử dụng chúng lâu dài Tuy nhiên, việc tải dữ liệu từ Internet về máy tính cá nhân thường diễn ra chậm chạp, tốn thời gian và có thể gặp lỗi Do đó, cần có ứng dụng hoặc phần mềm để tăng tốc độ download, giúp tiết kiệm thời gian và cải thiện trải nghiệm người dùng trong việc tải file dữ liệu.
Mục tiêu của đồ án
Đồ án được thực hiện với các mục đích sau:
Tìm hiểu tổng quan về Internet
Tìm hiểu về các phần mềm Download trên mạng
Tìm hiểu về lập trình mạng trong Java
Xây dựng hệ thống Download.
Cấu trúc đồ án
Đồ án này sẽ trình bày các lý thuyết cơ bản về chức năng của phần mềm Download trên mạng và xác định chức năng cho chương trình Download dự kiến xây dựng Phần thực nghiệm sẽ được thể hiện qua việc xây dựng hệ thống Download trên mạng Nội dung đồ án được tổ chức một cách hợp lý để đạt được mục tiêu đề ra.
Giới thiệu chung
Chương này cung cấp cái nhìn tổng quan về đồ án, bao gồm các khái niệm cơ bản và mục tiêu chính của dự án Cuối cùng, chương cũng trình bày cấu trúc tổ chức của đồ án.
Tổng quan về Internet
Chương này trình bày lý thuyết về lịch sử, lợi ích, các trình duyệt Web phổ biến nhất, sự xuất hiện của WWW, các JSP.
Các phần mềm Download trên mạng
Chương 3 trình bày các chức năng của các phần mềm Download trên mạng.
TỔNG QUAN VỀ INTERNET
Lịch sử Internet
Mạng Internet hiện nay bắt nguồn từ mạng ARPANET, được phát triển bởi Cơ quan ARPA thuộc Bộ Quốc phòng Mỹ Vào tháng 7 năm 1969, ARPANET đã kết nối 4 địa điểm đầu tiên, bao gồm Viện nghiên cứu Stanford, Đại học California, Los Angeles, Đại học Utah và Đại học California, Santa Barbara, tạo thành mạng liên khu vực (WAN) đầu tiên.
Thuật ngữ "Internet" lần đầu xuất hiện vào năm 1974 khi mạng được gọi là ARPANET Đến năm 1983, giao thức TCP/IP chính thức trở thành tiêu chuẩn cho ngành quân sự Mỹ, yêu cầu tất cả máy tính kết nối với ARPANET phải sử dụng giao thức này Năm 1984, ARPANET được chia thành hai phần: phần ARPANET dành cho nghiên cứu và phát triển, và phần MILNET phục vụ cho các mục đích quân sự.
Giao thức TCP/IP ngày càng thể hiện rõ sức mạnh vượt trội của mình, đặc biệt là khả năng kết nối dễ dàng giữa các mạng khác nhau Sự kết hợp này, cùng với các chính sách mở cửa, đã cho phép các mạng nghiên cứu và thương mại kết nối với ARPANET, từ đó thúc đẩy sự hình thành của một siêu mạng (SuperNetwork) Đến năm 1980, ARPANET được công nhận là mạng trụ cột của Internet.
Vào giữa thập niên 1980, một mốc lịch sử quan trọng của Internet đã được thiết lập khi tổ chức khoa học quốc gia Mỹ NSF thành lập mạng NSFNET, kết nối các trung tâm máy tính lớn Sự chuyển đổi này đã đánh dấu bước ngoặt khi nhiều doanh nghiệp chuyển từ ARPANET sang sử dụng NSFNET.
NSFNET và do đó sau gần 20 năm hoạt động, ARPANET không còn hiệu quả đã ngừng hoạt động vào khoảng năm 1990
Sự hình thành của mạng xương sống NSFNET cùng với các mạng vùng khác đã tạo điều kiện thuận lợi cho sự phát triển của Internet Đến năm 1995, NSFNET được thu hẹp thành một mạng nghiên cứu, trong khi Internet vẫn tiếp tục mở rộng và phát triển.
Internet đã trở thành mạng lưới lớn nhất thế giới, kết nối mọi lĩnh vực như thương mại, chính trị, quân sự, nghiên cứu, giáo dục, văn hóa và xã hội Sự phát triển không ngừng của các dịch vụ trên Internet đã mở ra một kỷ nguyên mới cho nhân loại: kỷ nguyên thương mại điện tử.
Lợi ích của Internet
Mạng Internet cung cấp nhiều tiện ích hữu ích cho người dùng, bao gồm hệ thống thư điện tử (email), trò chuyện trực tuyến (chat), máy tìm kiếm (search engine), dịch vụ thương mại và chuyển tiền, cũng như các dịch vụ y tế và giáo dục như chữa bệnh từ xa và lớp học ảo Những tiện ích này mang lại một khối lượng thông tin và dịch vụ phong phú trên Internet.
Internet và WWW (World Wide Web) thường bị nhầm lẫn, nhưng thực tế chúng không đồng nghĩa Internet là mạng lưới các máy tính kết nối qua dây đồng, cáp quang, trong khi WWW là tập hợp các tài liệu liên kết qua siêu liên kết (hyperlink) và địa chỉ URL, có thể truy cập thông qua Internet Sự nhầm lẫn này thường được thể hiện qua cách nói đùa như "the intarweb".
Các cách thức thông thường để truy cập Internet là quay số, băng rộng, không dây, vệ tinh và qua điện thoại cầm tay.
Trình duyệt Web phổ biến nhất
Các chương trình duyệt Web thông dụng ở thời điểm này là :
- Internet Explorer có sẵn trong Microsoft Window, của Microsoft
- Mozilla và Mozilla Firefox của Tập đoàn Mozilla
- Safari trong Mac OS X, của Apple Computer
- Evant Brower của Avont Froce (Ý)
Sự xuất hiện của WWW
Vào năm 1991, Tim Berners Lee đã phát minh ra World Wide Web (WWW) tại Trung tâm nghiên cứu nguyên tử châu Âu (CERN), dựa trên ý tưởng siêu văn bản của Ted Nelson từ năm 1985 Sự ra đời của WWW đánh dấu một cuộc cách mạng trong lĩnh vực Internet, cho phép người dùng truy cập và trao đổi thông tin một cách dễ dàng hơn bao giờ hết.
Năm 1994 đánh dấu kỷ niệm 25 năm ra đời ARPANET, khi NIST đề xuất thống nhất sử dụng giao thức TCP/IP Trong thời gian này, WWW đã trở thành dịch vụ phổ biến thứ hai sau FTP, và những hình ảnh video đầu tiên cũng đã được truyền tải qua Internet.
Các ISP
ISP (Nhà cung cấp dịch vụ Internet) là đơn vị cung cấp kết nối Internet, có trách nhiệm thuê đường truyền và cổng từ IAP (Nhà cung cấp dịch vụ truy cập Internet) Các ISP hoạt động dựa trên các hợp đồng cung cấp dịch vụ Internet cho cả tổ chức và cá nhân.
Các loại ISP dùng riêng có quyền cung cấp đầy đủ các dịch vụ Internet, nhưng khác với ISP thông thường, chúng không cung cấp dịch vụ Internet cho mục đích kinh doanh Người dùng chỉ cần ký kết thỏa thuận với một ISP hoặc ISP riêng về các dịch vụ mà họ sử dụng, cùng với thủ tục thanh toán được gọi là thuê bao Internet.
CÁC PHẦN MỀM DOWNLOAD TRÊN MẠNG
Download Accelerator Plus (gọi tắt là DAP)
Nếu bạn thường xuyên tải các file lớn như phim từ internet, ứng dụng miễn phí này sẽ rất hữu ích Nó tăng tốc độ tải xuống bằng cách chia nhỏ file thành nhiều mảnh và tải chúng đồng thời từ các server nhanh nhất, giúp người dùng tiết kiệm thời gian kết nối đáng kể.
Accelerator Plus không làm tăng tốc độ duyệt web nhưng tự quảng cáo có khả năng tăng tốc độ tải xuống lên đến 400% Chương trình sẽ tự động khởi động và bắt đầu quá trình tải xuống khi bạn chỉ định tệp cần tải trên trình duyệt, hoặc bạn cũng có thể thêm các tệp tải xuống vào chương trình một cách thủ công.
DAP cũng có thể nối lại các file download dang dở, hoặc cho phép bạn có thể dừng hoặc và nối lại quá trình download
DAP Premium: 29,95$ được sử dụng miễn phí 1 năm
Thử nghiệm đo tốc độ download cao nhất đạt được 256kbps, dung lượng 3MB, phiên bản mới nhất 7.4
Internet Download Accelerator
IDA là một trình quản lý download hiệu quả, giúp tăng tốc độ tải lên tới 500% nhờ cơ chế multi-section thông minh Nó hỗ trợ khôi phục download, tải từ cả FTP và HTTP, và tương thích với nhiều loại proxy Được tích hợp vào các trình duyệt như Internet Explorer, Nescape Navigator, Mozilla và Opera, IDA còn kết hợp với các trình antivirus để quét virus tự động cho các tệp tin tải về Người dùng có thể đặt lịch download tự động, với mức giá chỉ 24,95 USD.
Thử nghiệm đo tốc độ download cao nhất đạt được 200kbqs, dung lượng 2,19MB, dung thử trong 30 ngày, phiên bản mới nhất là 4.1.2.845
Gigaget
Gigaget là một chương trình hỗ trợ download miễn phí thế hệ mới, sử dụng công nghệ Net Grid để tăng tốc độ tải xuống lên 7-10 lần Công nghệ này giúp giảm thiểu sự hao phí từ các nhà cung cấp nội dung, đồng thời cải thiện hiệu quả và phạm vi download Bằng cách khai thác tài nguyên chưa sử dụng từ các PC kết nối mạng và server, Gigaget cho phép phân phối các file lớn nhanh chóng với mức hao phí thấp hơn so với các giải pháp truyền thống.
- Miễn phí và an toàn
Chuyển dữ liệu bảo mật
- Dễ dùng và quản lí
Chế độ đơn giản và nâng cao, phù hợp cho những người mới và cả người dùng cao cấp
Powerful Task Manager, dễ tổ chức các file đã được download xong
Tốc độ download nhanh vượt trội được ghi nhận
Tự động phê chuẩn và sửa chữa dữ liệu
Nhập, xuất danh sách download, dễ dàng chia sẻ cho bạn bè
- Hỗ trợ nhiều định dạng file và trình duyệt
Tương thích với các trình duyệt lớn như Internet Explorer, Mozilla/Firefox, Maxthon
Hỗ trợ các giao thức stream lớn, bao gồm cả MMS/RTSP/Flash
Intelligent Web Analysis, giúp bạn tìm URL (ngoài trang web) để download
- Các lệnh nâng cao thông minh
Hệ thống ntelligent Disk Cache sẽ bảo vệ đĩa cứng của bạn khi download tốc độ cao
Intelligent Prompt System, cung cấp thông tin hữu ích và những lời khuyên cho từng trường hợp riêng
Chức năng Unique Error Diagnosis, giúp người dùng tìm nguyên nhân và giải pháp cho các tác vụ bị lỗi
FlashGet
Hỗ trợ tốc độ download file nhanh của Amaze Soft
FlashGet, trước đây gọi là JetCar, được phát triển để giải quyết hai vấn đề chính khi tải xuống tệp: tốc độ và quản lý tệp Nếu bạn đã từng phải chờ đợi lâu khi tải tệp với kết nối chậm, gặp phải tình trạng ngắt quãng trong quá trình tải, hoặc không thể theo dõi tiến trình tải, thì FlashGet chính là phần mềm lý tưởng dành cho bạn.
FlashGet cho phép chia nhỏ các tệp tin tải xuống thành nhiều phần và tải xuống đồng thời, giúp tăng tốc độ tải lên từ 100% đến 500% Nhờ vào các tính năng quản lý mạnh mẽ và dễ sử dụng, FlashGet mang đến cho bạn khả năng kiểm soát các tệp tải xuống một cách hiệu quả như chưa từng có trước đây.
FlashGet hiển thị tiến độ tải xuống bằng các chấm lấp lánh, nhưng tốc độ tăng không đạt như mong đợi Việc không thể bắt đầu tải xuống mà không có xác nhận dẫn đến sự chậm trễ Mặc dù vậy, phần mềm này quản lý và phân loại các tải xuống một cách hiệu quả, đồng thời hỗ trợ hơn 30 ngôn ngữ.
FlashGet là phần mềm download giúp tăng tốc độ tải file bằng cách tự động chia nhỏ file thành nhiều phần và tải từng phần một cách đồng thời Với khả năng mở nhiều kết nối cho từng file, FlashGet tối ưu hóa băng thông hiện có, đảm bảo bạn tận dụng tối đa tốc độ kết nối của mình Phần mềm này giúp bạn dễ dàng tải những file khó khăn và chậm chạp, giảm thiểu đáng kể thời gian tải xuống.
FlashGet cho phép người dùng tạo hạng mục không giới hạn cho các file, giúp quản lý công việc download hiệu quả Bạn có thể sắp xếp các download vào các hạng mục được đặt tên đặc trưng, từ đó dễ dàng truy cập và quản lý Với các tính năng quản lý mạnh mẽ và thân thiện, FlashGet giúp bạn kiểm soát quá trình download một cách đơn giản và nhanh chóng.
- Các điểm nổi trội của FlashGet:
Tốc độ Khả năng chia nhỏ file lên đến 10 phần, download từng phần cùng lúc Có thể lên đến 8 phần download khác nhau cùng một lúc
Tổ chức Phân loại file với các đặc tính quản lý file được tích hợp, đơn giản mà mạnh mẽ của FlashGet
Tìm kiếm Mirror Tự động tìm kiếm server nhanh nhất để việc download nhanh nhất
Tự động FlashGet kết nối, ngắt kết nối & tắt máy khi bạn vắng mặt
Lập thời gian biểu cho việc tải xuống các tệp tin bất kỳ khi bạn muốn, cho dù là trong lúc ngủ, ngoài giờ cao điểm, hay vào bất kỳ thời điểm nào trong tuần, cuối tuần Sự lựa chọn hoàn toàn nằm trong tay bạn!
Manage your abundant downloads effortlessly with FlashGet's powerful yet simple interface Automate your downloading process with just a click! FlashGet supports popular web browsers like Internet Explorer, Netscape, and Opera, offering a free download plugin.
FlashGet rất dễ sử dụng với giao diện hợp lý và có thể tùy chỉnh Người dùng có thể sắp xếp các file tải xuống một cách hiệu quả nhờ vào hệ thống sắp hàng logic của FlashGet.
Kiểm soát giới hạn tốc độ download để các file download không can thiệp vào việc duyệt web của của bạn
Người dùng có thể dễ dàng theo dõi mọi khía cạnh của quá trình tải xuống, bao gồm tình trạng server, giám sát các phần chia nhỏ, lượng dữ liệu đã tải và thời gian còn lại Tất cả thông tin cần thiết đều được hiển thị mà không cần mở nhiều cửa sổ, giúp quá trình theo dõi trở nên thuận tiện hơn.
Tùy chỉnh thanh công cụ và giao diện người dùng của FlashGet, bao gồm màu sắc của cửa sổ đồ thị và bản ghi Phần mềm hỗ trợ các server sử dụng proxy, giúp tối ưu hóa quá trình tải xuống.
Nói bằng ngôn ngữ của bạn với khả năng tự động chọn ngôn ngữ của FlashGet (hơn 20 ngôn ngữ có thể chọn)
Kiểm tra các bản cập nhật của FlashGet ngay tại FlashGet
Giám sát tiến trình tải xuống, theo dõi tình trạng máy chủ và cung cấp các phần tải xuống sinh động với giao diện người dùng dễ sử dụng và đầy đủ chức năng.
Hỗ trợ download các file BT BitTorrent
Thử nghiệm đo tốc độ download cao nhất 215kbps, dung lượng 1.59MB, phiên bản mới nhất 1.65, giá thương mại 29,95$
Phần mềm InternetDownloadManager(viết tắt là IDM)
Giới thiệu về IDM (Internet Download Manager.com)
Internet Download Manager Corp, một chi nhánh của Tonec Inc, đã phát triển ứng dụng Internet từ năm 1990, sở hữu mạng lưới chuyên môn vững mạnh trong lập trình, tư vấn và thiết kế dịch vụ Công ty bắt đầu dự án Internet Download Manager vào năm 1998, tập trung vào việc phát triển hệ thống mạng cho thư viện và ứng dụng tăng tốc độ tải file.
Internet Download Manager (IDM) là một công cụ tải tệp tin hiệu quả, cho phép người dùng tải nhiều tệp và phân đoạn cùng lúc Với tính năng tạm dừng và tiếp tục tải chỉ bằng một cú nhấp chuột
Internet Download Manager sở hữu hệ thống tăng tốc tải dữ liệu thông minh, hỗ trợ chia nhỏ gói dữ liệu và áp dụng kỹ thuật tải nhiều phần an toàn, giúp cải thiện tốc độ download hiệu quả Khác với các chương trình download khác, Internet Download Manager tự động chia nhỏ dữ liệu trong suốt quá trình tải, không chỉ ở bước bắt đầu Ngoài ra, phần mềm này còn có khả năng kết nối liên tục mà không cần qua các bước nhập thêm, từ đó nâng cao tốc độ tải xuống một cách tối ưu.
Internet Download Manager (IDM) supports multiple proxy servers, FTP and HTTP protocols, firewalls, redirects, cookies, and various accessible directories, along with a wide range of file formats including MP3 audio and MPEG video IDM is consistently compatible with popular browsers such as Microsoft Internet Explorer, Netscape, AOL, Opera, and Mozilla Firefox, enabling automatic data downloads Users can also drag and drop files or utilize IDM via command line Additionally, IDM can schedule modem dial-ups to download desired data, disconnect, or shut down the computer upon completion of tasks.
Phần mềm này cung cấp nhiều tính năng hữu ích như hỗ trợ đa ngôn ngữ, xem trước file nén, quản lý danh mục download, lên lịch tải dữ liệu chuyên nghiệp và thông báo âm thanh cho các tác vụ hiện tại Nó cũng hỗ trợ HTTPS, xử lý hàng đợi, và pipelining các lệnh FTP, cùng với hướng dẫn chi tiết dưới dạng HTML Bên cạnh đó, phần mềm nâng cao khả năng chống virus cho dữ liệu tải về và tối ưu hóa lưu lượng download liên tục, rất phù hợp cho các kết nối sử dụng băng thông chung như Direcway, Direct PC và Hughes Ngoài ra, nó còn cung cấp đường lệnh thông số kết nối và nhiều tính năng khác.
Internet Download Manager hỗ trợ tất cả các ứng dụng và trình duyệt phổ biến, tương thích với mọi phiên bản của các trình duyệt hiện nay và các ứng dụng internet thế hệ thứ 3.
Tải xuống chỉ với một cú nhấp chuột, IDM sẽ tự động bắt đầu quá trình tải dữ liệu khi bạn nhấn vào liên kết tải trong trình duyệt, giúp tăng tốc độ tải xuống Phần mềm này hỗ trợ các phương thức truyền dữ liệu như HTTP, FTP và HTTPS.
- Tốc độ tải Internet Download Manager có thể tăng tốc độ download lên đến 5 lần vì kỹ thuật phân chia dữ liệu nhỏ thông minh
- Phục hồi download Internet Download Manager sẽ tiếp tục thực hiện công việc download đang còn dang dở mà bạn đã tạm dừng trước đó
Trình cài đặt Internet Download Manager rất đơn giản và nhanh chóng, giúp bạn thiết lập mọi thứ cần thiết và kiểm tra điểm kết nối mạng để đảm bảo không gặp trục trặc trong quá trình cài đặt.
- Hệ thống quét virus tự động Tiện ích này giúp cho các dữ liệu tải về của bạn tránh khỏi những virus và trojan
Trình duyệt chuyên nghiệp hỗ trợ tính năng tải dữ liệu từ mọi ứng dụng một cách hiệu quả Khi được kích hoạt, chương trình cho phép người dùng chọn và tải bất kỳ dữ liệu nào mà không cần đến sự hỗ trợ của các phần mềm download khác Điều này tạo ra sự linh hoạt và tiện lợi vượt trội cho người sử dụng.
Internet Download Manager cho phép người dùng lên lịch tải dữ liệu một cách linh hoạt, tự động kết nối Internet vào thời điểm đã định để thực hiện việc tải xuống Sau khi hoàn thành, phần mềm có thể tự động ngắt kết nối hoặc tắt máy, giúp tiết kiệm thời gian và tài nguyên cho người sử dụng.
- IDM hỗ trở nhiều dạng proxy server Thí dụ như, IDM có thể làm việc với Microsoft ISA, và các FTP proxy server
IDM hỗ trợ nhiều cổng truyền tải dữ liệu như Basic, Negotiate, NTLM và Kerberos, cho phép kết nối với nhiều trạm máy chủ Internet và proxy khác nhau thông qua tên truy cập và mật khẩu.
IDM cho phép người dùng tải xuống tất cả các dạng file bằng cách nhập tất cả đường dẫn tải về vào một trang duy nhất Tính năng này giúp việc tải nhiều dữ liệu cùng lúc trở nên dễ dàng và hiệu quả hơn.
- Giao diện có thể chỉnh sửa Bạn có thể chọn thứ tự các nút bấm hoặc cột nào được xuất hiện trong cửa sổ chính của IDM
- Danh sách download Internet Download Manager có thể được dùng để sắp xếp tự động các dữ liệu download theo các mục đã được định nghĩa trước
- Tính năng cập nhật tự động Cập nhật nhanh chóng để cài những phiên bản mới nhất của IDM và công việc này được tiến hành hàng tuần
Giới hạn download là một tính năng quan trọng, đặc biệt hữu ích cho các kết nối sử dụng băng thông chung như Direcway, Direct PC và Hughes Tính năng này giúp quản lý hiệu quả việc tiêu thụ dữ liệu, đảm bảo kết nối ổn định cho người dùng.
Simply drag and drop the link into IDM, then drag and drop the downloaded file out of Internet Download Manager.
Gíá của IDM trọn đời là 389.000 VNĐ
IDM là một chương trình hỗ trợ đa ngôn ngữ, được phiên dịch sang nhiều thứ tiếng như Ả Rập, Bosnia, Bungary, Trung Quốc, Croatia, Cộng hòa Séc, Đan Mạch, Hà Lan, Pháp, Đức, Hungary, Ý, Nhật, Macedonia, Ba Lan, Bồ Đào Nha, Romani, Nga, Slovakia, Tây Ban Nha và Thái Lan.
TÌM HIỂU LẬP TRÌNH MẠNG VỚI JAVA
Lập trình luồng trong Java
1.1 Tổng quan về luồng ( tuyến )
- Luồng là 1 cách thông dụng để nâng cao năng lực xử lý của các ứng dụng nhờ vào cơ chế song song
- Một luồng là một đơn vị cơ bản của việc sử dụng CPU
- Nó hình thành gồm: một định danh luồng (thread ID), một bộ đếm chương trình, tập thanh ghi và ngăn xếp
Các luồng trong cùng một quá trình chia sẻ một không gian địa chỉ, cho phép chúng sử dụng các biến toàn cục và chia sẻ tài nguyên một cách hiệu quả.
- Cách thức các luồng chia sẻ CPU cũng giống như cách thức của các quá trình
Một luồng có bốn trạng thái chính: đang chạy (running), sẵn sàng (ready), nghẽn (blocked) và kết thúc (dead) Luồng được coi là một quá trình nhẹ, giúp tối ưu hóa hiệu suất trong lập trình.
- Trong Java, luồng là 1 đối tượng
- Có 2 cách để tạo ra luồng :
- Cách 1 : Thừa kế từ lớp java.lang.Thread
- Cách 2 : Cài đặt giao diện java.lang.Runnable
Trong Java, do không hỗ trợ kế thừa bội, nếu bạn muốn kế thừa từ một lớp và đồng thời thực hiện đa tuyến, bạn cần sử dụng giao diện Runnable Ví dụ, khi phát triển các Applet, nếu bạn muốn ứng dụng vừa là Applet vừa thực thi nhiều tuyến, bạn phải kế thừa từ lớp Applet Tuy nhiên, khi đã kế thừa từ lớp Applet, bạn sẽ không thể kế thừa từ lớp Thread Điều này ảnh hưởng đến độ ưu tiên của các luồng trong chương trình của bạn.
Độ ưu tiên của các luồng xác định mức độ ưu tiên trong việc phân phối CPU giữa các luồng Khi có nhiều luồng ở trạng thái "ready", luồng có độ ưu tiên cao nhất sẽ được thực thi và chuyển sang trạng thái "running".
Khi một luồng được tạo ra, nó sẽ nhận một độ ưu tiên mặc định là 5 Để điều chỉnh độ ưu tiên của luồng theo nhu cầu, bạn chỉ cần sử dụng phương thức setPriority() và truyền vào một số nguyên tương ứng với độ ưu tiên mong muốn Để kiểm tra độ ưu tiên hiện tại của luồng, bạn có thể gọi phương thức getPriority().
- Ðộ ưu tiên trong Java được định nghĩa bằng các hằng số nguyên theo thứ tự giảm dần như sau:
- Thread.MAX_PRIORITY (giá trị 10)
- Thread.NORM_PRIORITY (giá trị 5)
- Thread.MIN_PRIORITY (giá trị 1)
- Một luồng mới sẽ thừa kế độ ưu tiên từ luồng tạo ra nó
- Luồng là mạch thi hành độc lập của một tác vụ trong chương trình
- Một chương trình có nhiều luồng thực hiện cùng lúc gọi là đa luồng
Một số phương thức của Thread :
Phương thức public void run() được Java sử dụng để thực thi một tuyến thi hành Để thực hiện nhiệm vụ của tuyến, bạn cần ghi đè phương thức này, vì phương thức run() trong lớp Thread chỉ là một phương thức rỗng.
Phương thức `start()` trong Java được sử dụng để khởi động một luồng (thread) mới Khi một luồng được tạo ra, nó chưa thực sự hoạt động cho đến khi phương thức `start()` được gọi Khi `start()` được kích hoạt, phương thức `run()` sẽ được thực thi, cho phép luồng bắt đầu thực hiện các tác vụ của nó.
Phương thức `stop()` trong Java có chức năng ngưng tuyến thi hành, nhưng không an toàn cho các ứng dụng Thay vì sử dụng phương thức này, bạn nên gán giá trị null cho biến Thread để dừng tuyến một cách an toàn hơn.
Phương thức `public final void suspend()` trong Java được sử dụng để tạm ngưng một tuyến, nhưng ít được khuyến khích do không nhả tài nguyên mà nó giữ, dẫn đến nguy cơ khoá chết Thay vào đó, nên sử dụng phương thức `wait()` để tạm ngừng tuyến một cách an toàn hơn.
Phương thức public final void resume() được sử dụng để tiếp tục vận hành một tuyến đang bị ngưng Nếu tuyến đang thi hành, phương thức này sẽ bị bỏ qua Thông thường, resume() được kết hợp với phương thức suspend() Tuy nhiên, bạn nên ưu tiên sử dụng phương thức notify() thay vì resume().
The public static void sleep(long millis) method puts the executing thread into a sleep state for a specified duration in milliseconds It is important to note that sleep() is a static method and can throw an InterruptedException.
public void interrupt() : làm gián đoạn tuyến thi hành
public static boolean isInterrupt(): kiểm tra xem tuyến có bị ngắt không
public void setpriority( int p) : ấn định độ ưu tiên cho tuyến thi hành, độ ưu tiên được xác định là một số nguyên thuộc đoạn [1,10]
Phương thức `public final void wait() throws InterruptedException` trong lớp cơ sở `Object` cho phép một tuyến (thread) chuyển vào trạng thái chờ cho đến khi có một tuyến khác thông báo, giúp quản lý luồng thực thi hiệu quả trong lập trình đa tuyến.
public final void notify () : đánh thức tuyến đang chờ đang chạy trên đối tượng này
public final void notifyAll () : đánh thức tất cả các tuyến đang chạy trên đối tượng này
isAlive () : Trả về True, nếu luồng là vẫn còn tồn tại (sống)
getPriority () : Trả về mức ưu tiên của luồng
join () : Ðợi cho đến khi luồng kết thúc
Những thuận lợi của lập trình đa luồng :
Sự đáp ứng trong lập trình đa luồng cho phép ứng dụng giao tiếp hoạt động liên tục ngay cả khi một phần của nó bị khóa hoặc đang thực hiện thao tác dài, từ đó nâng cao trải nghiệm người dùng Chẳng hạn, một trình duyệt web có thể vẫn tương tác với người dùng thông qua một luồng trong khi một hình ảnh đang được tải qua một luồng khác.
Chia sẻ tài nguyên giữa các luồng giúp tối ưu hóa việc sử dụng bộ nhớ và tài nguyên của các quá trình Việc này cho phép nhiều hoạt động của các luồng khác nhau hoạt động trong cùng một không gian địa chỉ, mang lại sự thuận lợi cho ứng dụng.
Kinh tế: cấp phát bộ nhớ và các tài nguyên cho việc tạo các quá trình là rất đắt
Các luồng chia sẻ tài nguyên của quá trình, giúp tiết kiệm chi phí hơn trong việc tạo và chuyển ngữ cảnh Mặc dù khó đánh giá sự khác biệt chi phí giữa việc tạo và duy trì một quá trình so với một luồng, nhưng thường thì quá trình sẽ tốn nhiều thời gian hơn Cụ thể, trong Solaris 2, việc tạo một quá trình chậm hơn khoảng 30 lần so với việc tạo một luồng, và chuyển đổi ngữ cảnh chậm hơn 5 lần.
Socket
Khái niệm Socket ra đời vào khoảng năm 1980 tại trường đại học Berkeley, Mỹ, với mục đích kết nối các máy tính để chúng có thể trao đổi thông tin qua mạng Ban đầu, Socket được sử dụng trên các hệ thống Unix và được gọi là Berkeley Socket Interface.
Socket đã trở thành một phần quan trọng trong sự phát triển của các ứng dụng mạng, được hỗ trợ bởi nhiều ngôn ngữ lập trình và hoạt động trên nhiều nền tảng hệ điều hành khác nhau.
Ví dụ như WinSock dùng cho các ứng dụng của Microsoft, Socket++ dùng cho các lập trình viên sử dụng Unix…
Socket được sử dụng trong truyền thông giữa các máy tính vì nó cung cấp một phương thức hiệu quả để thiết lập kết nối và trao đổi dữ liệu Để hiểu rõ hơn về tầm quan trọng của Socket, chúng ta cần xem xét bối cảnh lịch sử trước khi công nghệ này ra đời.
Trong hệ thống Unix, quá trình vào/ra dữ liệu được thực hiện theo mô hình ba bước: Open-Read/Write-Close Để bắt đầu, chương trình cần thiết lập một kết nối với tài nguyên như bàn phím, bộ nhớ hoặc file Sau khi kết nối thành công, chương trình có thể thực hiện các thao tác Read để đưa dữ liệu từ tài nguyên vào chương trình, hoặc Write để xuất dữ liệu đã xử lý ra tài nguyên Một ví dụ điển hình cho mô hình này là thao tác với file dữ liệu trong các ngôn ngữ lập trình, nơi lập trình viên thực hiện các bước tương tự để làm việc với file.
- Mở file cần sử dụng với các quyền thích hợp trên đó
- Thực hiện việc đọc dữ liệu từ file để xử lý hay đưa dữ liệu đã xử lý để ghi vào file
- Đóng file sau khi đã sử dụng xong
Trong hệ thống Unix, việc trao đổi dữ liệu giữa các chương trình và kết nối mạng được thực hiện theo mô hình 3 bước của vào/ra dữ liệu, giúp lập trình viên dễ dàng giao tiếp với các tầng bên dưới Để đạt được điều này, Socket được sử dụng như một điểm cuối trong kết nối giữa hai chương trình Mỗi chương trình sẽ tạo ra một Socket, cho phép chúng thực hiện việc trao đổi thông tin một cách hiệu quả Đối với lập trình viên, Socket được coi là tài nguyên hệ thống cần thiết cho giao tiếp, và quá trình giao tiếp với Socket tuân theo mô hình 3 bước tương tự như vào/ra dữ liệu Sự ra đời của Socket gắn liền với nhu cầu truyền thông máy tính, và sau đây sẽ là định nghĩa cụ thể về Socket.
Có nhiều định nghĩa khác nhau về socket tùy theo các nhìn của người sử dụng:
Một cách tổng quát nhất có thể định nghĩa một Socket là một điểm cuối trong một kết nối giữa hai chương trình đang chạy trên mạng
Socket là một phương pháp thiết lập kết nối truyền thông giữa chương trình yêu cầu dịch vụ (Client) và chương trình cung cấp dịch vụ (Server) trên mạng hoặc trên cùng một máy tính Đối với lập trình viên, Socket được xem như một giao diện giữa tầng ứng dụng và các tầng khác trong mô hình mạng OSI, có nhiệm vụ giao tiếp giữa chương trình ứng dụng và các tầng bên dưới của mạng.
Hiện nay, lập trình viên thường bị hạn chế trong việc tạo socket thủ công, bất kể là sử dụng Java, Servlet, CGI hay PHP, vì họ khó có thể mở cổng một cách trực tiếp Thay vào đó, họ thường sử dụng các thư viện socket có sẵn trong ngôn ngữ lập trình Mặc dù socket vẫn đóng vai trò quan trọng trong việc kết nối ứng dụng, nhưng các chi tiết kỹ thuật của chúng thường được ẩn giấu trong các lớp sâu hơn, giúp lập trình viên không cần can thiệp trực tiếp.
Khi hai ứng dụng cần trao đổi dữ liệu qua mạng, mỗi ứng dụng sẽ tạo ra một socket để thực hiện việc này Dữ liệu được trao đổi thông qua việc đọc và ghi từ socket Để hiểu rõ hơn về cách thức hoạt động của socket trong việc trao đổi dữ liệu, chúng ta cần xem xét nguyên lý hoạt động của chúng.
Các socket xác định lẫn nhau thông qua một định danh dạng số được gán khi chương trình tạo ra socket Số cổng này có thể được gán bởi chương trình hoặc hệ điều hành, tùy thuộc vào cách sử dụng socket Mỗi gói tin mà socket gửi đi chứa hai thông tin quan trọng để xác định đích đến của nó.
- Một địa chỉ mạng để xác định hệ thống sẽ nhận gói tin
- Một số định danh cổng để nói cho hệ thống đích biết socket nào trên nó sẽ nhận dữ liệu
Hai thông tin quan trọng giúp gói tin đến đúng máy tính là địa chỉ mạng và địa chỉ cổng của socket đích, đảm bảo gói tin được phân phối chính xác đến socket cần thiết.
Trong lập trình, các socket thường hoạt động theo cặp, với một socket đóng vai trò là client và socket còn lại là server Socket phía server xác định một cổng cho giao tiếp mạng và chờ nhận dữ liệu từ client thông qua socket client Do đó, các cổng của socket server cần được biết bởi các chương trình client Chẳng hạn, server FTP sử dụng một socket để lắng nghe tại cổng 21, vì vậy nếu một chương trình client muốn giao tiếp với server FTP, nó cần kết nối đến socket đang lắng nghe tại cổng 21.
Cổng của socket phía server được xác định bởi chương trình, trong khi cổng của socket phía client do hệ điều hành quyết định Khi socket phía client gửi gói tin tới socket phía server, gói tin này chứa thông tin về địa chỉ hệ thống và cổng của socket client, cho phép server gửi phản hồi chính xác đến client.
Chúng ta có thể khái quát quá trình trao đổi dữ liệu thông qua các socket như sau:
Chương trình phía Server tạo ra một socket và gắn nó với một cổng trên server Socket này, được gọi là socket phía server, sẽ chờ nhận yêu cầu từ phía client.
- Khi chương trình phía Client cần kết nối với một Server, nó cũng tạo ra một socket, socket này cũng được hệ điều hành gắn với một cổng
Chương trình Client sẽ cung cấp địa chỉ mạng và cổng của Socket phía Server cho Socket phía Client, yêu cầu thực hiện kết nối nếu sử dụng giao thức hướng kết nối, hoặc truyền dữ liệu nếu sử dụng giao thức không hướng kết nối.
Chương trình phía Server và Client giao tiếp qua Socket, nơi dữ liệu được đọc và ghi Các socket này nhận dữ liệu từ ứng dụng, đóng gói và gửi đi, hoặc nhận dữ liệu từ bên kia và chuyển tiếp cho ứng dụng Cả hai bên đều biết địa chỉ mạng và cổng của nhau để đảm bảo quá trình trao đổi diễn ra suôn sẻ.
HỆ THỐNG DOWNLOAD THỬ NGHIỆM
Giới thiệu
Trong đồ án tốt nghiệp đại học, em đã phát triển hệ thống Download bằng cách tận dụng những ưu điểm của các phần mềm Download mà em đã nghiên cứu, dựa trên mã nguồn mở của JDOWN để thực nghiệm mô hình Download.
Hệ thống Download sử dụng cơ chế multi-threading để tăng tốc độ tải xuống bằng cách chia nhỏ các file thành nhiều phần và tải xuống đồng thời Tối đa có thể chia file thành 20 phần để download cùng lúc, tuy nhiên tốc độ tải xuống còn phụ thuộc vào cấu hình kết nối Internet của từng máy và sự cho phép của server.
Để tải dữ liệu từ Internet, cần sử dụng socket của Server và Client Chương trình Server và Client giao tiếp thông qua việc đọc và ghi dữ liệu từ socket của họ Các socket này nhận dữ liệu từ ứng dụng, đóng gói để gửi đi hoặc nhận dữ liệu và chuyển tiếp cho ứng dụng Cả hai bên đều biết địa chỉ mạng và cổng của nhau để thực hiện quá trình này.
Hệ thống áp dụng cơ chế multi-threading để tối ưu hóa quá trình tải xuống chương trình Khi bắt đầu tải, Server sẽ kiểm tra chương trình và phân chia nó thành các luồng độc lập, thực hiện song song Cụ thể, một file có thể được chia thành tối đa 20 luồng, tuy nhiên, khả năng chia thành nhiều luồng phụ thuộc vào loại dữ liệu cần tải xuống.
Chức năng hệ thống
Hệ thống cho phép download dữ liệu trên các máy có cài sẵn Java với các chức năng:
- Thêm mới: Khi bạn nhấn chuột vào đường dẫn download trong trình duyệt, hệ thống sẽ tiến hành tải dữ liệu và tăng tốc công việc này
- Tạm dừng công việc download
- Phục hồi download: Hệ thống sẽ tiếp tục thực hiện công việc download đang còn dang dở mà bạn đã tạm dừng trước đó
- Danh sách Download: Khi download xong, hệ thống sẽ sắp xếp tự động các dữ liệu download theo các mục đã được định nghĩa trước
- Xóa dữ liệu ra khỏi danh sách Download
Hệ thống hỗ trợ HTTP Proxy cho phép nhiều máy tính truy cập Internet thông qua một máy chủ duy nhất, được gọi là Proxy Chỉ cần máy Proxy này có modem và tài khoản truy cập Internet, các máy client chỉ cần kết nối mạng LAN với máy Proxy để truy cập vào các địa chỉ yêu cầu.
Phân tích hệ thống
Hệ thống gồm các modulo: download, remote, ui, utils
- Download: Tại modulo này ta xây dựng các hàm nhằm:
Chia nhỏ các file gốc trên Server thành các Thread độc lập và song song (nếu server hỗ trợ) giúp tăng tốc độ tải xuống nhanh chóng và dễ dàng Khi các Thread này được tải về máy Client, hệ thống sẽ kết hợp chúng lại thành file có dung lượng chính xác như file gốc.
{ threads = new DownloadThread[threadCount]; int partSize = length / threadCount; int start, i; for (i = 0; i < threadCount - 1; i++) { start = partSize * i; threads[i] = new DownloadThread
( scrURL, proxyAddr, start, start + partSize- 1) ; } threads[i] = new DownloadThread(srcURL, proxyAddr, partSize * i, length - 1);
Kiểm tra công việc Download có hoàn tất hay không : synchronized public boolean isComplete() { return finished == threadCount;
Xác lập máy chủ Proxy Server và cổng của Proxy Server
Public void setProxy ( String host, int port )
{ proxyAddr = new InetSocketAddress ( host, port); }
Thi hành void run ( ) để thực hiện sự kết nối giả để bung nén các tiêu đề URL
Public void run ( ) { running = true;
URLConnection = urlConn; try { GlobalData.model.setDownloadStatus(srcURL, “Connecting ”);
If ( proxyAddr != null) { Proxy proxy = new Proxy ( Proxy.Type.HTTP, proxy Addr); urlConn = scrURL.openConnection ( proxy );
Cập nhật tình trạng các file đang tải xuống, bao gồm thông tin về việc tạm dừng và hoàn thành quá trình tải Hệ thống hiển thị tổng số Thread kết nối và trạng thái hoàn thành Khi người dùng tạm dừng tải dữ liệu, các Thread đang hoạt động cũng sẽ dừng lại và sẽ tiếp tục công việc khi tải được phục hồi.
Dừng Download, phục hồi công việc Download đã được tạm dừng trước đó
Lưu giữ, hiển thị các thông tin của file (chương trình ) đã được Download và đường dẫn nơi lưu trữ chương trình đó
Tại modulo này giúp người dùng có thể hủy công việc truyền tập tin khi không muốn thực hiện công việc Download bằng việc kích vào nút Cancel
Tạo ra Server Socket cần thiết để xử lý các yêu cầu từ máy chủ ở xa
Public LANHandler ( ) { try { ssock = ServerSocket(GlobalData.DATA_PORT); } catch (IOException e) { e.printStackTrace();
Socket được sử dụng để thiết lập kết nối truyền thông giữa chương trình yêu cầu dịch vụ (Client) và chương trình cung cấp dịch vụ (Server) trên mạng hoặc trên cùng một máy tính.
Tính tổng số Byte của file Download Chuyển đổi dung lượng của file (chương trình) thành Byte, KB, MB, GB private String toSizeString(long bytes) {
String unit = "Bytes"; float length = bytes; if (length >= 1024) { unit = "KB"; length /= 1024;
} if (length >= 1024) { unit = "MB"; length /= 1024;
} if (length >= 1024) { unit = "GB"; length /= 1024;
} return String.format("%.2f %s", length, unit);
Hiển thị lên các dòng thông báo để chọn khi Download như: “Do you want to overwrite it? ”, “ Overwrite Confirm ”,
Các URL trên mạng được download và yêu cầu download của người dùng được đáp ứng
- UI: modulo này tạo giao diện đồ họa cho Hệ thống cùng với các hộp thoại, tool, menu, button
Chương trình thực nghiệm
- Giao diện chính với các chức năng:
Add New, Pause, Resume, Delete, Resume All, Pause All trên tool và menu
Cập nhật các thông tin khi hoàn thành công việc Download
-Giao diện hệ thống khi Download một chương trình mới:
Khi tải xuống một chương trình mới, hệ thống sẽ tự động cập nhật URL và địa chỉ lưu trữ chương trình đã tải về trên máy, với số lượng Thread mặc định là 2.
Khi sử dụng HTTP Proxy: đánh địa chỉ máy Proxy Server để có thể download chương trình thông qua máy Proxy
- Hệ thống tiến hành công việc Download:
- Khi công việc Download thành công: Hệ thống hiện các dòng thông báo đã hoàn thành Download
- Yêu cầu: các máy chạy thử nghiệm phải cài đặt Java
- Chương trình ứng dụng demo được chạy thử tại phòng máy A101 trường ĐHDLHP
- Kết quả chạy thử bước đầu khá tốt, tạm thời chưa phát hiện được lỗi.