BỘ GIÁO DỤC & ĐÀO TẠO
ĐẠI HỌC ĐÀ NẴNG
TIỂU LUẬN
Môn: LẬP TRÌNH MẠNG NÂNG CAO
Đề tài: ĐẢM BẢO GẮN BÓ DỮ LIỆU KHI CẬP
NHẬT TRONG CÁC CƠ SỞ DỮ LIỆU TẬP TRUNG
GVHD: PGS.TS. LÊ VĂN SƠN
HVTH: NGUYỄN TUẤN TRUNG
LỚP: CAO HỌC
CHUYÊN NGÀNH: KHOA HỌC MÁY TÍNH
KHÓA: 24
Đà Nẵng - Năm 2012
MỤC LỤC
***
MỞ ĐẦU
CHƯƠNG I: CƠ SỞ LÝ THUYẾT
1.1. Thuật toán đảm bảo gắn bó yếu nhờ bộ tuần tự tuần hoàn
1.2. Thuật toán đảm bảo gắn bó mạnh
1.3. Giao tiếp theo mô hình Client/ Server và khái niệm Socket
CHƯƠNG II: GIỚI THIỆU BÀI TOÁN
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
2.1. Mô tả bài toán
2.2. Cơ sở dữ liệu
CHƯƠNG III: GIẢI QUYẾT BÀI TOÁN
3.1. Xây dựng Server
3.2. Xây dựng Client
3.3. Xây dựng Monitor để quản lí hệ thống
3.4. Một số kết quả chương trình
CHƯƠNG IV: KẾT LUẬN
4.1.Những vấn đề thực hiện được
4.2. Hạn chế
TÀI LIỆU THAM KHẢO
MỞ ĐẦU
Hệ tin học phân tán là hệ thống tin học hiện đại, đa dạng, phức tạp và
đang trên đà phát triển, được nhiều trường đại học, nhiều chuyên gia công
nghệ thông tin quan tâm nghiên cứu với nhiều công trình khoa học có giá
trị về mặt nguyên lý, phương pháp cũng như ứng dụng trong thực tế.
Thông qua môi trường mạng, con người có thể giao tiếp với nhau và
chia sẻ thông tin dữ liệu dù ở khoảng cách rất xa. Vấn đề đặt ra là làm sao
đảm bảo dữ liệu trên mạng phải thống nhất. Đây cũng chính là một trong
những yêu cầu chính của lĩnh vực Lập trình mạng trên hệ phân tán.
Nội dung chủ yếu trình bày trong tiểu luận này là giải quyết một vấn
đề về lập trình mạng, đó là chia sẻ cơ sở dữ liệu giữa các đối tượng ở xa
và đảm bảo tính gắn bó của dữ liệu. Chương trình được viết trên ngôn ngữ
Java và sử dụng cơ sở dữ liệu MySQL.
HVTH: Nguyễn Tuấn Trung Trang 2
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
Tôi xin chân thành cảm ơn PGS.TS. Lê Văn Sơn đã cung cấp kiến
thức và tài liệu để tôi có thể hoàn thành tiểu luận này.
Do thời gian và kiến thức có hạn nên tiểu luận này không tránh khỏi
những thiếu sót, rất mong nhận được sự đóng góp ý kiến của thầy và các
anh chị đồng nghiệp để tiểu luận được hoàn thiện hơn.
Xin chân thành cảm ơn!
HVTH: Nguyễn Tuấn Trung Trang 3
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
CHƯƠNG I : CƠ SỞ LÝ THUYẾT
1.1. Thuật toán đảm bảo gắn bó yếu nhờ bộ tuần tự tuần hoàn:
1.1.1. Nguyên lý:
Trước khi phát một yêu cầu, một trạm nào đó cần phải kết hợp với
nó một số thứ tự được cấp từ bộ tuần tự tuần hoàn. Các yêu cầu được tiếp
nhận tại mỗi trạm theo cùng một trật tự thống nhất. Điều đó giúp ta có được
một sự gắn bó yếu. Cần quan tâm rằng cơ chế phân phối các số dựa trên
nền tảng tổ chức các trạm theo kiểu vòng tròn ảo.
1.1.2. Triển khai hệ ổn định:
Bộ tuần tự cung cấp cho mỗi một yêu cầu số sắp tới còn chưa dùng,
giả sử đó là T. Khi đến phiên của trạm nhận bộ phận tuần tự, nó yêu cầu
một số lượng n số đúng bằng số lượng các yêu cầu cập nhật đang chờ trên
trạm này. Các số này là: T, T + 1, T + 2, T + n – 1
Nó tiếp tục chuyển bộ tuần tự cho trạm kề liền sau nó và số sắp tới
chưa dùng đến là T + n.
Khi một trạm đã có số, nó phát yêu cầu cập nhật cùng với số này.
Trên mỗi trạm, các cập nhật được thực hiện bằng cách tiếp nhận các yêu
cầu cùng các số liên tiếp nhau (theo một trật tự). Để xác định yêu cầu sắp
đến cần xử lý, mỗi một trạm duy trì một biến chứa số V được phối hợp với
yêu cầu xử lý cuối cùng. Các yêu cầu mang các số lớn hơn V + 1 được lưu
trữ trong khi chờ xử lý yêu cầu V + 1.
Việc phát đi các yêu cầu có thể sử dụng vòng tròn, nhưng điều đó
không phải là bắt buộc.
Một trạm khi đã rút một lượng số cần phải được sử dụng hết khi nó
đến lượt tiếp theo tiếp nhận bộ tuần tự, nếu không các trạm khác sẽ phải
chờ.
1.2. Thuật toán đảm bảo gắn bó mạnh:
1.2.1. Nguyên lý:
Tập hợp bao gồm các trạm được tổ chức theo kiểu vòng tròn ảo. Các
cập nhật được thực hiện theo hai thì:
HVTH: Nguyễn Tuấn Trung Trang 4
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
- Thống nhất giữa hai trạm
- Thực hiện cập nhật
Do vậy, thuật toán này đảm bảo một sự gắn bó mạnh. Nếu có nhiều
yêu cầu cập nhật diễn ra đồng thời thì ta phải có quy tắc để có thể quyết
định yêu cầu nào được tiếp nhận và thoả mãn. Nhằm phục vụ cho ý tưởng
đó, ta thường hay sử dụng dấu phối hợp cho mỗi cập nhật và ta xử lý yêu
cầu có thời gian dấu lâu nhất.
1.2.2. Triển khai hệ ổn định:
Mỗi trạm có thể có các trạng thái sau:
- Nghỉ ngơi: Trạm không thực hiện cập nhật nào cả.
- Hoạt động: Trạm đã nhận một yêu cầu cập nhật cục bộ mà yêu
cầu này đã được truyền cho các trạm khác để kiểm tra.
- Thụ động: Trạm đã đồng ý cho một cập nhật và chờ trật tự tương
ứng.
- Cập nhật: Trạm đang trong tình trạng chuyển của cập nhật, trong
khi đó tất cả các yêu cầu khác truyền đến đều được lưu trữ.
Chúng sẽ được xử lý khi quay về một trong các trạng thái khác.
Lúc khởi sự, tất cả các trạm đều trong trạng thái nghỉ ngơi.
Trạm khởi sự việc cập nhật, đầu tiên cần phải gửi một yêu cầu cho
phép cập nhật, nó chỉ làm được công việc đó trong trạng thái nghỉ ngơi.
Lúc này nó được nhận dấu và được gửi vào vòng tròn, trạm khởi sự chuyển
trạng thái từ nghỉ ngơi sang hoạt động.
Nếu chỉ có một yêu cầu duy nhất được đưa vào vòng tròn, nó đi qua
tất cả các trạm để chuyển các trạm này từ nghỉ ngơi sang thụ động. Khi nó
đã trở về nơi khởi sự thì việc thống nhất coi như hoàn tất. Việc cập nhật nói
riêng lúc này được gửi đi và mỗi trạm sau khi thực hiện lại trở về trạng thái
nghỉ ngơi.
Nếu có nhiều yêu cầu được đưa ra đồng thời trong vòng tròn, thì tình
hình đó dễ dàng diễn ra xung đột. Lúc này, ta phải chọn một yêu cầu có
Thời gian dấu lâu nhất. Để tiến hành công việc đó, ta nêu bật vai trò của “
bộ chắn đường ” (barrage) cho các trạm khởi sự. Một trạm nào đó trong
HVTH: Nguyễn Tuấn Trung Trang 5
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
trạng thái nghỉ ngơi hay thụ động phải chuyển toàn bộ yêu cầu đã đến với
nó, một trạm trong trạng thái hoạt động chỉ phải chuyển các yêu cầu có thời
gian lâu hơn các yêu cầu mà chính nó đã phát đi, các yêu cầu khác đều bị
dừng lại và được lưu giữ.
Các yêu cầu bị lưu lại sẽ được gửi tiếp vào vòng tròn, khi trạm lưu
trữ chúng hoàn thành việc cập nhật riêng của mình.
1.3. Giao tiếp theo mô hình Client/ Server và khái niệm Socket:
Khi nói tới lập trình mạng ta thường nghĩ đến cách trao đổi giữa một
chương trình phục vụ (Server) với một hay nhiều chương trình khách
(Client). Chương trình khách gửi một yêu cầu tới cho chương trình phục
vụ, và chương trình này xử lý dữ liệu để trả lời cho chương trình khách.
Như vậy, chương trình khách muốn gửi được yêu cầu thì trước hết
phải tìm cách kết nối với Server. Server có thể chấp nhận hay từ chối sự kết
nối này. Một khi sự kết nối đã được thiết lập thì Client và Server trao đổi
với nhau thông qua các lớp cho phép kết nối.
Các lớp trong gói java.net cung cấp các phương thức để kết nối mạng
và trao đổi tin giữa các máy với nhau theo mô hình Client/Server. Mặt
khác, trên Internet nhiều máy tính sử dụng các giao thức để trao đổi với
nhau.
1.3.1. Lập trình mạng thông qua Socket:
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ủ (server).
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 dịch là “cơ chế ổ cắm”).
Nếu kết nối socket thành công thì máy khách và máy chủ có thể trao
đổi sữ 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 cho máy khách) và lớp ServerSocket
(thường được đặt trên máy chủ). Hai lớp này được đăt trong gói thư viện
Java.net.
HVTH: Nguyễn Tuấn Trung Trang 6
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
Tuy nhiên, lớp Socket có thể được dùng kết nối chung cho cả máy
khách và máy chủ nhưng ta vẫn thường dùng lớp ServerSocket để thực
hiện việc quản lý kết nối đăt riêng ở máy chủ hơn.
1.3.2. Lớp Socket:
Lớp Socket dùng tạo kết nối từ phía máy khách với máy chủ thường
được khởi động bằng các phương thức sau:
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 từ đị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ố
tream cuối cùng để quy định kết nối theo TCP (stream=true) hay UDP
(stream=false).
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 getInputStream()throws IOException
Lấy về luồng nhập để máy khách có thể đọc dữ liệu trả về từ phía
máy chủ.
OutputStream getOutputStream()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 getInetAddress()
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ủ.
Synchronized void close () throws IOException
Cắt đứt kết nối với máy chủ.
Ví 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ủ có theo số cổng 1234:
try{
HVTH: Nguyễn Tuấn Trung Trang 7
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
Socket me=new Socket(“my.testing.server”, 1234);
//Luồng nhập để đọc thông tin trả về từ máy chủ 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){
System.out.println(e);
}
1.3.3. Lớp ServerSocket:
Lớp ServerSocket dùng tạo kết nối từ phía máy chủ với các máy
khách. Đối tượng ServerSocket được tạo ra trên máy chủ và lắng nghe
những kết nối từ phía máy khách gửi đến theo một số cổng định trước. Đối
tượng ServerSocket được khởi dựng từ phương thức sau:
Public ServerSocket(int port)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
thường đến phương thức accept như sau:
Socket accept()throws IOEXception
Phương thức này thực sự dừng lại chờ đợi cho đến khi nhận được
thô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:
Public void close()throws IOEXception
Ví dụ đoạn mã sau sẽ tạo ra một đối tượng ServerSocket trên máy
chủ luôn lắng nghe kết nối từ máy khách gửi đến qua số cổng 1234
try{
ServerSocket server=new ServerSocket (1234);
Socket client;
//Chương trình server 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ụ
//…
HVTH: Nguyễn Tuấn Trung Trang 8
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
//Cắt đứt các kết nối
client.close();
server.close();
catch (Exception e){
System.out.println(e);
}
CHƯƠNG II : GIỚI THIỆU BÀI TOÁN
2.1. Mô tả bài toán:
Giả sử rằng ta có hệ thống CSDL phối hợp với một hoạt động được
gọi từ xa nhằm phục vụ cho việc cập nhật hay tra cứu thông tin cần thiết.
Bài toán yêu cầu viết chương trình trên ngôn ngữ Java cho phép cập nhật
CSDL có kiểm tra tính gắn bó
1. Đây là hệ đơn Server, có thể hoạt động theo mô hình Client/Server
thường gặp.
HVTH: Nguyễn Tuấn Trung Trang 9
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
2. Viết chương trình theo kiểu đa truy cập, ngẫu nhiên, từ xa với số
lượng truy cập lớn
3. Xây dựng Monitoring để Manager hệ thống có thể kiểm tra và điều
khiển quá trình thực hiện
Bài toán xây dựng một bộ phân phối tải (Bộ cung cấp tài nguyên -
Server). Bộ cung cấp tài nguyên căn cứ vào tài nguyên hiện có của mạng
(Khả năng đáp ứng yêu cầu dịch vụ của Client) mà chấp nhận phục vụ hay
từ chối yêu cầu cung cấp dịch vụ từ Client.
Yêu cầu dịch vụ từ Client ở đây được mô tả bằng cách Client gởi yêu
cầu đến Server, Server thực hiện các thao tác cần thiết như cập nhật hay tra
cứu và gởi trả lại tình trạng của thao tác.
Trong quá trình vận hành hệ thống, Server phải biết được tình trạng
hiện tại của hệ thống như: Số Client yêu cầu cung cấp dịch vụ hiện tại; Số
thông điệp (Message) của các Client đã gởi đến cho Server; Client nào đã
kết thúc yêu cầu kết nối đến Server; Tình trạng của Server (Có khả năng
đáp ứng hay từ chối yêu cầu của Client (quá tải)…
Hệ thống chỉ từ chối yêu cầu của các Client khi quá trình xung đột xẩy
ra, các yêu cầu từ các Client khác vẫn được phục vụ bình thường. Khi hệ
thống hết tình trạng xung đột thì các Client khác có thể sử dụng tài nguyên
hệ thống bình thường.
2.2. Cơ sở dữ liệu:
2.2.1. Thiết kế Cơ sở dữ liệu:
Yêu cầu đầu tiên của bài toán là phải có một hệ thống cơ sở dữ liệu.
Cơ sở dữ liệu này sẽ phối hợp với một hoạt động cập nhật, tra cứu thông tin
từ xa.
Trong tiểu luận này, cơ sở dữ liệu được thiết kế không nhằm mục đích
quản lý mà chỉ mô phỏng cho yêu cầu về cập nhật, tra cứu thông tin. Trong
tiểu luận này chỉ tạo cơ sở dữ liệu đơn giản như sau:
- Thiết kế cơ sở dữ liệu PhoneBooks sử dụng hệ quản trị cơ sở dữ
liệu MySQL
- Cơ sở dữ liệu PhoneBooks sẽ bao gồm table tbl_telephone
HVTH: Nguyễn Tuấn Trung Trang 10
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
- Table tbl_telephone gồm 2 trường name và telephone để lưu các tên
và số điện thoại của tên đó.
2.2.2. Kết nối cơ sở dữ liệu trong Java:
JDBC là viết tắt của “Java DataBase Connectivity”. Nó là một API
(Application Programming Interface) có chứa một tập hợp các lớp, các giao
diện Java và các thông báo lỗi ngoại lệ nằm trong cùng một đặc tả mà theo
đó cả các công ty sản xuất JDBC driver cũng như các nhà phát triển JDBC
đều phải tuân thủ chặt chẽ khi phát triển ứng dụng.
Tại sao lại dùng JDBC?
JDBC tồn tại là để giúp các nhà phát triển Java tạo nên các ứng dụng
truy xuất cơ sở dữ liệu mà không cần phải học và sử dụng các API độc
quyền do các công ty sản xuất phần mềm khác nhau bên thứ ba cung cấp.
Bạn chỉ cần học JDBC và sau đó bạn sẽ được đảm bảo rằngbạn sẽ có thể
phát triển nên các ứng dụng truy cập cơ sở dữ liệu có khả năng truy cập đến
các RDBMS khác nhau bằng cách sử dụng các JDBC driver khác nhau.
Có 4 loại JDBC driver. Thông dụng nhất và cũng là hiệu quả nhất là
loại 4. Sau đây là mô tả:
- JDBC Driver loại 1: Chúng là các trình điều khiển cầu nối JDBC-
ODBC. Chúng ủy nhiệm công việc truy cập dữ liệu cho ODBC API. Chúng
là trình điều khiển chậm nhất trong số còn lại. SUN cung cấp một phần
mềm trình điều khiển JDBC/ODBC.
- JDBC Driver loại 2 : Chúng chủ yếu sử dụng API mã nền để truy
cập dữ liệu và cung cấp các lớp bao Java để có thể được gọi ra bằng cách
dùng các JDBC driver.
- JDBC Driver loại 3: Chúng được viết thuần bằng Java và sử dụng
giao thức Net độc lập nhà sản xuất để truy cập đến trình theo dõi từ xa độc
lập nhà sản xuất. Trình theo dõi này đến lượt nó lại ánh xạ các lời gọi độc
lập nhà sản xuất này vào các lời gọi phụ thuộc nhà sản xuất. Bước đặc biệt
này đã làm tăng độ phức tạp và giảm tính hiệu quả trong truy cập cơ sở dữ
liệu.
HVTH: Nguyễn Tuấn Trung Trang 11
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
- JDBC Driver loại 4: Chúng được viết thuần túy bằng Java và là loại
hiệu quả nhất. Chúng cho phép kết nối trực tiếp vào cơ sở dữ liệu, cung cấp
kết quả tối ưu và cho phép lập trình viên thực hiện các chức năng tùy thuộc
vào cơ sở dữ liệu cụ thể. Điều này đã tạo ra tính cơ động cao nhất là khi
bạn cần thay đổi cơ sở dữ liệu bên dưới một ứng dụng. Loại driver này
thường được dùng cho các ứng dụng phân tán cao.
SUN khuyến cáo sử dụng và phát triển các trình điều khiển loại 4
trong các ứng dụng .
Cài đặt MySQL:
MySQL là hệ quản trị cơ sở dữ liệu mã nguồn mở phổ biến nhất thế
giới và được các nhà phát triển rất ưa chuộng trong quá trình phát triển ứng
dụng. MySQL miễn phí hoàn toàn nên bạn có thể tải về MySQL từ trang
chủ www. mysql .com.
MySQL có nhiều phiên bản cho các hệ điều hành khác nhau như
Windows, Linux, Mac OS
Cài đặt Connector/J - JDBC Driver của MySQL:
JDBC Driver của MySQL có thể lấy về ở địa chỉ:
File tải về sẽ là một file .zip hoặc .tar.gz. Sau khi giải nén sẽ có 1 file
có tên tương tự như sau: mysql-connector-java-5.1.19-bin.jar. Chép file này
vào thư mục %JAVA_HOME%\jre\lib\ext trên hệ thống .
Ví dụ C:\j2sdk1.4.2\jre\lib\ext.
Bạn cũng cần đưa đường dẫn đến file JAR này vào biến môi trường
MYSQL_DRIVER theo đường dẫn: Control Panel\System\Advanced
system settings\Environment Variables
HVTH: Nguyễn Tuấn Trung Trang 12
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
Sau khi đã đặt đường dẫn đến Connector/J vào biến môi trường
MYSQL_DRIVER thì đã có thể yên tâm là JDBC driver của MySQL đã
được cài đặt xong.
Kết nối vào hệ cơ sở dữ liệu MySQL:
Để kết nối và sử dụng một cơ sở dữ liệu từ Java applet, servlet hay
ứng dụng Java thì chúng ta cần thực hiện qua 3 bước:
1. Đăng kí/Nạp (các) driver
2. Thiết lập kết nối đến cơ sở dữ liệu
3. Gửi câu lệnh SQL và xử lý kết quả thu về
Bước đầu tiên để tạo ra một kết nối giữa ứng dụng Java và một cơ sở
dữ liệu là đăng kí một JDBC driver với máy ảo Java (JVM) mà ứng dụng
Java chạy trên đó. Với cơ chế kết nối truyền thống thì kết nối và tất cả các
hình thức giao tiếp với cơ sở dữ liệu đều do đối tượng DriverManager kiểm
soát.
Để thiết lập một đường kết nối, một JDBC driver thích hợp dùng cho
cơ sở dữ liệu mục tiêu phải được đăng kí với đối tượng DriverManager.
Việc đăng kí một driver đơn giản chỉ là việc nạp lớp driver vào JVM.
Chúng ta có thể làm điều đó bằng một số cách khác nhau.
Ví dụ:
try{
Class.forName (“com.mysql.jdbc.Driver”).newInstance ();
}
catch (Exception e){
System.err.println (“KHONG KET NOI DUOC”);
}
Các tài liệu về MySQL khuyến cáo bạn nên dùng cách trên. Phương
thức Class.forname() nhận một chuỗi làm đối số. Trong trường hợp bạn
dùng JDBC Driver của hãng MySQL AB cho MySQL bản 4.0 trở lên thì
chuỗi đó là:
com.mysql.jdbc.Driver
Bước tiếp theo sau khi bạn đã đăng kí JDBC Driver là thực hiện kết nối.
Toàn bộ công đoạn này được minh họa qua dòng mã sau:
Connection conn = DriverManager.getConnection(url, “myLogin”,
HVTH: Nguyễn Tuấn Trung Trang 13
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
“myPassword”);
Cách khác:
Connection conn;
conn = DriverManager.getConnection(url, “myLogin”, “myPassword”);
Đoạn mã trên rất tường minh. Phương thức getConnection() được
gọi để thực hiện một kết nối thực sự đến phần mềm máy chủ cơ sở dữ liệu.
Lớp DriverManager tạo ra một đối tượng Connection khi bạn gọi phương
thức getConnection(). Phương thức này nhận một chuỗi URL làm đối số.
Với MySQL thì chuỗi đó có thể là:
jdbc:mysql://127.0.0.1:3306/phonebooks
Nếu một trong các driver mà bạn cung cấp nhận ra địa chỉ JDBC
URL mà bạn cung cấp cho phương thức DriverManager.getConnection, thì
driver đó sẽ thiết lập đường kết nối đến MySQL xác định trong JDBC
URL.
Lớp DriverManager sẽ quản lý tất cả các chi tiết của việc thiết lập
đường kết nối bên dưới nên bạn không cần phải quan tâm gì thêm.
Đường kết nối do phương thức DriverManager.getConnection trả về
là một đường kết nối mở mà bạn có thể sử dụng để thông qua các lệnh
JDBC nhằm gửi các lệnh SQL tới MySQL. Ở đây chúng ta có đối tượng
conn chứa kết nối mở và chúng ta sẽ sử dụng chúng để thực hiện các ví dụ
thao tác trên MySQL.
CHƯƠNG III : GIẢI QUYẾT BÀI TOÁN
3.1. Xây dựng Server:
- Sơ đồ khối cho chương trình chính của Server như sau:
HVTH: Nguyễn Tuấn Trung Trang 14
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
- Tuy nhiên đây là chương trình đa truy cập, ngẫu nhiên, từ xa với số
lượng truy cập lớn, do đó phải xây dựng một Server có thể nhận kết nối từ
nhiều Client cùng lúc.
Sơ đồ khối cho MultipleSocketServer:
HVTH: Nguyễn Tuấn Trung Trang 15
Bắt đầu
Tạo giao diện
Đợi kết nối từ Client
Nhận kết nối
Sai
Đúng
Thực hiện giao tiếp với Client
Kết thúc
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
3.2. Xây dựng Client:
Sơ đồ khối cho chương trình chính của Client như sau:
HVTH: Nguyễn Tuấn Trung Trang 16
Bắt đầu
Tạo giao diện
Đợi kết nối từ các Client
Nhận kết nối
Sai
Đúng
Tạo một Thread mới cho
MultipleSocketServer
Kết thúc
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
3.3. Xây dựng Monitor để quản lí hệ thống:
Monitoring thực hiện các công việc sau:
- Quan sát các Client kết nối vào Server
- Quan sát các công việc mà các client thực hiện trên cơ sở dữ liệu
Để đảm bảo Monitoring luôn nhận được thông tin về các hoạt động
truy xuất dữ liệu giữa Client/Server, các hoạt động về việc kết nối và truy
xuất dữ liệu sẽ được ghi vào file txtketnoi.txt và txtthaotac.txt.
HVTH: Nguyễn Tuấn Trung Trang 17
Bắt đầu
Tạo giao diện
Kết nối đến Server
Thực hiện yêu cầu thêm, sửa,
xoá, xuất trên giao diện
Chuyển yêu cầu đến
Server
Nhận kết quả từ Server, xuất kết
quả ra màn hình
Kết thúc
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
3.4. Một số kết quả chương trình:
3.4.1. Khởi động server chờ kết nối từ client:
HVTH: Nguyễn Tuấn Trung Trang 18
Bắt đầu
Tạo giao diện
Kết nối đến Server
Thực hiện yêu cầu kiểm tra kết nối, kiểm
tra thao tác, thoát
Chuyển yêu cầu đến Server
Nhận kết quả từ Server, xuất kết quả ra
màn hình
Kết thúc
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
3.4.2. Client thực hiện kết nối đến server:
Khi đó Server sẽ hiển thị:
HVTH: Nguyễn Tuấn Trung Trang 19
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
3.4.3. Client thực hiện cập nhật dữ liệu:
Cửa sổ client sẽ hiển thị kết quả thực hiện thao tác cập nhật:
3.4.4. Client thực hiện chức năng hiển thị dữ liệu:
Chọn vào chức năng “Xuất”, Client sẽ hiển thị:
HVTH: Nguyễn Tuấn Trung Trang 20
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
3.4.5. Client thực hiện chức năng Sửa dữ liệu:
Ví dụ muốn sửa chủ thuê bao số điện thoại “0903686970” là
“Nguyen Van C” thành “Nguyen Van Z”, ta chọn chức năng “Sửa” và nhập
tên chủ thuê bao mới vào trường Name, lúc đó Client sẽ hiển thị:
Và tên chủ thuê bao mới sẽ được cập nhật:
HVTH: Nguyễn Tuấn Trung Trang 21
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
3.4.6. Client thực hiện chức năng Xóa dữ liệu:
Ví dụ muốn xóa chủ thuê bao “Nguyen Van Z” có số điện thoại
“0903686970”, ta chọn chức năng “Xóa” và nhập số điện thoại muốn xóa
vào trường Telephone number, lúc đó Client sẽ hiển thị:
Chủ thuê bao “Nguyen Van Z” đã được xóa khỏi danh sách:
HVTH: Nguyễn Tuấn Trung Trang 22
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
3.4.7. Monitoring kết nối server để giám sát hệ thống:
Chọn chức năng “KT kết nối” (kiểm tra kết nối), màn hình
monitoring sẽ hiển thị các thông báo kết nối tới server:
HVTH: Nguyễn Tuấn Trung Trang 23
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
Chọn chức năng “KT thao tác” (kiểm tra thao tác), màn hình
monitoring sẽ hiển thị các thao tác mà clien đã yêu cầu đối với server:
CHƯƠNG IV : KẾT LUẬN
4.1. Những vấn đề thực hiện được:
Thực hiện kết nối Client/Server, trong đó một Server có thể nhận
kết nối từ nhiều Client cùng lúc.
HVTH: Nguyễn Tuấn Trung Trang 24
Tiểu luận: Lập trình mạng nâng cao GVHD: PGS.TS. Lê Văn Sơn
Mỗi Client có thể kết nối vào cơ sở dữ liệu tại Server và thực hiện
các hoạt động thêm, sửa, xoá, xuất, thoát. Quá trình này có kiểm tra
tính gắn bó về dữ liệu.
Xây dựng Monitoring dùng để kiểm tra quá trình cập nhật dữ liệu
4.2. Hạn chế:
Hệ tin học phân tán cùng với việc lập trình phân tán thật sự là vấn
đề còn rất mới.
Chỉ bước đầu tìm hiểu và làm quen với ngôn ngữ lập trình Java
nên chương trình được viết chưa tối ưu, chưa khai thác hết được những đặc
điểm nổi trội của ngôn ngữ Java như: Giao diện chương trình, kế thừa,
đóng gói, tính mềm dẻo,
TÀI LIỆU THAM KHẢO
[1] Nguyễn Phương Lan, Hoàng Đức Hải, Java lập trình mạng, NXB Lao
động xã hội – 2006.
[2] TS. Lê Văn Sơn, Hệ tin học phân tán, NXB Đại học quốc gia TP
HCM – 2002.
[3] TS. Đoàn Văn Ban, Lập trình hướng đối tượng trong Java, Nhà xuất
bản khoa học và kỹ thuật – 2005.
HVTH: Nguyễn Tuấn Trung Trang 25