Bài tập lớn hệ phân tán- Quản lý xe máy
Bài tập lớn Hệ Phân Tán Quản lý xe máy BÀI TẬP LỚN HỆ PHÂN TÁN Đề tài: QUẢN LÝ XE MÁY Nhóm 2 I. Giới thiệu đề tài: - Ngôn ngữ lập trinh sử dụng: JaVa. - Môi trường phát triển: NetBeans IDE 6.0.1 - Cơ sở dữ liệu: Microsoft Access. - Cách thức lập trình: sử dụng socket, giao thức TCP. - Mô hình: Client-Server. Nhiều client có thể kết nối tới 1 server. - Kiến trúc: 3 tầng (3-tier architecture). II. Tìm hiểu giao thức TCP: TCP ( Transmission Control Protocol) là một giao thức hướng kết nối, nó cung cấp một đường truyền dữ liệu tin cậy giữa hai máy tính. Tính tin cậy thể hiện ở việc nó đảm bảo dữ liệu được gửi sẽ đến được đích và theo đúng thứ tự như khi nó được gửi. Tính tin cậy của đường truyền được thể hiện ở hai đặc điểm sau: • Mọi gói tin cần gửi sẽ đến được đích. Để làm điều này thì mỗi lần phía gửi gửi xong một gói tin nó sẽ chờ nhận một xác nhận từ bên nhận rằng đã nhận được gói tin. Nếu sau một khoảng thời gian mà phía gửi không nhận được thông tin xác nhận phản hồi thì nó sẽ phát lại gói tin. Việc phát lại sẽ được tiến hành cho đến khi việc truyền tin thành công, tuy nhiên sau một số lần phát lại max nào đó mà vẫn chưa thành công thì phía gửi có thể suy ra là không thể truyền tin được và sẽ dừng việc phát tin. • Các gói tin sẽ được trình ứng dụng nhận được theo đúng thứ tự như chúng được gửi. Bởi các gói tin có thể được dẫn đi trên mạng theo nhiều con đường khác nhau trước khi tới đích nên thứ tự khi tới đích của chúng có thể không giống như khi chúng được phát. Do đó để đảm bảo có thể sắp xếp lại các gói tin ở phía nhận theo đúng thứ tự như khi chúng được gửi, giao thức TCP sẽ gắn vào mỗi gói tin một thông tin cho biết thứ tự của chúng trong cả khối tin chung được phát nhờ vậy bên nhận có thể sắp xếp lại các gói tin theo đúng thứ tự của chúng. Như vậy có thể thấy TCP cung cấp cho chúng ta một kênh truyền thông điểm - điểm phục vụ cho các ứng dụng đòi hỏi giao tiếp tin cậy như HTTP ( HyperText Tranfer Protocol), FTP ( File Tranfer Protocol), Telnet… Trang 1 Bài tập lớn Hệ Phân Tán Quản lý xe máy Các ứng dụng này đòi hỏi một kênh giao tiếp tin cậy bởi thứ tự của dữ liệu được gửi và nhận là yếu tố quyết định đến sự thành công hay thất bại của chúng. Hãy lấy ví dụng khi HTTP được sử dụng để đọc thông tin từ một điạ chỉ URL, dữ liệu phải được nhận theo đúng thứ tự mà chúng được gửi nếu không thứ mà bạn nhận được có thể là một trang HTML với nội dung lộn xộn hoặc một file zip bị lỗi và không thể giải nén III. Tìm hiểu về các Cổng giao tiếp: Cổng là một cơ chế cho phép dữ liệu được truyền đến đúng ứng dụng đang chạy trên máy tính. Chúng ta biết rằng mỗi máy tính chỉ có một kết nối vật lý với mạng, tất cả các dữ liệu cần truyền cho máy tính khác sẽ được mang đi bởi kết nối này. Tuy nhiên chúng ta cũng lại thấy rằng trên mỗi máy tính không chỉ có một mà có thể có nhiều ứng dụng ( chương trình) cùng chạy và cùng có nhu cầu giao tiếp qua mạng do đó dữ liệu máy tính nhận được thông qua kết nối với mạng cần phải được chuyển đến đúng ứng dụng cần nó vì vậy máy tính cần phải biết dữ liệu mà nó nhận được được phía gửi hi vọng chuyển đến ứng dung nào. Việc này được thực hiện thông qua việc sử dụng các cổng: • Mỗi ứng dụng chạy trên máy tính sẽ được gắn với một cổng logic, đó là một số 16 bit. Các cổng có giá trị từ 0 đến 65 535 ( 2 16 -1), trong đó các cổng từ 0 tới 1023 bị hạn chế, chúng chủ yếu được sử dụng cho các dịch vụ phổ biến như HTTP, FTP… , các cổng còn lại được sử dụng cho các ứng dụng của người dùng. • Dữ liệu truyền qua mạng Internet chứa trong nó thông tin để xác định định danh và cổng trên máy tính mà nó cần đến. Định danh của mỗi máy tính được xác định bằng một địa chia IP có chiều dài 32 bit. Việc gán một ứng dụng với một cổng có thể được thực hiện bởi chương trình hoặc bởi hệ điều hành tùy theo mục đích sử dụng của ứng dụng. Điều này ta sẽ xem xét cụ thể trong phần lập trình socket sau. IV. Tìm hiểu về Socket: Một Socket là một điểm cuối trong một kết nối giữa hai chương trình đang chạy trên mạng. Lập trình với Socket là một phương pháp để thiết lập kết nối truyền thông giữa một chương trình yêu cầu dịch vụ ( được gán nhãn là Client) và một chương trình cung cấp dịch vụ ( được gán nhãn là Server) trên mạng hoặc trên cùng một máy tính. 1. Nguyên lý hoạt động Trước hết chúng ta hãy xem làm thế nào các socket có thể xác định đựợc nhau. Khi một chương trình tạo ra một socket, một định danh dạng số sẽ được gán cho socket, định danh này chính là cổng mà chúng ta đã tìm hiểu ở trên. Việc gán số cổng này cho socket có thể được thực hiện bởi chương trình Trang 2 Bài tập lớn Hệ Phân Tán Quản lý xe máy hoặc bởi hệ điều hành tùy theo cách socket được sử dụng như thế nào. Trong mỗi gói tin mà socket gửi đi có chứa hai thông tin để xác định đích đến của gói tin: + Một địa chỉ mạng để xác định hệ thống sẽ nhận gói tin. + Một số định danh cổng để nói cho hệ thống đích biết socket nào trên nó sẽ nhận dữ liệu. Nhờ hai thông tin này mà gói tin có thể đến được đúng máy tính chứa socket mà nó cần đến ( nhờ địa chỉ mạng) và được phân phối đến đúng socket đích ( nhờ địa chỉ cổng của socket đích). Bởi dưới góc độ lập trình các socket thường làm việc theo cặp, một socket đóng vai trò làm client còn các socket khác đóng vai trò như một server. Socket phía server xác định một cổng cho giao tiếp mạng, sau đó chờ nghe dữ liệu mà client gửi tới nó bằng client socket. Do đó các cổng cho server socket phải được biết bởi các chương trình client. Ví dụ server FTP sử dụng một socket để nghe tại cổng 21 do đó nếu một chương trình client muốn giao tiếp với server FTP nó cần phải kết nối đến socket đang nghe tại cổng 21. Như vậy cổng của socket phía server được xác định bởi chương trình, ngược lại cổng cho client socket được xác định bởi hệ điều hành. Khi một socket phía client gửi một gói tin tới socket phía server thì trong gói tin đã có chứa thông tin về địa chỉ của hệ thống client và cổng của socket phía client nên server hoàn toàn có thể gửi thông tin phản hồi cho client. Chúng ta có thể khái quát quá trình trao đổi dữ liệu thông qua các socket như sau: 1. Chương trình phía Server tạo ra một socket, socket này được chương trìnhgắn với một cổng trên server. Sau khi đựợc tạo ra socket này ( mà từ nay ta sẽ gọi là socket phía server) sẽ chờ nghe yêu cầu từ phía client. 2. Khi chương trình phía Client cần kết nối với một Server, nó cũng tạo ra một socket, socket này cũng được hệ điều hành gắn với một cổng. Chương trình Client sẽ cung cấp cho Socket của nó ( mà từ nay ta sẽ gọi là Socket phía Client) điạ chỉ mạng và cổng của Socket phía Server và yêu cầu thực hiện kết nối ( nếu chương trình định sử dụng giao thức hướng kết nối) hoặc truyền dữ liệu ( nếu chương trình sử dụng giao thức không hướng kết nối). 3. Chương trình phía Server và chương trình phía Client trao đổi dữ liệu vớinhau bằng cách đọc từ Socket hoặc ghi vào Socket của minh. Các socket ở hai phía nhận dữ liệu từ ứng dụng và đóng gói để gửi đi hoặc nhận các dữ liệu được gửi đến và chuyển cho chương trình ứng dụng bởi socket ở cả hai phía đều biết được địa chỉ mạng và điạ chỉ cổng của nhau. Ở bước thứ hai chúng ta thấy chương trình ứng dụng phải lựa chọn giao thức mà nó định sử dụng để trao đổi dữ liệu. Tùy theo việc chúng ta sử dụng giao thức nào ( TCP hay UDP) mà cách thức xử lý trước yêu cầu của client có thể khác. Sau đây chúng ta sẽ xem xét chi tiết các thức trao đổi dữ liệu của Socket ứng với từng loại giao thức. Trang 3 Bài tập lớn Hệ Phân Tán Quản lý xe máy 2. Socket hỗ trợ TCP a. Ở phía Server: Khi một ứng dụng trên server hoạt động nó sẽ tạo ra một socket và đăng ký với server một cổng ứng dụng và chờ đợi yêu cầu kết nối từphía client qua cổng này. Hình 4-2: Client gửi yêu cầu đến Server b. Phía client: Nó biết địa chỉ của máy trên đó server đang chạy và cổng và server đang chờ nghe yêu cầu. Do đó khi muốn kết nối đến Server, nó cũng tạo ra một socket chứa địa chỉ máy client và cổng của ứng dụng trên máy client đồng thời client sẽ cung cấp cho socket của nó địa chỉ và cổng của Server mà nó cần kết nối và yêu cầu Socket thực hiện kết nối. KhiServer nhận được yêu cầu kết nối từ Client, nếu nó chấp nhận thì server sẽ sinh ra một socket mới được gắn với một cổng khác với cổng mà nó đang nghe yêu cầu. Sở dĩ server làm như vậy bởi nó cần cổng cũ để tiếp tục nghe yêu cầu từ phía client trong khi vẫn cần một kết nối với client. Hình 4-2: Server chấp nhận yêu cầu và tạo một socket để phục vụ client Sau đó chương trình ứng dụng phía Server sẽ gửi thông báo chấp nhận kết nối cho Client cùng thông tin về địa chỉ cổng mới của socket mà nó dành cho Client. c. Quay lại phía client, nếu kết nối được chấp nhận nghĩa là socket của nó đã được tạo ra thành công và nó có thể sử dụng socket để giao tiếp với server bằng cách viết và ghi tới socket theo cách giao tiếp với một tài nguyên trên máy tính thông thường. 3. Socket hỗ trợ UDP a. Ở phía Server: Khi một ứng dụng trên server hoạt động nó sẽ tạo ra một socket và đăng ký với server một cổng ứng dụng và chờ đợi yêu cầu kết nối từ phía client qua cổng này. Trang 4 Bài tập lớn Hệ Phân Tán Quản lý xe máy b. Phía client: Nó biết địa chỉ của máy trên đó server đang chạy và cổng và server đang chờ nghe yêu cầu. Do đó khi muốn giao tiếp với Server, nó cũng tạo ra một socket chứa địa chỉ máy client và cổng của ứng dụng trên máy client đồng thời client sẽ cung cấp cho socket của nó địa chỉ và cổng của Server mà nó cần kết nối. Khi client muốn gửi tin đến Server nó sẽ chuyển dữ liệu cho socket của minh, socket này sẽ chuyển thẳng gói tin mà client muốn gửi tới server dưới dạng một datagram có chứa địa chỉ máy server và cổng mà server đang chờ nghe yêu cầu. Như vậy không hề có môt kết nối nào được thực hiện giữa client với server và server cũng không cần tạo ra một socket khác để kết nối với client thay vào đó server dùng ngay cổng ban đầu để trao đổi dữ liệu. V. Xây dựng chương trình: 1. Cơ sở dữ liệu: gồm 1 table Xe: + xeID(nvarchar): id xe. + xeName(nvarchar): tên xe. + xeColor(nvarchar): màu xe. + xePrice(double): giá xe. + xeMark(nvarchar): hiệu xe. + xeQuantity(int): số lượng xe. 2. Chương trình: gồm 2 phần: Client và Server. + Server: có nhiệm vụ lắng nghe các kết nối từ các client, nhận yêu cầu từ các client, xử lý các yêu cầu đó (thao tác với dữ liệu), sau đó gửi kết quả ngược lại cho client. Hình 2-1 : Giao diện Server Trang 5 Bài tập lớn Hệ Phân Tán Quản lý xe máy + Client: kết nối tới server, gửi yêu cầu (tìm, thêm, xóa, cập nhật thông tin xe máy) đến server, sau đó nhận kết quả từ server trả về và hiện thị lên màn hình. Hình 2-2: Giao diện Client VI. Mô tả hoạt động: + Khởi động Server: Hình 3-1: Khởi động Server Trang 6 Bài tập lớn Hệ Phân Tán Quản lý xe máy + Client thực hiện kết nối đến Server: Hình 3-2: Client thực hiện kết nối đến Server. + Mỗi lần có 1 Client kết nối đến hoặc ngắt kết nối, Server sẽ ghi lại các hoạt động đó cũng như địa chỉ IP của IP. Trang 7 Bài tập lớn Hệ Phân Tán Quản lý xe máy Hình 3-3: Server thông báo có 1 Client kết nối đến Hình 3-4: Server thông báo có 3 Client kết nối đến Hình 3-5: Server thông báo vừa có 1 Client ngắt kết nối + Thêm 1 loại xe máy: Trang 8 Bài tập lớn Hệ Phân Tán Quản lý xe máy Hình 3-6: Thêm vào 1 loại xe máy + Tìm xe máy (theo id): Hình 3-7: Tìm 1 loại xe máy Trang 9 Bài tập lớn Hệ Phân Tán Quản lý xe máy + Xóa 1 loại xe máy: Hình 3-8: Xóa 1 loại xe máy + Sửa, cập nhật thông tin 1 loại xe máy: Trang 10 [...].. .Bài tập lớn Hệ Phân Tán Quản lý xe máy Hình 3-9: Cập nhật thông tin 1 loại xe máy VII Phụ lục: • Chạy chương trình từ source code: Sử dụng NetBeans IDE import project Chạy 2 file: +ServerSide.java (package com.socket.server): Run > Run . loại xe máy: Trang 8 Bài tập lớn Hệ Phân Tán Quản lý xe máy Hình 3-6: Thêm vào 1 loại xe máy + Tìm xe máy (theo id): Hình 3-7: Tìm 1 loại xe máy Trang 9 Bài tập lớn Hệ Phân Tán Quản. Hệ Phân Tán Quản lý xe máy + Xóa 1 loại xe máy: Hình 3-8: Xóa 1 loại xe máy + Sửa, cập nhật thông tin 1 loại xe máy: Trang 10 Bài tập lớn Hệ Phân Tán Quản lý xe máy Hình 3-9: Cập. 1 table Xe: + xeID(nvarchar): id xe. + xeName(nvarchar): tên xe. + xeColor(nvarchar): màu xe. + xePrice(double): giá xe. + xeMark(nvarchar): hiệu xe. + xeQuantity(int): số lượng xe. 2. Chương