Một chương trình mạng được viết ra để các chương trình trên các máy tính khác nhau có thể truyền tin với nhau một cách hiệu quả và an toàn cho dù chúng được cài đặt trên mạng LAN, WAN ha
Trang 1PHẦN MỞ ĐẦU
¾ Lý do chọn đề tài
Việt nam là một quốc gia đang phát triển, có vị trí chiến lược trong khu vực, Việt Nam là một trong những quốc gia hòa bình nhất trên thế giới (GPI) đứng thứ 39 trên toàn cầu và đứng thứ hai, sau Singapore, tại khu vực Nam Á và Đông Nam Á, đồng thời cũng là nơi có vị trí chiến lược ở Đông Nam Á, Châu Á nói riêng và trên thế giới nói chung, bên cạnh đó chúng ta vừa mới gia nhập WTO Chính vì vậy mà nước ta đã thu hút được rất nhiều các nhà đầu tư kinh doanh trong và ngoài nước, nhưng cũng là lúc một thách thức mới mở ra đối với tất cả các đơn vị kinh doanh nói riêng và với các doanh nghiệp tại Việt Nam nói chung
Để phát triển và tồn tại trong giai đoạn này, chúng ta không thể không nghĩ tới lợi ích của Quảng cáo Vấn đề ở đây là Quảng cáo nên bắt đầu từ đâu? thể hiện
nó như thế nào? chi phí ra sao? đó chính là câu hỏi cần được giải đáp
Việt Nam, một thị trường đặc biệt với nhiều cơ hội nhưng cũng rất nhiều đặc trưng riêng là một thách thức không nhỏ cho các nhà kinh doanh đầu tư trong và ngoài nước Để có thể kinh doanh thành công, bạn cần phải am hiểu sâu sắc về hành vi của người tiêu dùng văn hóa truyền thống, các yếu tố về pháp lý và cơ
sở hạ tầng về khả năng ứng dụng kiến thức quảng cáo quốc tế sao cho phù hợp nhất Không ít hoạt động quảng cáo với chi phí lớn của các doanh nghiệp hàng đầu thế giới đã thất bại hoặc không hiệu quả, gây tổn thất lớn cho nhà đầu tư vì các mô hình kiến thức quốc tế không thích ứng được hoàn toàn với đặc trưng riêng của thị trường Việt Nam Đối với các doanh nghiệp vừa và nhỏ trong nước, việc xây dựng thương hiệu, quảng bá sản phẩm và công tác quảng cáo thật sự rất mới mẻ trong khi do chi phí cho các hoạt động quảng cáo lại rất lớn, đã làm lúng túng rất nhiều doanh nghiệp! Việc bỏ ra chi phí lớn trong khi hiệu quả của các hoạt động tiếp thị thường không đến ngay tức khắc đã dẫn đến việc không ít doanh nghiệp xây dựng thương hiệu, quảng cáo sản phẩm mang tính phong trào
Trang 2Trong thời đại công nghệ thông tin Internet ngày càng phát triển như hiện nay, các phương thức quảng cáo và marketing truyền thống bắt đầu trở nên “chật chội” hơn
• Điện thoại trực tiếp (direct telefone): Có hiệu quả tác động cao nhất so với
những phương tiện khác Do bạn được trực tiếp trao đổi với khách hàng nên
có cơ hội lớn để giới thiệu chi tiết về sản phẩm dịch vụ và tìm hiểu được chính xác nhu cầu và mong muốn của khách hàng, ngoài ra bạn cũng có thể xây dựng mối quan hệ và chiếm được thiện cảm của khách hàng hoặc có thể bán ngay được sản phẩm Trong trường hợp này khách hàng thường trả lời rất chính xác nhu cầu và mong muốn của họ, qua đó bạn có thể chuẩn bị cho các bước bán hàng và quảng cáo tiếp theo Tuy nhiên, chi phí quá đắt, chỉ tiếp cận được một số ít khách hàng và có thể làm mất thời gian của khách hàng dẫn đến khách hàng có ác cảm, bạn cần tình toán thời gian nào thì phù hợp với từng ngành nghề, từng khách hàng khác nhau và hỏi ý kiến họ trước khi trao đổi
• Thư trực tiếp (direct mail): Có hiệu quả tác động cao gần nhất so với những
phương tiện khác Do được gửi dưới dạng thư riêng, người nhận sẽ bóc và đọc ngay thông điệp của bạn.Tuy nhiên cách này có thể hơi tốn kém do chi phí được tính trên mỗi thư riêng cho từng người mà bạn muốn gửi thông điệp
• Tivi: Cũng là một cách quảng bá đến những khán giả “bất đắc dĩ” phải tiếp
nhận thông điệp của bạn Sự thật là khán giả thường chuyển kênh ngay khi nhìn thấy quảng cáo và hiện nay có rất nhiều kênh truyền hình (64 + VTV + VTC + capble xấp xỉ 100 kênh) nên nếu khán giả rảnh rỗi và đang ngồi trước mành hình, tay nhăm nhe chiếc điều khiển thì họ chuyển kênh rất nhanh Hơn nữa, chi phí cho một đoạn quảng cáo trên TV có thể đắt hơn nhiều so với trên Radio (ví dụ giờ C11 trên VTV/30” là 55 triệu)
• Radio: Có thể tạo ấn tượng và tác động đến khán giả dễ dàng hơn là những
mục quảng cáo được in trên báo Người nghe bắt buộc phải tiếp nhận thông
Trang 3điệp của bạn nếu họ không muốn chuyển sang đài khác thường rất mất thời gian hoặc tắt radio Chi phí có thể tương đương với quảng cáo trên báo in, song nó có ý nghĩa hơn (tùy từng nhóm đối tượng cụ thể, ví dụ khách hàng tại các vùng núi, vùng nông thôn hay những sản phẩm liên quan đến nông nghiệp hoặc liên quan chặt chẽ tới đời sống của họ)
• Báo: Quảng cáo trên báo có lẽ là cách rẻ nhất để đến được với rộng rãi công
chúng Song do số lượng các mẩu quảng cáo lại quá nhiều nên dễ làm cho người đọc rối mắt Thông thường, độc giả sẽ đọc lướt qua tờ báo Nếu có ghé mắt qua một mẩu quảng cáo nào đó, họ cũng sẽ chỉ liếc sơ phần tiêu đề (headline) và bỏ qua phần chữ bên dưới
• Tạp chí: Đối với tạp chí, hiệu quả lôi cuốn sự chú ý của người đọc có phần
khá hơn Độc giả có khuynh hướng đọc kỹ tạp chí hơn là báo Ngoài ra, do số lượng các mẩu quảng cáo trên tạp chí không nhiều nên cơ hội để độc giả ghé mắt qua quảng cáo của bạn cũng cao hơn và mức độ lặp lại cao hơn do thời gian sử dụng của tạp chí dài hơn Tuy nhiên, quảng cáo trên tạp chí đắt hơn so với trên báo
• Quảng cáo ngoài trời (Pano): Quảng cáo ngoài trời và trên đuờng phố rất dễ
đập vào mắt mọi người Tuy nhiên, dù dễ nhìn thấy, song không mấy ai dành nhiều thời gian để đọc nó Nếu chọn hình thức này, thông điệp của bạn phải hết sức ngắn gọn, súc tích và chủ yếu là quảng cáo thương hiệu hay tên công
ty, lĩnh vực kinh doanh hoặc hình ảnh sản phẩm
• Tờ rơi, tờ gấp: Chi phí rẻ, đơn giản, dễ kiểm soát và đo được hiệu quả nhưng
hình thức này chỉ phù hợp với Advertising Location như khai trương, khánh thành, khuyến mãi…
Bởi vậy, các nhà quảng cáo cũng đang tìm kiếm và thay đổi các phương thức quảng cáo cho thân thiện và dễ thu hút người dùng Thời đại bùng nổ về công nghệ thông tin và Internet hiện nay thì việc Quảng cáo là hoàn toàn dễ dàng, mang lại được hiệu quả cao, chi phí thấp Đến với Internet là các bạn đã tiếp xúc
Trang 4được với toàn thế giới và rất nhiều những cơ hội mới Sở hữu thương hiệu mạnh
là điều mong ước của tất cả doanh nghiệp Tuy nhiên xây dựng thương hiệu là một đầu tư khá vô hình trong khi đòi hỏi nhiều nguồn lực và tiền bạc Việc đầu
tư sẽ rất lãng phí nếu thiếu chiến lược đúng đắn Hiểu được mong muốn của các
doanh nghiệp, vì vậy chúng tôi đã “xây dựng hệ thống quảng bá thông tin Media qua mạng” với những tính năng ưu điểm vượt trội nhằm giúp cho doanh
nghiệp quảng cáo hiệu quả nhất trong điều kiện của doanh nghiệp
• Hệ thống có thể đặt ở bất cứ nơi đâu có hệ thống internet: công viên, siêu thị, bệnh viện, bến xe,
• Cơ sở vật chất thấp, chỉ cần 1 server, 1 client có cấu hình pentium 4 là có thể triển khai
• Quảng bá thông tin media gồm các dạng như sau: video, audio, text, image
• Cập nhật thông tin cần quảng cáo mọi lúc
• Tùy chỉnh thời gian hiển thị cho từng nội dung quảng cáo
• Lập lịch cho chương trình
¾ Tổng quan lịch sử nghiên cứu của đề tài
Với mong muốn sử dụng triệt để hiệu quả của giao thức truyền Multicast, Unicast, Client/Server trong các ứng dụng thực tiễn Đã có nhiều bài viết, nhiều công trình nghiên cứu về vấn đề này Tất cả những bài viết, những công trình nghiên cứu ấy đều hướng tới việc tìm hiểu, xây dựng các chương trình thực hiện các ứng dụng từ giao thức truyền Multicast, Unicast, Client/Sever Từ đó đã tạo
ra nhiều sản phẩm đáp ứng nhu cầu ngày càng cao của thời đại công nghệ số Những công trình nghiên cứu ấy là tâm huyết của nhiều học viên, sinh viên, kỹ
sư, giáo viên, của các nhà khoa học có tâm huyết với nghề nghiệp
“Xây dựng hệ thống đào tạo điện tử dựa trên công nghệ IP Multicast”
(luận văn thạc sỹ của kỹ sư Trần ngọc Sơn): luận văn xây dựng thử hệ thống truyền video qua giao thức IP multicast Trong hệ thống đa sử dụng webcam để
Trang 5tạo luồng dữ liệu thời gian thực, sử dụng phần mềm Vic (Videoconferencing
của nó là việc giảm tải băng thông khi truyền tin
Hình 1: Kết quả trên máy Server(máy phát)
Hình 2: Kết quả máy Client (máy nhận)
Trang 6“Xây dựng hệ thống Ip Multicast cho công ty TNHH – DV Thủy Vân” (đồ
án tốt nghiệp của sinh viên Huỳnh Công Ân, Nguyễn Thị Ngoạc Phượng trường
Kỹ Thuật Công Nghệ) xây dựng hệ thống mạng Ip Multicast để phân phối dữ liệu theo từng nhóm phòng ban, từng bộ phận riêng để áp dụng trong việc phân phối dữ liệu
Đồ án “Ứng dụng chia sẻ video trong mạng lan” (bài báo cáo năm 2010 của
sinh viên: Nguyễn ái Lành, Nguyễn Thanh Liêm) được xây dựng nhằm mục đích chia sẻ video giữa server và client Khi các máy client kết nối vào server thì các client sẽ nhận được các đoạn video đang chiếu tại server và hiển thị trên màn hình ở phía client Client kết nối vào server tại 1 thời điểm sẽ xem được trực tiếp nội dung video đang chiếu tại server
¾ Mục tiêu nghiên cứu
• Xây dựng hệ thống quảng bá thông tin Media qua mạng
• Xây dựng chương trình Client/Server sử dụng kỹ thuật truyền Unicast, Multicast bằng ngôn ngữ lập trình Java
¾ Phạm vi nghiên cứu
Nhóm sử dụng ngôn ngữ lập trình Java để xây dựng một chương trình Server
và một chương trình Client để quảng bá thông tin media gồm các dạng : video, audio, text, image
Lý do lựa chọn ngôn ngữ lập trình Java để thực hiện là vì ngôn ngữ Java là một ngôn ngữ lập mình mạng tốt ,nó có những ưu điểm như:
• An ninh
• Giao diện lập trình ứng dụng chuẩn - Core API
• Tương thích với nhiều kiểu phần cứng
• Đặc tính động và phân tán
• Hướng đối tượng
Trang 7• Đa luồng (multi-threads)
• Quản lý bộ nhớ và quá trình thu dọn 'rác'
¾ Phương pháp nghiên cứu
• Tìm hiểu các đề tài liên quan đến lập trình UDP và TCP
• Tìm hiểu phương pháp lập trình hướng đối tượng với Java
• Tham khảo các ví dụ liên quan đến đề tài
• Tham khảo các nguồn tài liệu khác trên internet
¾ Điểm mới của đề tài
Theo tìm hiểu thì ở Việt Nam cũng đã có một nhóm làm về “ứng dụng chia sẻ video trong mạng lan” Hạn chế của đề tài này là chưa làm được chức năng gửi nhiều video cùng lúc Từ đó chúng tôi đưa ra các điểm mới của đề tài:
• Có thể chia sẻ được nhiều loại định dạng: text, doc, mp3, gif, hình ảnh, video
• Server có thể tùy chỉnh thời gian hiển thị cho từng file
• Cập nhật thời gian và dữ liệu cho Client
• Trường hợp Client nhận thiếu sẽ phản hồi lại Server và Server gửi lại dữ liệu bị mất
• Tổng hợp nhật ký truyền dữ liệu vào file log
• Tùy chọn gửi file và thời gian cho từng Client
• Lập lịch cho chương trình
¾ Kết cấu của đề tài
CHƯƠNG I: TỔNG QUAN ĐỀ TÀI
Chương này chúng ta tìm hiểu tổng quan về lập trình mạng, Client/Server, kỹ thuật lập trình Unicast, Multicast với ngôn ngữ Java
Trang 8CHƯƠNG II: XÂY DỰNG CHƯƠNG TRÌNH
Phân tích chức năng của chương trình, tìm hiểu các gói thư viện sử dụng trong chương trình, xây dựng các module của chương trình và viết code
CHƯƠNG III: KẾT QUẢ ĐẠT ĐƯỢC
Các chức năng đạt được sau khi hoàn thiện chương trình
Trang 9CHƯƠNG I: TỔNG QUAN ĐỀ TÀI 1.1 Tổng quan về lập trình mạng
1.1.1, Khái niệm lập trình mạng [1]
Lập trình mạng là một trong những nhiệm vụ căn bản để phát triển các ứng dụng doanh nghiệp Một chương trình mạng được viết ra để các chương trình trên các máy tính khác nhau có thể truyền tin với nhau một cách hiệu quả và an toàn cho dù chúng được cài đặt trên mạng LAN, WAN hay mạng toàn cầu Internet, đây là điều căn bản đối với sự thành công của nhiều hệ thống Mạng máy tính Là tập hợp các máy tính hoặc các thiết bị được nối với nhau bởi các đường truyền vật lý và theo một kiến trúc nào đó
1.1.2, Phân loại mạng theo quy mô [1]
• Mạng LAN (Local Area Network)là hệ truyền thông tốc độ cao được thiết kế để các kết nối máy tính và các thiết bị xử lý dữ liệu khác cùng hoạt động với nhau trong một khu vực địa lý nhỏ như một tầng của một tòa nhà, hoặc một tòa nhà, một số mạng LAN có thể kết nối với nhau trong một khu làm việt
• Mạng WAN (Wide Area Networks) là mạng được thiết lập để liên kết các máy tính của hai hay nhiều khu vực khác nhau, khoảng cách xa về mặt địa lý, như giữa các quận trong một thành phố, hay giữa các thành phố hay các miền trong nước Mạng WAN phụ thuộc vào nhiều yếu tố như: giải thông và chi phí cho giải thông, chủ quản của mạng, đường đi của thông tin trên mạng WAN có thể kết nối thành mạng riêng của một tổ chức, hay có thể phải kết nối qua nhiều hạ tầng mạng công cộng và của các công ty viễn thông khác nhau nhiều mạng LAN kết nối với nhau tạo thành mạng WAN
• Mạng MAN (Metropotilan Area Network), tương tự như WAN,
nó cũng kết nối nhiều mạng LAN Tuy nhiên, một mạng MAN có
Trang 10phạm vi là một thành phố hay một đô thị nhỏ MAN sử dụng các mạng tốc độ cao để kết nối các mạng LAN của trường học, chính phủ, công ty, , bằng cách sử dụng các liên kết nhanh tới từng điểm như cáp quang
• Khi nói đến các mạng máy tính, người ta thường đề cập tới mạng xương sống (backbone) Backbone là một mạng tốc độ cao kết nối các mạng có tốc độ thấp hơn Một công ty sử dụng mạng backbone để kết nối các mạng LAN có tốc độ thấp hơn Mạng backbone Internet được xây dựng bởi các mạng tốc độ cao kết nối các mạng tốc độ cao Nhà cung cấp Internet hoặc kết nối trực tiếp với mạng backbone Internet, hoặc một nhà cung cấp lớn hơn
là địa chỉ IP (IP address) có vai trò tương tự số điện thoại, chẳng hạn máy tính có tên là www.microsoft.com sẽ có địa chỉ IP là 207.46.230.219 Các số
IP này là duy nhất và không máy nào được trùng nhau (trên toàn thế giới) Khi bạn muốn máy của mình có địa chỉ IP để tham gia vào hệ thống Internet toàn cầu như là một máy chủ (host hay server) ta phải đăng ký với tổ chức quốc tế InterNIC (Internet Network Information Center) để nhận được một số
IP riêng biệt
Vậy tại sao vừa có địa chỉ IP lại vừa có tên riêng cho từng máy? Dùng cái nào để xác định liên lạc với một máy chủ (như ở trên, ta nên dùng
Trang 11www.microsoft.com hay số 207.46.230.219 để kết nối với một máy chủ của công ty Microsoft) Thật ra tên và địa chỉ IP là một, nhưng địa chỉ IP được ghi bằng số, còn tên của máy chủ lại được ghi bằng chữ có ý nghĩa và gần gũi hơn với con người Với mỗi hệ thống đều có sự chuyển đổi trực tiếp từ tên vùng thành địa chỉ IP thích hợp trước khi dữ liệu được gửi đi
Ví dụ đối với Windows có thể tham khảo hai tập tin HOSTS và LMHOSTS đây là hai tập tin văn bản (được coi như một cơ sở dữ liệu) để lưu trữ tập hợp các số IP cùng với tên tương ứng Ta có thể tự thêm vào địa chỉ IP
và tên máy chủ cách nhau bằng khoảng trắng Khi có nhu cầu truy cập đến một máy ở xa qua giao thức mạng TCP/IP nếu gõ vào tên máy chủ thì hệ thống sẽ tự tìm địa chỉ IP tương ứng trong tập tin này:
Trước đây mỗi máy có thể tự mình lưu trữ một tập tin chứa phần lớn các tên và địa chỉ của những máy chủ thông dụng (như trong Windows là tập tin HOSTS và LMHOSTS), nhưng ngày nay ta không làm như vậy nữa mà đa số các tên vùng cũng như địa chỉ IP được lấy xuống từ các máy chủ DNS Khi đọc tên vùng của một máy chủ ta đi từ trái qua phải Ví dụ:
Trang 12Java.sun.com
tên máy tính tên tổ chức tên vùng
Nói chung là theo quy ước từ phần riêng biệt nhất đến phần chung nhất Tuy nhiên không bắt buộc là như vậy, ta vẫn có thể đặt tên theo cách khác, không nhất thiết là chỉ gồm 3 hay 4 nhóm (ví dụ: here.is.along.name.address.co.vn là hợp lệ) bởi vì cuối cùng thì tên vùng
cũng được hệ thống DNS chuyển thành địa chỉ IP mà thôi
1.1.3.2, Giao thức TCP và UDP [ 4 ]
Quá trình chuyển dữ liệu trên mạng là khá phức tạp Chi tiết quá trình này diễn ra tương tự như trong thực tế ta gửi thư hay bưu phẩm, trước hết phải ghi rõ địa chỉ nơi đến (trường hợp này là địa chỉ IP của máy chủ), sau đó có thể gửi thông thường hoặc gửi bảo đảm (tùy theo cách gửi mà thư hay bưu phẩm có chắc chắn đến được tay người nhận hay không), người nhận sau khi nhận được có thể hồi âm trả lời là đã nhận đủ hoặc bị mất mát gì đó trong quá trình chuyển tải Người gửi có thể gửi tiếp những phần bị mất (hoặc không cần gửi nữa)
Cách chuyển dữ liệu bảo đảm dựa vào giao thức TCP (Transmission Control Protocol), còn cách truyền không đảm bảo dựa vào giao thức UDP (User Datagram Protocol)
Giao thức TCP gửi từng gói dữ liệu đi, nơi nhận theo giao thức này phải có trách nhiệm thông báo và kiểm tra xem dữ liệu đã đến đủ hay chưa,
có lỗi hay không có lỗi Trước khi chuyển dữ liệu bao giờ cũng có sự kết nối giữa máy gửi và máy nhận Do phải đảm bảo dữ liệu được truyền chính xác và luôn duy trì kết nối nên sử dụng giao thức TCP cần chiếm thêm một số tài nguyên của hệ thống và cách lập trình cho giao thức này hơi khó (phải thực
Trang 13hiện các bước kiểm tra dữ liệu theo yêu cầu của TCP) Truyền dữ liệu theo
TC thường áp dụng cho các dịch vụ như truyền tập tin, các dịch vụ trực tuyến trên Internet đòi hỏi độ tin cậy cao
Giao thức UDP ngược lại không đáng tin cậy lắm, không có sự kết nối trước nào giữa nơi gửi và nơi nhận, dữ liệu gửi đi mặc định rằng máy tính ở đầu nhận luôn ở trạng thái sẵn sàng để tiếp đón dữ liệu gửi đến Nếu dữ liệu gửi đến bị lỗi trong quá trình truyền hay không nhận được đầy đủ giao thức UDP cũng không có thông tin phản hồi gì lại cho nơi gửi Tuy nhiên UDP không đòi hỏi sự chính xác cao như dịch vụ thông báo giờ, tỉ giá hay các dịch
vụ gửi nhắn tin …
1.1.4, Giao tiếp theo mô hình khách/chủ (Client/Server) [ 4 ]
Có rất nhiều dịch vụ hỗ trợ trên Internet như e-mail, nhóm tin (newsgroup), chuyển tập tin (file transfer), đăng nhập từ xa (remote login), truy tìm các trang Web Những dịch vụ này được tổ chức và kiến trúc theo mô hình khách/chủ (mô hình Client/Server) Các chương trình ở máy khách (client) như trình duyệt (Web Browser) hay chương trình gửi nhận e-mail sẽ tạo ra kết nối (connection) với một máy chủ ở xa (server) sau đó gửi các yêu cầu đến máy chủ, các chương trình dịch vụ trên máy chủ như Web server hay Mail server sẽ xử lý những yêu cầu này và gửi kết quả ngược về cho máy khách (chẳng hạn Web theo địa chỉ mà máy khách đưa đến còn Mail server thì lưu giữ và gửi về cho máy khách những bức e-mail mới) Thông thường một dịch vụ trên máy chủ phục vụ cho rất nhiều khách
1.1.5, Lập trình mạng thông qua Socket
Như vậy trước khi yêu cầu một dịch vụ trên máy chủ thực hiện điều gì đó, máy khách (client) phải có khả năng kết nối được với máy chủ Quá trình kết nối này được Java thực hiện thông qua một cơ chế trừu tượng hóa gọi là Socket (tạm gọi là “cơ chế ổ cắm”) Kết nối giữa máy khách và máy chủ tương tự như việc cắm phích điện vào ổ cắm điện Máy khách thường được coi như phích cắm điện
Trang 14còn máy chủ được coi như ổ cắm điện, một ổ cắm có thể cắm vào đó nhiều phích điện khác nhau cũng như một máy chủ có thể kết nối và phục vụ cho rất nhiều máy khách [4]
Nếu kết nối socket thành công thì máy khách và máy chủ có thể trao đổi dữ liệu với nhau thực hiện các yêu cầu về dịch vụ trên máy chủ Việc kết nối theo cơ chế socket cần biết hai thông tin chủ yếu đó là địa chỉ của máy cần kết nối và số hiệu cổng của chương trình dịch vụ Java cung cấp lớp Socket (thường được dùng như “phích cắm điện” cho máy khách) và lớp ServerSocket (thường được dùng như “ổ cắm điện” đặt trên máy chủ) Hai lớp này được đặt trong gói thư viện Java.net [4]
Cách thức truyền nhận dữ liệu qua socket: [3]
Hình 1.1: Cách truyền và nhận gói tin thông qua mạng
Có thể thấy rằng để xây dựng một gói tin datagram, đối tượng phải được chuyển thành một mảng byte Việc chuyển đổi này rất khó để thực hiện nếu bản thân đối tượng có liên quan đến một số đối tượng phức tạp trong đồ thị đối tượng.[3]
Hình 1.1 minh họa dòng luân chuyển dữ liệu khi truyền một đối tượng thông qua một datagram Dưới đây là bảy bước ta cần thực hiện để cài đặt mô hình truyền dữ liệu cho giao thức UDP.[3]
• Bước 1 Chuẩn bị: Tạo đối tượng cần truyền đi, giả sử đối tượng này là obj,
làm cho nó khả tuần tự bằng cách thực thi giao tiếp Serializable
Trang 15• Bước 2 Tạo một luồng ByteArrayObjectOuput và đặt tên cho nó là baos
• Bước 3 Xây dựng đối tượng ObjectOuputStream và đặt tên cho nó là oos Tham số cho cấu tửObjectOuputStream là baos
• Bước 4 Ghi đối tượng obj vào luồng baos bằng cách sử dụng phương
thức writeObject() của oos
• Bước 5 Tìm kiếm vùng đệm dữ liệu mảng byte từ bằng cách sử dụng
phương thức toByteAray()
• Bước 6 Xây dựng đối tượng DatagramPacket và đặt tên là dp với dữ liệu
đầu vào là vùng đệm dữ liệu đã tìm được ở bước 5
• Bước 7 Gửi dp thông qua DatagramSocket bằng cách gọi phương thức send() của nó
1.2 Tổng quan về ngôn ngữ lập trình Java
1.2.1, Lịch sử Java [4]
Chúng ta biết đến Sun Microsystems như một nhà sản xuất phần cứng với các trạm làm việc UNIX Trên thực tế, hãng Sun cũng phát triển phần mềm, đặc biệt nổi tiếng là hệ điều hành Solaris và hệ thống tập tin mạng (Network File System
- NFS) Năm 1990, Sun Microsystems bắt đầu thực hiện dự án có tên gọi Green nhằm phát triển phần mềm trong các thiết bị điện tử dân dụng James Gosling, chuyên gia lập trình phần mềm mạng được giao trách nhiệm thực hiện dự án Ban đầu, Gosling sử dụng C++ để viết phần mềm điều khiển, hiển thị số cho thiết bị như VCR (Video Cassette Recorder), PDA (Personal Digital Assistant) Nhưng ngay sau đó, Gosling phát hiện ra rằng C++ không phải là ngôn ngữ thích hợp cho công việc này Ngôn ngữ C++ đủ mềm dẻo để điều khiển hệ thống, nhưng nó lại dễ gây ra những lỗi dẫn đến treo hệ thống Một cách chi tiết hơn, C++ xâm nhập trực tiếp đến tài nguyên hệ thống, yêu cầu người lập trình phải tự mình quản lý các tài nguyên này Điều này tạo thành một rào cản không cho C++
Trang 16trở thành một công cụ viết các phần mềm có độ tin cậy cao, tính tương thích lớn, đặc biệt trong việc điều khiển các thiết bị điện tử dân dụng
Gosling giải quyết vấn đề này bằng cách tạo ra một ngôn ngữ lập trình mới có tên là Oak Ngôn ngữ này có cú pháp giống như C++, nhưng bỏ qua các tính năng "nguy hiểm" của C++ như truy cập trực tiếp tài nguyên hệ thống, các phép toán với con trỏ, nạp chồng tác tử Oak được thiết lập với mục đích tạo tính tương thích cao (chạy trên nhiều loại chip khác nhau), giúp các nhà sản xuất thiết
bị có thể thay đổi kiểu phần cứng mà không phải viết lại phần mềm trước đó Khi ngôn ngữ Oak trưởng thành, World Wide Web cũng đang bước vào thời
kỳ phát triển mạnh mẽ, và đội ngũ phát triển phần mềm của Sun thấy rằng đây cũng là ngôn ngữ đặc biệt thích hợp cho Internet Vào năm 1994, họ đã đưa ra WebRunner, một trình duyệt Web viết bằng Oak (sau này trình duyệt này được đổi tên thành HotJava và hiện nay vẫn đang được tiếp tục phát triển)
Cuối cùng, vào năm 1995, Oak được đổi tên thành Java (do mục đích thương mại) và đưa ra trình diễn tại SunWorld 95 Từ đó đến nay, Java nhanh chóng phát triển Thậm chí trước khi trình dịch Java đầu tiên được đưa ra vào tháng 1 năm 1996, Java đã được coi là một chuẩn công nghiệp cho Internet
Trong 6 tháng đầu năm 1996, nhiều nhà sản xuất phần mềm cũng như phần cứng đứng đầu thế giới đã mua bản quyền công nghệ Java từ Sun, bao gồm Adobe, Asymetrix, Borland, IBM, Macromedia, Metrowerks, Microsoft, Novel, Oracle, Spyglass và Symantec Các hãng này sẽ kết hợp Java vào các sản phẩm của họ như: các phần mềm, hệ điều hành, công cụ phát triển
1.2.2, Cấu trúc của Java [4]
Sức mạnh Java có được chính là nhờ cấu trúc của nó Java được thiết kế nhằm mục đích trước hết là đơn giản hoá công việc của người lập trình Kế đến, do nhu cầu chạy trên mạng, Java phải thật sự an toàn và ổn định, cũng như có khả năng làm việc được với nhiều kiểu phần cứng, phần mềm khác nhau Cấu trúc ngôn ngữ Java thực sự đã đảm bảo được tất cả các tính năng trên
Trang 17Cũng như các ngôn ngữ lập trình khác, Java cần một trình biên dịch để chuyển đổi mã lệnh cho người đọc (mã nguồn) sang ứng dụng thực thi được Các trình biên dịch thông thường như Microsoft Visual C++ cho Windows 95 sẽ biên dịch chương trình sang mã lệnh thực hiện trên một loại phần cứng nhất định nào đó (trong trường hợp này là mã lệnh cho Intel x86) Trái lại, trình biên dịch Java lại chuyển chương trình nguồn Java thành các bytecode Các bytecode này chỉ có thể chạy được trên máy ảo Java (Java Virtual Machine -JVM)
Lưu ý: Hiện nay, máy ảo Java (JVM) mới được tạo dựng bằng phần mềm chứ không phải phần cứng Sun Microsystems và một số công ty điện tử khác đang tiến hành nghiên cứu phát triển chip picoJava, nhằm mục đích tạo máy ảo Java bằng phần cứng Các chip này cho phép đưa Java vào các thiết bị điện tử một cách dễ dàng hơn, đồng thời làm tăng tốc độ tối đa cho các JVM viết bằng phần mềm
Bộ Java Developers Kit (JDK) do Sun cung cấp bao gồm một số chương trình tiện ích cho phép bạn biên dịch, bắt lỗi và tạo tài liệu cho một ứng dụng Java Hiện nay trên thị trường đang có rất nhiều môi trường phát triển Java của hãng thứ ba rất tiện lợi (như Visual J++, Symantec Cafe, ), nhưng tất cả các chương trình này đều dựa trên nền JDK Các trình tiện ích của JDK bao gồm:
• javac: Bộ biên dịch Java: Làm nhiệm vụ chuyển mã nguồn Java sang bytecode
• java: Bộ thông dịch Java: Thực thi các ứng dụng Java trực tiếp từ tập tin lớp (class)
• appletviewer: Một trình thông dịch Java thực thi các Java applet từ tập tin HTML
• javadoc: Tạo tài liệu dạng HTML từ mã nguồn cùng với các chú thích bên trong
Trang 18• jdb (Java debuger): Cho phép bạn thực hiện từng dòng trong chương trình, đặt các điểm dừng (breakpoint), xem giá trị các biến
• javah: Tạo ra tập tin header của C cho phép C gọi hàm Java hoặc ngược lại
• javap: Trình dịch ngược java (disassembler): Hiển thị các hàm và dữ liệu truy cập được bên trong một tập tin lớp đã dịch Nó cũng cho phép hiển thị nghĩa của bytecode
Quá trình biên dịch Java như sau: mã nguồn trong các tập tin *.java, qua trình biên dịch javac được chuyển thành các bytecode Bytecode nằm trong tập tin
*.class, được gọi là tập tin lớp (bởi mỗi tập tin chứa một lớp riêng biệt của Java) Các ứng dụng Java có thể bao gồm nhiều lớp khác nhau
Chú ý: Một lớp (class) của Java cũng giống hệt như một lớp trong C++ Lớp chính là các biến dữ liệu và thủ tục kết hợp với nhau thành một khối
Khi thực hiện chương trình Java, máy ảo Java sử dụng trình nạp lớp (class loader) để đọc các bytecode từ đĩa hoặc kết nối mạng Các lớp được nạp sẽ phải
đi qua trình kiểm tra lớp (class verifier) để chắc chắn rằng chúng sẽ không sinh ra các lỗi ảnh hưởng đến hệ thống khi thực thi Quá trình kiểm tra này làm tăng thời gian nạp một lớp, tuy nhiên nó chỉ phải thực hiện có một lần mà thôi
Phần thực hiện (execution unit) trong máy ảo Java sẽ thực thi các lệnh quy định trong từng bytecode Bộ phận thực thi đơn giản nhất là một trình thông dịch, chuyển đổi từng bytecode sang các thủ tục cần làm trên từng hệ thống Cách này rất chậm vì trình thông dịch luôn phải tra nghĩa của bytecode mà nó thực thi Để khắc phục nhược điểm này, người ta đưa ra trình biên dịch Just-in-time (JIT): Quá trình chuyển đổi từ bytecode sang mã lệnh riêng của từng hệ thống sẽ được làm luôn một lần ngay khi nạp chương trình, do đó tăng được tốc độ đáng kể Chương trình viết bằng Java có thể là ứng dụng riêng biệt (stand-alone application), hay là ứng dụng kí sinh trên Web (applet) hoặc đồng thời cả hai Applet là chương trình được nhúng trong trang Web, được đọc và thực hiện bởi
Trang 19trình duyệt hỗ trợ Java (Java-enabled Web browser) Khi trình duyệt đọc tới trang Web này, applet sẽ được thực thi Trái lại, một ứng dụng Java riêng biệt được chạy bằng dòng lệnh (java Tên-lớp-cần-thực-thi Tham-số), không cần thông qua trình duyệt Web
Một trình duyệt Web hỗ trợ Java (Java-enabled browser) có máy ảo Java riêng Hiện nay, các trình duyệt hỗ trợ Java như vậy khá nhiều: Netscape 2.0 trở lên, HotJava, Microsoft Internet Explorer 3.0 (bản beta 2 trở lên), Các trang Web nhúng Java applet có chứa đường dẫn kiểu URL tới tập tin lớp chính của applet đó Trình duyệt chỉ việc khởi động máy ảo Java và cung cấp cho trình nạp lớp đường dẫn này Chú ý rằng mỗi lớp đều đưa ra tên của các lớp phụ nó cần, do
đó trình nạp lớp phải nạp một số lớp phụ khác trước khi thực hiện chương trình
Trang 20nó còn giúp tách biệt hoạt động của các lớp khác nhau tới từ các máy chủ khác nhau
Trình quản lý an ninh kiểm soát các hoạt động một máy ảo Java được quyền làm với các điều kiện khác nhau Một ví dụ rất cơ bản là hoạt động đọc/ghi tập tin (file I/O) được quản lý chặt chẽ bởi trình quản lý an ninh: Các applet chỉ có quyền đọc/ghi các tập tin tại máy server chứa nó mà thôi! Tuy nhiên, trình quản lý an ninh cũng là một lớp trong Java, do đó chúng ta có thể viết một lớp an ninh riêng cho mình bằng cách tạo một lớp dẫn xuất từ lớp SecurityManager
1.2.3.2, Giao diện lập trình ứng dụng chuẩn - Core API [4]
Java cung cấp cho người lập trình một thư viện các hàm chuẩn, đó là Core API Các hàm chuẩn này được đặt trong các gói (package) - là tập hợp của các lớp có mối quan hệ với nhau (ví dụ như gói java.awt chứa các lớp Abstract Windowing Toolkit, giúp người lập trình xây dựng ứng dụng với giao diện GUI trên các platform khác nhau)
1.2.3.3, Tương thích với nhiều kiểu phần cứng [4]
Mã bytecode của Java có thể chạy trên hầu như mọi loại phần cứng và hệ điều hành hiện nay như: PC, Macintosh cũng như các máy khác có chạy máy
ảo Java Một điểm nữa là thư viện các thủ tục chuẩn Java có chứa đầy đủ các hàm có thể dùng chung cho các platform khác nhau
1.2.3.4, Đặc tính động và phân tán [4]
Hệ điều hành Windows cho phép các chương trình sử dụng chung và nạp tự động các thư viện liên kết động DLL Chia sẻ tập tin DLL làm giảm dung lượng bộ nhớ cũng như đĩa cần dùng và tăng tính cấu trúc của chương trình Java cũng có đặc tính này: các lớp được nạp tự động khi cần và nhiều chương trình có thể dùng chung một lớp Nó còn hỗ trợ đặc tính phân tán, tức là các phần của chương trình có thể nằm trên máy chủ lẫn trên máy khách hàng
Trang 211.2.3.5, Hướng đối tượng [4]
Lập trình hướng đối tượng (OOP) là phương thức viết các ứng dụng dễ bảo trì, dễ nâng cấp và đặc biệt là có thể tái sử dụng các mã lệnh Java là một ngôn ngữ hướng đối tượng, do đó nó có đầy đủ các đặc tính trên Ngoài ra, thư viện lớp Java cung cấp khá đầy đủ cho người lập trình để bắt đầu một dự án mới
1.2.3.6, Đa luồng (multi-threads) [4]
Các ứng dụng viết bằng Java có thể có nhiều tiến trình được xử lý cùng một lúc Một ứng dụng đơn luồng chỉ có thể thực hiện một tác vụ tại một thời điểm: Giả sử ứng dụng đang bận lấy từ trên mạng xuống một tập tin mất vài phút, trong thời gian này ứng dụng không thể làm các việc khác như vẽ lại màn hình Với ứng dụng viết bằng Java, bạn có thể tạo hai tiến trình song song làm việc: một tiến trình nạp tập tin, một tiến trình khác làm nhiệm vụ cập nhật màn hình
1.2.3.7, Quản lý bộ nhớ và quá trình thu dọn 'rác' [4]
Quản lý bộ nhớ là một vấn đề khá phức tạp đối với C và C++ Trong thời gian thực hiện chương trình, người lập trình chịu trách nhiệm khởi tạo các vùng nhớ, sau khi dùng xong lại giải phóng chúng Chỉ cần một lỗi nhỏ trong
đó cũng có thể làm cạn kiệt tài nguyên hay dẫn đến treo hệ thống Java đã vứt
bỏ gánh nặng này cho người lập trình: Các vùng nhớ được tạo ra trong chương trình sẽ tự động được giải phóng thông qua quá trình thu dọn "rác" (Garbage Collection) Các vùng nhớ tự động được giải phóng nếu như nó không được quy chiếu đến bởi bất cứ đối t-ượng đang hoạt động nào
Các quản lý bộ nhớ của Java củng cố thêm tính an ninh của các máy ảo Trong C và C++, người lập trình có thể truy cập đến hệ thống thông qua con trỏ (pointer) Với Java, phép toán với con trỏ bị cấm, do đó con trỏ luôn chỉ đến dữ liệu cần thiết của ứng dụng trên máy ảo, ngăn ngừa ứng dụng truy xuất đến tài nguyên bên ngoài máy ảo
Trang 22Cấu trúc và các đặc tính trên đây của Java cho thấy Java có những điểm mạnh và yếu riêng Tuy nhiên, chúng ta có thể tin rằng, trong tương lai, Java
sẽ dần dần hoàn thiện những nhược điểm, phát triển và tiếp tục làm thay đổi
bộ mặt của Internet cũng như Intranet
1.2.4, Các thành phần cơ bản của ngôn ngữ lập trình java [4]
Văn phạm Java chỉ định cách viết như sau:
• Lời chú thích: Được thêm vào bởi người lập trình với mục đích giải thích
• Các câu lệnh: Mỗi lệnh là dòng đơn của chương trình
• Khối lệnh: Đặt các câu lệnh nhóm lại cùng với nhau như một khối
• Cấu trúc file: Các bộ phận cấu thành của một file Java nguồn và lệnh là được xác định rõ
• Các từ khóa: Các từ được định nghĩa trước trong ngôn ngữ Java (không được sử dụng như danh hiệu)
• Danh hiệu: Các tên bạn đặt ra cho các lớp, các biến và các hàm Danh hiệu không hạn chế các kí tự theo chỉ định, nhưng chưa phải được sử dụng tùy ý,
có vài qui ước cho danh hiệu
• Hằng (literals): Các giá trị hằng được viết một cách khác nhau tùy thuộc vào kiểu dữ liệu Ví dụ: để phân biệt các kí tự "123" với số 123
• Biểu thức: Sự kết hợp nhiều mối quan hệ để tạo ra một giá trị dữ liệu
• Toán tử: Các toán tử được thực hiện như phép cộng, trừ, nhân, các toán tử toán học và không toán học khác
1.2.5, Một số gói lập trình mạng trong Java
1.2.5.1, Định nghĩa [4]
Gói được coi như các thư mục, đó là nơi bạn tổ chức các lớp và các giao diện của bạn Các chương trình Java được tổ chức như những tập của các gói
Trang 23Mỗi gói gồm có nhiều lớp, các giao diện được coi như là các thành viên của
nó Đó là một phương án thuận lợi để lưu trữ các nhóm của những lớp có liên quan với nhau dưới một cái tên cụ thể Java cung cấp thêm nhiều gói để phát triển ứng dụng và applet Nếu bạn không khai báo các gói trong đoạn mã của bạn, thì các lớp và các giao diện của bạn sau khi kết thúc sẽ nằm trong một gói mặc định mà không có tên
Nói tóm lại, các gói có ích cho các mục đích sau:
• Chúng cho phép bạn tổ chức các lớp thành các đơn vị nhỏ hơn (như là các thư mục), và làm cho việc xác định vị trí trở nên dễ dàng và sử dụng các tập tin của lớp một cách phù hợp
• Giúp đỡ để tránh cho việc đặt tên bị xung đột (trùng lặp tên) Khi bạn làm việc với một số các lớp bạn sẽ cảm thấy khó để quyết định đặt tên cho các lớp và các phương thức Đôi lúc bạn muốn sử dụng tên giống nhau mà tên đó liên quan đến lớp khác Các gói giấu các lớp để tránh việc đặt tên bị xung đột
• Các gói cho phép bạn bảo vệ các lớp, dữ liệu và phương thức ở mức rộng hơn trên một nền tảng class-to-class
• Các tên của gói có thể được sử dụng để nhận dạng các lớp
1.2.5.2, Một số lớp của gói thư viện java.net [4]
¾ Lớp InetAddress
Vì địa chỉ Internet theo số IP và theo tên rất thường dùng khi kết nối vào mạng cho nên Java xây dựng hẳn một lớp InetAddress dành riêng cho việc quản lý địa chỉ theo tên và theo số Lớp InetAddress cung cấp các phương thức static thông dụng nhất dùng để chuyển đổi và truy xuất địa chỉ IP (không có phương thức khởi dựng cho lớp này) Thường ta sẽ quan tâm đến các phương thức sau:
• public static InetAddress getLocalHost () throws
Trang 24UnknownHostExceptiongetByName Trả về đối tượng InetAddress là địa chỉ của máy cục bộ (local host)
• public static InetAddress getByName (String host) throws
UnknownHostException Phương thức này nhận địa chỉ của một máy bằng kiểu chuỗi String và trả về đối tượng kiểu InetAddress thay mặt cho địa chỉ máy này
• public static InetAddress[] getAllByName (String host) throws
UnknownHostException Phương thức này nhận địa chỉ của một máy bằng kiểu chuỗi và trả về tất cả các đối tượng InetAddress thay mặt cho địa chỉ máy này
• public byte[] getAddress() Trả về địa chỉ IP của đối tượng InetAddress dưới dạng một dãy các byte Vị trí byte cao nhất nằm ở byte 0
• public String getHostAddress() Trả về địa chỉ IP của đối tượng InetAddress dưới dạng một chuỗi được định dạng phân làm 4 nhóm %d.%d.%d.%d (Ví dụ:
“172.16.11.12”)
¾ Lớp Socket
Lớp Socket dùng tạo kết nối từ phía khách với máy chủ thường được khởi dựng bằng các phương thức sau:
Trang 25• public Socket (String host, int port) throws UnknownHostException, IOException
Tạo ra một socket để kết nối máy có tên theo địa chỉ host và số cổng port
• public Socket(InetAddress address, int port) throws IOException
Tạo ra một socket kết nối địa chỉ là đối tượng InetAddress và số cổng port
• Public Socket(String host, int port, boolean stream) throws IOException
Tạo ra một socket kết nối theo địa chỉ host và số cổng port tham số stream cuối cùng để quy định kết nối theo TCP (stream=true) hay UDP (stream=false) Tuy nhiên nếu áp dụng để tạo socket cho giao thức UDP nên sử dụng lớp thay thế là DatagramSocket
Các phương thức khác hỗ trợ cho lớp Socket từ phía máy khách bao gồm:
• InputStream get InputStream() throws IOException Lấy về luồng nhập để máy khách có thể nhập dữ liệu trả về từ phía máy chủ
• OutputStream get OutputStream() throws IOException Lấy về luồng xuất để máy khách có thể ghi dữ liệu gửi đến máy chủ
• InetAddress get InetAddress() Lấy địa chỉ kết nối socket của máy chủ
• int getPort() Lấy về số cổng dùng kết nối của máy chủ
Trang 26Ví dụ đoạn mã sau sẽ thực hiện kết nối với máy chủ có địa chỉ
“my.testing.server” và mở ra hai luồng xuất nhập để đọc và gửi thông tin đến máy chủ theo số cổng 1234
try{
Socket me=new Socket(“my.testing.server”, 1234);
// Luồng nhập thông tin để trả về máy chủ từ phía kết nối
DataInputstream in = new DataInputStream(me.getInputStream());
// Luồng xuất để ghi thông tin gửi đến máy chủ
DataOutputStream out = new DataOutputStream(me.getOutputStream()); Catch (Exception e) {
• Socket accept () throws IOException
port là số hiệu cổng mà đối tượng ServerSocket phải lắng nghe để
nhận biết những kết nối từ phía máy khách gửi đến Để chờ đợi kết nối từ các máy khách gửi đến đối tượng ServerSocket
• Public void close () throws IOException Phương thức này thực sự dừng lại chờ đợi cho đến khi nhận được
Trang 27thông tin kết nối sẻ trả về đối tượng socket của máy khách nơi có yêu cầu nối vào máy chủ.Cuối cùng máy chủ có thể cắt đứt mọi kết nối bằng cách gọi phương thức close của đối tượng ServerSocket
Ví dụ đoạn mã sau sẽ tạo một đối tượng ServerSocket trê máy chủ luôn lắng nghe kết nối từ
phía máy khách gửi đến qua số cổng 1234 {
ServerSocket server = new ServerSocket (1234); Socket client;
// Chương trình sẽ dựng lại ở đây để chờ đợi sự kết nối client = server.accept ();
// Có một kết nối gửi đến từ phía máy khách System.out.println(“Accept connect”);
// Xử lý các yêu cầu về dịch vụ // …
// Cắt đứt các kết nối client.close ();
server.close ();
catch (Exception e) {
Trang 28diễn bằng đối tượng DatagramPackage) theo giao thức UDP Dữ liệu được gửi đi không bảo đảm được nhận đầy đủ và có thể bị lỗi trên đường truyền (cơ chế dùng DatagramSocket không an toàn bằng lớp Socket) Dưới đây là một số phương thức dùng của lớp DatagramSocket:
• public DatagramSocket () throws SocketException Phương thức khởi dựng để tạo kết nối UDP
• public DatagramSocket (int port) throws SocketException Phương thức khởi dựng để tạo kết nối UDP với số hiệu cổng port
• public void synchronized send (DatagramSocket p) throws IOException
Gửi gói dữ liệu đi
• Public void synchronized receive (DatagramSocket p) throws IOException
• public DatagramPackage(byte buff[], int len) Phương thức khởi tạo ra gói có dữ liệu chứa trong bộ đệm buff[]
Trang 29và chiều dài gói dữ liệu là len
• public DatagramPackage (byte buff[], int len, InetAddress iaddr, int port)
Phương thức khởi tạo ra gói có dữ liệu chứa trong bộ đệm buff[] cùng với chiều dài vùng đệm muốn lấy, địa chỉ máy đích và số hiệu cổng
• public InetAddress getAddress() Trả về địa chỉ chứa trong gói dữ liệu
• public byte[] getData() Trả về dữ liệu thật sự chứa trong gói
• public int getLength() Trả về kích thước hay chiều dài gói dữ liệu
• public int getPort() Trả vể số hiệu cổng chứa trong gói dữ liệu
¾ Lớp URL
URL(Uniform Resource Locator) là địa chỉ định vị tài nguyên trên mạng, thường một một URL như đã đề cập bao gồm 3 phần: phần nghi thức(protocol), phần địa chỉ hay tên máy chủ(host name), và phần chỉ định tên tập tin hay tài liệu muốn lấy từ máy chủ về
Java đóng gói tất cả những đặc điểm này vào một lớp URL Đối tượng URL được tạo ra bằng một trong những phương thức khởi tạo sau:
• public URL(String spec) throws MalformedURLException Tạo một đối tượng URL từ địa chỉ định vị là một chuỗi
• publicURL(String protocol, String host, int port,
Trang 30String file) throws MalformedURLException Tạo một địa chỉ định vị tuyệt đối với đầy đủ nghi thức(protocol), máy chủ(server), cổng(port), đường dẫn(file) tới tập tin cần lấy trên máy chủ
• public URL(String protocol, String host, String file) throws MalformedURLException
Tạo một địa chỉ định vị tuyệt đối với đầy đủ nghi thức(protocol), máy chủ(server), đường dẫn(file) tới tập tin cần lấy trên máy chủ(bỏ qua thành phần định vị cổng giao tiếp, nếu truy tìm trang web theo nghi thức http thì cổng chương trình web server mặc định là 80)
Các phương thức hỗ trợ khác dùng cho lớp URL là:
• public final Object getContent() throws IOException lấy về nội dung mà kết nối theo địa chỉ URL có được
• String getFile() Lấy về tên tập tin hay tài liệu nằm trong chuỗi địa chỉ URL có được
• String getHost() Lấy tên máy chủ(thường là thành phần thức 2 của chuỗi URL)
• String getPort() Lấy về số hiệu cổng
• String getProtocol() Lấy về tên giao thức(thường là thành phần đầu tiên trong chuỗi URL)
• String getRef()
Trang 31Lấy về nội dung chuỗi tham khảo thêm trong chuỗi URL(được đặt sau dấu # của chuỗi)
• Public final InputStream openStream() throws IOException
Mở luồng nhập để đọc thông tin trả về từ máy chủ
Ví dụ đoạn mã sau đây dùng để lấy về nội dung trang web index.htm từ máy chủ java.sun.com:
try{
// Mở kết nối đến trang Web theo địa chỉ định vị URL
URL o = new URL(“http://java.sun.com/index.htm”);
// Tạo luồng nhập để đọc nội dung trang Web trả về từ máy chủ
BufferedReader inStream = new BufferedReader(new InputStreamReader(o.openStream()));
// In nội dung trang Web index.htm ra màn hình
// Quá trình mở và kết nối với trang web bị lỗi
System.out.println (e) ; }
1.3 Tổng quan về Unicast, Multicast
1.3.1, Khái niệm Unicast [5]