Lời mở đầu<br />
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<br />
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<br />
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<br />
đượ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<br />
với sự thành công của nhiều hệ thống.<br />
Java là ngôn ngữ lập trình hướng đối tượng thuần túy với nhiều đặc trưng ưu việt<br />
so với các ngôn ngữ lập trình hướng đối tượng khác như tính độc lập với nên, tính bảo<br />
mật,…Java là ngôn ngữ ngay từ khi ra đời đã hướng đến lập trình mạng nên việc viết một<br />
chương trình lập trình mạng bằng Java dễ dàng hơn nhiều so với các ngôn ngữ khác.<br />
Giáo trình này bao gồm 10 chương:<br />
Chương 1: Giới thiệu những khái niệm căn bản về mạng máy tính để người đọc có<br />
thể tiếp cận với các chương tiếp theo. Trong chương này chúng ta sẽ đi vào xem xét<br />
mạng vật lý, phần cứng được sử dụng trong các mạng LAN. Tiếp theo chúng ta sẽ tìm<br />
hiểu mô hình phân tầng OSI bảy tầng, và sự tương ứng của họ giao thức TCP/IP với các<br />
tầng trong mô hình OSI. Sau đó chúng ta sẽ đi vào tìm hiểu các giao thức mạng, giao<br />
thức Internet, và giao thức e-mail.<br />
Chương 2: Giới thiệu ngôn ngữ lập trình Java. Chương này trình bày các khái niệm<br />
căn bản về ngôn ngữ lập trình Java. Giới thiệu lịch sử phát triển và cấu trúc của máy ảo<br />
Java. Những đặc trưng đã tạo nên sức mạnh của ngôn ngữ Java cũng được giới thiệu<br />
trong chương này. Cũng trong chương này chúng ta sẽ đi vào tìm hiểu cách cấu hình và<br />
cài đặt môi trường biên dịch, chạy và soạn thảo ngôn ngữ Java. Tiếp đến ta sẽ đi vào tìm<br />
hiểu các thành phần cơ bản của Java như kiểu dữ liệu, cấu trúc lệnh tuần tự rẽ nhánh,<br />
lặp, và nhảy. Tiếp theo chúng ta sẽ đi vào tìm hiểu các khái niệm liên quan đến lập trình<br />
hướng đối tượng trong Java như lớp, phương thức, thuộc tính, các từ khóa bổ trợ như<br />
static, final, abstract, thừa kế và tính đa hình trong Java. Một trong những khái niệm mới<br />
mà các ngôn ngữ truyền thống trước đây không có là ngoại lệ và đón bắt ngoại lệ trong<br />
Java cũng được giới thiệu.<br />
Chương 3: Các luồng vào ra. Chương này giới thiệu khái niệm vào ra bằng các<br />
luồng dữ liệu. Trước tiên ta sẽ tìm hiểu về các luồng và ý nghĩa của luồng trong chương<br />
trình Java. Tiếp đến chúng ta sẽ lần lượt tìm hiểu các luồng vào ra chuẩn trong gói làm<br />
việc với console. Các luồng trừu tượng java.io.InputStream, java.io.OutputStream là các<br />
luồng cơ bản để từ đó xây dựng nên các luồng cụ thể. Luồng được chia thành các nhóm<br />
như luồng byte và luồng ký tự. Từ phiên bản Java 1.4 một đặc trưng vào ra mới trong<br />
Java được đưa vào cũng được giới thiệu trong chương này. Việc nắm vững kiến thức ở<br />
chương này cũng giúp cho việc lập trình ứng dụng mạng trở nên đơn giản hơn vì thực<br />
chất của việc truyền và nhận dữ liệu giữa các ứng dụng mạng là việc đọc và ghi các<br />
luồng.<br />
Chương 4: Lập trình đa tuyến đoạn. Trong các ngôn ngữ lập trình trước đây các<br />
ứng dụng hầu hết là các ứng dụng đơn tuyến đoạn. Để tăng tốc độ xử lý và giải quyết vấn<br />
đề tương tranh của các ứng dụng nói chung và ứng dụng mạng nói riêng ta cần sử dụng<br />
khái niệm đa tuyến đoạn. Phần đầu của chương này trình bày các khái niệm căn bản về<br />
tiến trình, tuyến đoạn. Tiếp đến chúng ta sẽ xem xét các cách cài đặt một ứng dụng tuyến<br />
đoạn trong Java bằng lớp Thread và thực thi giao tiếp Runnable. Sau đó ta sẽ đi vào tìm<br />
hiểu các phương thức của lớp Thread. Sự đồng bộ hóa và cách cài đặt một chương trình<br />
đồng bộ hóa cũng được giới thiệu trong chương này.<br />
Chương 5: Lập trình mạng với các lớp InetAddress, URL và URLConnection. Lớp<br />
InetAddress là lớp căn bản đầu tiên trong lập trình mạng mà ta cần tìm hiểu. Nó chỉ ra<br />
cách một chương trình Java tương tác với hệ thống tên miền. Tiếp đến ta sẽ đi vào tìm<br />
hiểu các khái niệm về URI, URL,URN và lớp biểu diễn URL trong Java. Cách sử dụng<br />
URL để tải về thông tin và tệp tin từ các server. Sau đó ta đi vào tìm hiểu lớp<br />
URLConnection, lớp này đóng vai trò như một động cơ cho lớp URL.<br />
<br />
Sưu tầm bởi: www.daihoc.com.vn<br />
<br />
Chương 6: Lập trình Socket cho giao thức TCP. Trong chương này chúng ta sẽ tìm<br />
hiểu cách lập trình cho mô hình client/server và các kiểu kiến trúc client/server. Các lớp<br />
Socket và ServerSocket được trình bày chi tiết trong chương này để lập các chương trình<br />
cho giao thức TCP.<br />
Chương 7: Lập trình ứng dụng cho giao thức UDP. Chương này giới thiệu giao<br />
thức UDP và các đặc trưng của giao thức này. Tiếp đến ta đi vào tìm hiểu các lớp<br />
DatagramPacket và DatagramSocket để viết các chương trình ứng dụng mạng cho giao<br />
thức UDP.<br />
Chương 8: Tuần tự hóa đối tượng và ứng dụng trong lập trình mạng. Trình bày các<br />
vấn đề về tuần tự hóa và ứng dụng của tuần tự hóa trong lập trình mạng.<br />
Chương 9: Phân tán đối tượng bằng Java RMI. Chương này tìm hiểu chủ đề về lập<br />
trình phân tán đối tượng bằng kỹ thuật gọi phương thức RMI (Remote Method<br />
Invocation).<br />
Chương 10:Xử lý cơ sở dữ liệu trong Java. Trình bày cách thức kết nối các cơ sở<br />
dữ liệu và xử lý cơ sở dữ liệu bằng Java thông qua giao diện lập trình ứng dụng JDBC.<br />
Tìm hiểu về lập trình mạng tốt nhất là trên các hệ thống mạng thực sự với nhiều<br />
máy tính được kết nối vật lý. Tuy nhiên trong giáo trình này hầu hết các ví dụ được trình<br />
bày để bạn đọc có thể lập trình và thử nghiệm các ứng dụng mạng trên các máy đơn.<br />
Mặc dù đã hết sức cố gắng để trình bày giáo trình một cách dễ hiểu với các ví dụ<br />
minh họa giúp bạn đọc có thể thử nghiệm ngay sau khi tìm hiểu các vấn đề lý thuyết,<br />
nhưng chắc chắn giáo trình này không thể tránh khỏi những thiếu sót nhất định. Rất mong<br />
sự góp ý và phê bình của các bạn độc giả. Mọi thắc mắc và góp ý các bạn có thể gửi về<br />
theo địa chỉ e-mail sau:lequocdinh@vnn.vn hoặc hoan_td2001@yahoo.com<br />
Để hoàn thành giáo trình này các tác giả đã nhận được sự giúp đỡ rất nhiều từ<br />
bạn bè, đồng nghiệp và những người thân.<br />
Xin chân thành cảm ơn tới tất cả mọi người.<br />
<br />
Nhóm tác giả<br />
<br />
Sưu tầm bởi: www.daihoc.com.vn<br />
<br />
MỤC LỤC<br />
Lời mở đầu<br />
Chương 1:Các khái niệm căn bản về mạng và giao thức .............................................. 1<br />
1. Mạng máy tính .................................................................................................... 1<br />
1.1. Các đường WAN ............................................................................. 1<br />
1.2 .Giao thức Ethernet .......................................................................... 2<br />
1.3. Các thành phần vật lý...................................................................... 3<br />
2. Mô hình phân tầng.............................................................................................. 6<br />
2.1. Tầng 1:Tầng vật lý........................................................................... 7<br />
2.2. Tầng 2: Tầng liên kết dữ liệu ........................................................... 7<br />
2.3. Tầng 3: Tầng mạng ......................................................................... 7<br />
2.4. Tầng 4:Tầng giao vận ..................................................................... 7<br />
2.5. Tầng 5: Tầng phiên ...........................................................................<br />
2.6. Tầng 6:Tầng trình diễn .................................................................... 7<br />
2.7. Tầng 7:Tầng ứng dụng.................................................................... 7<br />
3. Các giao thức mạng ............................................................................................ 8<br />
3.1. Các giao thức cơ bản ...................................................................... 8<br />
3.2. Các giao thức Internet ................................................................... 14<br />
4. Soket ................................................................................................................. 17<br />
5. Dịch vụ tên miền .............................................................................................. 17<br />
5.1. Các server tên miền ...................................................................... 18<br />
5.2. Nslookup ....................................................................................... 19<br />
6. Internet và Extranet .......................................................................................... 20<br />
6.1. Intranet và Extranet20<br />
6.2. Firewall.......................................................................................... 20<br />
6.3. Proxy Server ................................................................................. 20<br />
Chương 2 : Giới thiệu ngôn ngữ lập trình Java ........................................................... 21<br />
1. Giới thiệu công nghệ Java ................................................................................ 21<br />
1.1. Lịch sử phát triển........................................................................... 21<br />
1.2. Cấu trúc của máy ảo Java – Java Virtual Machine ........................ 21<br />
1.3. Các đặc trưng của Java ................................................................ 21<br />
1.4. Các ấn bản Java ........................................................................... 22<br />
1.5. Công cụ phát triển ......................................................................... 23<br />
1.6. Các kiểu ứng dụng trong Java....................................................... 23<br />
1.7. Cài đặt chương trình dịch Java và các công cụ ............................. 23<br />
1.8. Một số ví dụ mở đầu ..................................................................... 25<br />
2. Ngôn ngữ lập trình Java .................................................................................... 27<br />
2.1. Cấu trúc tệp của một chương trình Java ....................................... 27<br />
2.2. Định danh, kiểu dữ liệu và khai báo biến ....................................... 28<br />
2.3. Các kiểu dữ liệu nguyên thủy (primitive datatype) ......................... 28<br />
2.4. Khai báo các biến .......................................................................... 30<br />
2.5. Các lệnh trong Java ...................................................................... 31<br />
2.6 Các lớp và các đối tượng trong Java.............................................. 36<br />
2.7. Giao tiếp – Interface ...................................................................... 48<br />
2.8. Các gói và sử dụng gói trong Java ................................................ 50<br />
2.9. Quản lý ngoại lệ ............................................................................ 52<br />
<br />
I<br />
Sưu tầm bởi: www.daihoc.com.vn<br />
<br />
Chương 3: Các luồng vào ra ....................................................................................... 59<br />
1. Khái niệm về luồng trong Java........................................................................... 59<br />
1.1. Khái niệm luồng(stream) ............................................................... 59<br />
2. Luồng xuất nhập chuẩn ..................................................................................... 60<br />
3. Luồng nhị phân .................................................................................................. 60<br />
3.1. Lớp InputStream ........................................................................... 60<br />
3.2. Lớp OutputStream......................................................................... 61<br />
3.3. Các luồng xuất nhập mảng byte .................................................... 62<br />
3.4. Luồng xuất nhập tập tin ................................................................. 64<br />
3.5. Truy nhập tệp ngẫu nhiên.............................................................. 66<br />
3.6. Luồng PrintStream ....................................................................... 68<br />
4. Luồng ký tự ..................................................................................................... 68<br />
4.1. Sự tương ứng giữa luồng byte và luồng ký tự ............................... 68<br />
4.2. Mã hóa ký tự ................................................................................. 69<br />
4.3 Lớp Writer ...................................................................................... 70<br />
4.4. Lớp Reader ................................................................................... 70<br />
4.5. Lớp OutputStreamWriter ............................................................... 70<br />
4.6. Lớp InputStreamReader ................................................................ 71<br />
4.7. Lớp FileWriter ............................................................................... 71<br />
4.8. Lớp FileReader ............................................................................. 72<br />
5. Luồng đệm ........................................................................................................ 73<br />
6. Luồng vào ra mới – New Input Output ............................................................... 74<br />
6.1. Căn bản về NIO ............................................................................ 74<br />
6.2. Buffer (Các vùng đệm) .................................................................. 74<br />
6.3. Các kênh (Channel) ...................................................................... 76<br />
6.4. Charset và Selector ....................................................................... 76<br />
6.5. Đọc tệp.......................................................................................... 77<br />
6.6. Ghi tệp tin ...................................................................................... 80<br />
7. Kết luận ................................................................................................................... 82<br />
Chương 4: Lập trình đa tuyến đoạn ............................................................................ 83<br />
1.Tổng quan83<br />
1.1. Lập trình đơn tuyến đoạn .............................................................. 83<br />
1.2. Lập trình đa tiến trình .................................................................... 83<br />
1.3. Lập trình đa tuyến đoạn................................................................. 84<br />
2. Tạo các ứng dụng đa tuyến đoạn với lớp Thread .............................................. 86<br />
3. Tạo ứng dụng đa tuyến đoạn với giao tiếp Runnable ........................................ 87<br />
4. Sự đồng bộ hóa ................................................................................................. 88<br />
4.1. Các phương thức synchronized .................................................... 88<br />
4.2.Lệnh synchronized ......................................................................... 89<br />
5. Phương thức wait và notify................................................................................ 90<br />
6. Lập lịch cho tuyến đoạn ..................................................................................... 91<br />
7. Hoài vọng-Deadlock .......................................................................................... 92<br />
8. Điều khiển tuyến đoạn ....................................................................................... 94<br />
8.1. Ngắt một tuyến đoạn Thread ......................................................... 94<br />
8.2 Kết thúc việc thực thi một tuyến đoạn............................................. 95<br />
8.3. Tạm dừng và phục hồi việc xử lý các tuyến đoạn .......................... 96<br />
<br />
II<br />
Sưu tầm bởi: www.daihoc.com.vn<br />
<br />
9. Các nhóm tuyến đoạn –ThreadGroup................................................................ 96<br />
9.1. Tạo một nhóm Thread ................................................................... 98<br />
10. Một ví dụ minh họa việc sử dụng tuyến đoạn .................................................. 98<br />
11. Kết luận ......................................................................................................... 100<br />
Chương 5: Lập trình mạng với các lớp InetAddress, URL và URLConnection .......... 102<br />
1. Lớp InetAddress102<br />
1.1. Tạo các đối tượng InetAddress102<br />
1.2. Nhận các trường thông tin của một đối tượng InetAddress ......... 103<br />
1.3. Một số chương trình minh họa .................................................... 104<br />
2. Lớp URL .......................................................................................................... 105<br />
2.1. Tạo các URL ............................................................................... 105<br />
2.2. Phân tích một URL thành các thành phần ................................... 106<br />
2.3. Tìm kiếm dữ liệu từ một URL ...................................................... 108<br />
2.4. Các phương thức tiện ích............................................................ 109<br />
3. Lớp URLConnection109<br />
3.1. Mở các URLConnection ............................................................. 110<br />
3.2. Đọc dữ liệu từ một server ............................................................ 111<br />
3.3. Phân tích Header ........................................................................ 113<br />
Chương 6: Lập trình Socket cho giao thức TCP........................................................ 119<br />
1. Mô hình client/server ....................................................................................... 119<br />
2. Các kiến trúc Client/Server ............................................................................. 120<br />
2.1. Client/Server hai tầng (two-tier client/server) ............................... 120<br />
2.2. Client/Server ba tầng................................................................... 121<br />
2.3. Kiến trúc n-tầng ........................................................................... 122<br />
3. Mô hình truyền tin socket................................................................................. 122<br />
4. Socket cho Client............................................................................................. 124<br />
4.1. Các constructor ........................................................................... 124<br />
4.2. Nhận các thông tin về Socket ...................................................... 125<br />
4.3. Đóng Socket................................................................................ 126<br />
4.4. Thiết lập các tùy chọn cho Socket127<br />
4.5. Các phương thức của lớp Object127<br />
4.6. Các ngoại lệ Socket .................................................................... 127<br />
4.7. Các lớp SocketAddress ............................................................... 127<br />
5. Lớp ServerSocket............................................................................................ 128<br />
5.1. Các constructor ........................................................................... 128<br />
5.2. Chấp nhận và ngắt liên kết .......................................................... 129<br />
6. Các bước cài đặt chương trình phía Client bằng Java..................................... 131<br />
7. Các bước để cài đặt chương trình Server bằng Java ...................................... 134<br />
8. Ứng dụng đa tuyến đoạn trong lập trình Java .................................................. 136<br />
9. Kết luận ........................................................................................................... 141<br />
Chương 7: Lập trình ứng dụng cho giao thức UDP ................................................... 142<br />
1. Tổng quan về giao thức UDP .......................................................................... 142<br />
1.1 Một số thuật ngữ UDP.................................................................. 142<br />
1.2. Hoạt động của giao thức UDP..................................................... 143<br />
1.3. Các nhược điểm của giao thức UDP ........................................... 143<br />
1.4. Các ưu điểm của UDP ................................................................ 144<br />
1.5. Khi nào thì nên sử dụng UDP...................................................... 144<br />
2. Lớp DatagramPacket....................................................................................... 145<br />
<br />
III<br />
Sưu tầm bởi: www.daihoc.com.vn<br />
<br />