mô hình áp dụng
Trang 1I/ Mô hình áp dụng:
Chương trình minh họa sử dụng mô hình 3 lớp Tree-Tier Client / Server vì mô hình này có nhiều ưu điểm, giúp chương trình được chia xẻ giữa lớp client và lớp middle ware khiến việc chuyên sâu dễ dàng hơn.
Chương trình cho phép nhiều client kết nối đến một server (middle ware) hay ngược lại 1 client kết nối đến nhiều server, đồng thời trên mỗi client lại cho phép có nhiều kết nối đến server Giao tiếp giữa client và middle ware dựa trên công cụ Winsock, giao tiếp giữa lớp middle ware và server dựa trên sự hổ trợ mới nhất của Visual Basic 6 về cơ sở dữ liệu đó là dùng OLE
Lớp Middle Ware thực hiện các chức năng rất quan trọng không thể thiếu trong mô hình Client – Server
Trang 2 Visual Basic cung cấp công cụ Winsock để xây dựng ứng dụng Client / Server nó cho phép dùng 2 loại giao thức là UDP và TCP/IP Thông dụng nhất là dùng TCP/IP vì phù hợp nhu cầu nhiều user kết nối.
Ứng dụng server phải thiết lập thông số Localport để client có thể kết nối đến Sau đó dùng phương pháp Listen để lắng nghe yêu cầu đến Khi có yêu cầu đến, sự kiện ConnectionRequest xảy ra, dùng thuộc tính Accept để chấp nhận kết nối.
Ứng dụng client phải thiết lập thông số RemotePort = LocalPort mà server lắng nghe và phải biết địa chỉ IP hay tên của máy server để gán vào RemoteHost Sau đó dùng phương pháp Connect.
Sau khi đường nối được thiết lập, client và server có thể dể dàng trao đổi dữ liệu qua lại, dùng SendData, GetData để gởi và nhận dữ liệu Sự kiện DataArrival sẽ xảy ra khi có dữ liệu đến.
Khi đường truyền đóng lại thì sự kiện Close xảy ra, hoặc khi xảy ra lỗi thì sẽ xuất hiện sự kiện Error.
♦ winsockProperties
BytesReceied Property : thông báo số bytes hiện thời nhận được trong buffer Kết quả trả về là một số kiểu long integer.
LocalHostName Property : trả về tên của host cục bộ Kết quả trả về là một chuỗi.
Trang 3 LocalIP Property : trả về địa chỉ IP của host cục bộ Kết quả trả về là một chuỗi
LocalPort Property : trả về hay thiết lập một cổng kết nối dùng cho server Kết quả trả về là một số kiểu long integer.
Protocol Property : trả về hay thiết lập chuẩn sử dụng UDP hay TCP.
RemoteHost Property : trả về hay thiết lập địa chỉ IP kết nối đến một host Kết quả trả về là một chuỗi.
RemotePort Property : trả về hay thiết lập một cổng kết nối dùng cho client Kết quả trả về là một số kiểu long integer.
State Property: trả về trạng thái điều khiển thông qua các phương pháp và sự kiện.
Accept Method : dùng cho ứng dụng Server TCP Chấp nhận một kết nối đến Client, khi winsock đang ở trạng thái lắng nghe và xảy ra sự kiệnConnecttionRequest.
Close Method : dùng để ngắt một kết nối theo chuẩn TCP của ứng dụng Server hay Client.
GetData Method : dùng để lấy lại khối dữ liệu từ buffer và chứa nó trong một biến.
Listen Method : chờ đợi yêu cầu kết nối từ phía Client
SendData Method :truyền dữ liệu qua lại giữa Client và Server dưới dạng chuỗi.
Trang 4 Close Event : sự kiện này xuất hiện khi đường truyền bị ngắt Connect Event : sự kiện này xuất hiện sau khi đường truyền được
thiết lập.
ConnectionRequest Event : sự kiện này xuất hiện khi Server nhận được yêu cầu kết nối từ phía Client.
DataArrial Event : sự kiện này xuất hiện khi dữ liệu đến.
Settings for the State Property (winsock)
♦ Các loại frame
Tuy nhiên, do winsock không hổ trợ truyền trực tiếp các đối tượng nên phát sinh nhu cầu sử dụng các loại frame để trao đổi thông tin dưới dạng chuỗi :
• Mở đầu một frame là 1 byte để xác định loại frame (ID) , kế tiếp là byte chứa chiều dài của khối thông tin, cuối cùng là khối thông tin.
Trang 5IDChiều dài khối 1Khối 1 Chiều dài khối nKhối n
• Tuy nhiên do byte xác định chiều dài của khối thông tin chỉ tối đa là 255 nên với trường hợp khối thông tin lớn thì ta phải đưa chiều dài của nó vào trong dấu “[ ]“ Loại frame này có thể là một thành phần của loại frame ở trên.
IDChiều dài khối nhỏKhối nhỏ[ Chiều dài khối lớn ]Khối n
• Khối thông tin có thể bao gồm những khối thông tin nhỏ hơn, lúc này ta sẽ dùng dấu chấm “.” để phân cách.
• Cuối cùng là loại frame chỉ chứa ID và chuỗi thông tin.
Server khởi động trước và kết nối tới Oracle server, Sql server, lấy các thông tin về user, database và lưu trữ lại Quá trình này diển ra tự động, nếu vì lý do nào đó việc kết nối này không thành công thì ta phải kết nối bằng tay, nếu không mọi yêu cầu từ phía client sẽ bị từ chối Có thể sửa đổi các thông tin kết nối thông qua một bảng gồm các cột : Driver, host name, user ID, password, database Ngoài ra trong quá trình chạy, server còn định kỳ gởi các câu truy vấn tớùi các server để refresh các thông tin cho phù hợp, đồng thời còn có tác dụng xem các server có bị ngắt (down) chưa, việc làm này tránh cho ứng dụng bị treo.
IDKhối thông tin
Trang 6 Khi client gởi yêu cầu kết nối đến server, nếu có trong danh sách hợp lệ thì kết nối được chấp nhận, client sẽ chọn loại server để làm việc và chọn database do server gởi tới, nếu không chọn gì cả thì kết nối sẽ ngắt Một client có thể vừa có kết nối tới server vừa mở được dữ liệu trên Access.
Sau khi đã chọn database, client có thể thực hiện các thao tác sửa đổi cấu trúc hay xem, thêm, xóa, cập nhật thông tin (nếu được phép) Hoặc có thể trực tiếp gởi các câu query, server sẽ kiểm tra ngữ pháp câu query và gởi đến các server dữ liệu.
Như vậy server có nhiệm vụ quản lý các client, nhận các yêu cầu từ phía client, nếu là các câu query thì kiểm tra và sửa đổi chúng cho phù hợp với từng loại server, gởi các yêu cầu đến server, lấy kết quả, dịch ra dạng chuỗi và trả về cho client.
Về phía client, có nhiệm vụ tạo một giao diện để người dùng có thể thao tác dễ dàng trên dữ liệu Nó chuyển yêu cầu của người dùng đến server dưới dạng chuỗi, nhận kết quả trở về cũng dưới dạng chuỗi và chuyển thành dữ liệu, hiển thị lên cho người dùng.
Việc trao đổi qua lại giữa client và server thông qua công cụ winsock dưới các dạng frame nói trên.
Mô tả chi tiết việc thực hiện giao tiếp:
Server có một mảng các winsock và một mảng các đối tượng kết nối ADODB.Connection Client cũng có một winsock.
Đầu tiên server sẽ tạo ra một file sysserver.mdb gồm các bảng :
Trang 7• Connect lưu các thông tin driver, hostname, userID, password, database, cần thiết cho việc kết nối đến server thật.
• Setting gồm các thông tin autoconnect (True – False), test time : khoảng thời gian mà server thực hiện các câu query để cập nhật dữ liệu và thăm dò xem server còn tồn tại hay không, Query timeout :lưu trữ khoảng thời gian mà các câu query sẽ timeout.
• Client bao gồm userID, username, server, database, timelogin để quản lý các Client kết nối đến
• Ngoài ra còn có các bảng để chứa các thông tin về users và databases có trên các server Oracle và Sql.
Khi khởi động server sẽ đọc thông tin autoconnect trong bảng Setting, nếu giá trị là False thì nó sẽ không tự động kết nối Nếu giá trị là True thì server tiếp tục lấy các thông tin driver,server, userID, password, databases trong bảng Connect và lần lượt kết nối đến Oracle,Sql server Nếu quá trình kết nối không thành công (một trong hai server) thì việc tự động kết nối sẽ kết thúc Còn nếu thành công thì server sẽ lập tức gởi câu lệnh select tất cả các users và databases trên các server và lưu lại trong các bảng đã tạo tương ứng đồng thời lấy giá trị test time và kích cho một đồng hồ khởi động để sau mội khoảng thời gian test time thì server sẽ tự động gởi câu query đến các server Sau đó server sẽ vào trạng thái sẵn sàng lắng nghe.
Khi client gởi yêu cầu kết nối, nó sẽ gởi các thông tin : server, userID, password, loại server sẽ làm việc Server sẽ xem xét trong bảng lưu
Trang 8trữ, nếu user này không tồn tại thì không cho client kết nối, nếu user này tồn tại thì gởi một chuỗi các databases cho client chọn.
Client sẽ chọn một trong các databases và gởi đến cho server Server sẽ tạo ra một winsock và một kết nối ADO.
Nếu kết nối không thành công thì server sẽ đóng winsock lại và hủy bỏ kết nối.
Nếu kết nối thành công server sẽ thực hiện câu query tới server thật lấy toàn bộ cấu trúc của databases và chuyển sang dạng chuỗi gởi đến cho client.
Client nhận được chuỗi cấu trúc sẽ dịch trở lại và tạo một database tạm có cấu trúc tương ứng và hiển thị trên giao diện.
Mọi thao tác trên cơ sở dữ liệu thông qua giao diện đều là các câu query gởi đến cho server
Khi server nhận được một câu query, nó sẽ kiểm tra cú pháp cho phù hợp với từng loại server và lấy index của winsock tương ứng cũng là index của kết nối tương ứng rồi cho kết nối ADO (index) thực hiện câu query,lấy kết quả trả về
(có thể là thành công hay không thành công hoặc là một recordset) chuyển sang dạng chuỗi trả về cho client.
Client nhận được kết quả nếu là recordset thì chuyển từ dạng chuỗi sang recordset thật và hiển thị lên giao diện Nếu kết quả là thành công hay không thành công thì tương ứng sẽ thực thi hay không thực thi đối với dữ liệu trên client và hiển thị thông báo tương ứng.