C H HƯ ƯƠ ƠN N GG
1. Các kiến thức cơ bản về Networking
- Các máy tính chạy trên mạng Internet truyền thơng với nhau dùng các Protocol TCP, UDP. Mơ hình mạng 4 lớp được mơ tả bằng hình vẽ dưới đây:
Application (HTTP,ftp,telnet) Transport (TCP/IP,UDP) Network (IP,.) Link (device driver)
- Khi bạn viết các chương trình Java cĩ truyền thơng qua mạng, điều này cĩ nghĩa là bạn đang lập trình ở lớp application. Nhìn chung, bạn khơng cần quan tâm tới các protocol TCP và UDP. Thay vì vậy, bạn cĩ thể dùng các lớp trong package java.net. Các lớp này cung cấp việc truyền thơng qua mạng
độc lập hệ thống. Tuy nhiên, bạn cần hiểu rõ sự khác biệt giữa TCP và UDP
để xác định rõ những lớp nào trong thư viện Java mà bạn sẽ sử dụng.
- Khi hai chương trình muốn truyền dữ liệu cho nhau một cách đáng tin cậy, chúng thiết lập một connection và gửi data qua lại thơng qua connection
đĩ. Ðiều này giống như một cuộc điện thoại--nếu bạn muốn nĩi chuyện với tơi
ở HCM City, một connection được thiết lập khi bạn quay số của tơi và tơi trả
lời. Bạn gửi data qua lại thơng qua connection bằng cách nĩi với người kia thơng qua đường điện thoại. Giống như các cơng ty điện thoại, TCP đảm bảo rằng data được gửi từ một đầu connection tới đầu kia khơng mất mát và đúng thứ tự (nếu khơng, một lỗi sẽ được thơng báo).
2. Ports:
- Nĩi một cách tổng quát, một máy tính nối mạng là một connection vật lý
đối với mạng đĩ. Tất cả dữ liệu gửi cho một máy tính thơng qua conection đĩ. Tuy nhiên, dữ liệu cĩ thể được gửi cho những ứng dụng khác nhau trên máy
đĩ. Vậy thì làm cách nào máy tính biết ứng dụng nào sẽ nhận dữ liệu được gửi đến? Ðiều này được giải quyết thơng qua việc sử dụng Ports, mỗi ứng dụng mạng cĩ một port tương ứng.
- Dữ liệu truyền qua mạng cĩ kèm theo thơng tin địa chỉ nhằm xác định máy tính và port đích. Mỗi máy tính được xác định bằng một địa chỉ IP 32-bits, IP protocol dùng địa chỉ này để phân phát dữ liệu đúng cho từng máy. Port
- Trong việc truyền nhận data dựa trên connection, một ứng dụng thiết lập một connection với một ứng dụng khác bằng cách gắn một socket cho mỗi port number. Ðiều này cĩ ý nghĩa đăng kỳ ứng dụng với hệ thống để ứng dụng cĩ thể nhận tất cả data được gửi đến cho port đĩ. Khơng thể cĩ hai ứng dụng dùng chung một port. Mọi cố gắng gắn một socket với một port đã dùng
đều sẽ thất bại. Trong việc truyền nhận data dựa trên datagram, datagram chứa port number của ứng dụng đích mà nĩ gửi tới.
- Ðịnh nghĩa: Các protocol TCP và UDP dùng ports để map incoming data cho một quá trình đang chạy trên một máy tính.
- Port number nằm trong khoảng 0-65535 (vì ports được biểu diễn bằng số
nguyên 16-bits). Những port nằm trong khoảng 0-1023 là những port dành riêng cho những dịch vụ quen thuộc như HTTP, FTP và các dịch vụ của hệ
thống (những port này gọi là các well-known port). Những ứng dụng mạng của bạn khơng nên dùng những port trong khoảng này.
- Thơng qua những lớp trong package java.net, những chương trình Java cĩ thể dùng TCP hay UDP để truyền nhận data qua Internet. Các lớp URL, URLConnection, Socket và ServerSocket dùng TCP. Các lớp DatagramPacket và DatagramServer dùng UDP.
- Java sử dụng HTTP để phân phát các Applet đa nền, cĩ thể chạy trong mơi trường Browser. Nhìn chung, đây là cơng dụng chính của Java: tạo ra các trang HTML cĩ nội dung động. Tuy nhiên, đây chỉ là mặt ngồi của cái mà Java cĩ thể làm được thực sự. Các Net-package và kiến trúc Java cho phép
nĩ được dùng như một kiến trúc động, cĩ thể chủ động dùng nguồn code, data, và input thơng qua Internet. Bằng cách tổng hợp các Java-package, programmers cĩ thể phối hợp chương trình của mình cùng các protocol Telnet, FTP, NNTP, WWW để tạo ra các ứng dụng mạng, thay vì chỉ chạy trên một máy như trước đây.
- Java tương tác với Internet theo cách riêng của nĩ, dữ liệu kéo về dưới dạng các file bytecode (.class), các file khác như ảnh, audio hay input từ việc tương tác với các user khác. Chức năng này được giao tiếp chính thơng qua mơi trường Browser support Java; mặc dù vậy, interpreter cũng cĩ thể sử
dụng các connection mạng. Nhằm đáp ứng hai khả năng quan trọng là tính cĩ thể mở rộng và tính đa nền, Java đã cung cấp một kiến trúc hướng đối tượng khơng bị ràng buộc bởi việc hiện thực chương trình được compile từ trước khi thực thi (dạng file.EXE). Ngồi ra, để đáp ứng được những yêu cầu của người sử dụng, Java phải đảm bảo tính an tồn, hiệu suất cao. Tuy nhiên, cho đến thời điểm hiện tại, tốc độ thực thi một chương trình Java cịn quá chậm. Hy vọng điều này sẽ được cải thiện hơn khi cĩ những phần cứng support Java riêng biệt.
- Các tính chất an tồn, đa nền,...của ngơn ngữ Java được giải quyết bằng interpreted design. Bằng cách Compile code ra dạng máy ảo, và tạo ra memory layout tại thời điểm chạy chương trình thay vì tại thời điểm compile, Java cĩ khả năng truy xuất điều kiện của code trước khi nĩ được thực thi trên một máy client.
Tất cả những ưu điểm trên phải trả giá cho hiệu suất thực thi chương trình thấp. Tuy nhiên, điều này đã được khắc phục phần nào bằng cách tạo code trung gian dưới dạng bytecode, cung cấp khả năng thực hiện chương trình Multithread khá dễ dàng, và đặc biệt hơn là chiến lược quản lý bộ nhớ với việc dọn rác tựđộng.