Chương 1: TỔNG QUAN VỀ LẬP TRÌNH SOCKET VÀ MÃ HÓA BÍ MẬT TRONG C# 1.Tổng quan về mô hình Client/Server 1. Khái niệm mô hình Client/Server Client/Server là mô hình mạng máy tính gồm có 2 thành phần chính đó là máy khách (Client) và máy chủ (Server). Server chính là nơi giúp lưu trữ tài nguyên cũng như cài đặt các chương trình dịch vụ theo đúng như yêu cầu của Client. Ngược lại, Client bao gồm máy tính cũng như các loại thiết bị điện tử nói chung sẽ tiến hành gửi yêu cầu đến Server.
Mô hình Client/Server Mô hình mạng Client/Server sẽ cho phép mạng tập trung các ứng dụng có cùng chức năng tại một hoặc nhiều dịch vụ file chuyên dụng. Chúng sẽ trở thành trung tâm của hệ thống. Hệ điều hành của mô hình Client/Server sẽ cho phép người dùng chia sẻ đồng thời cùng một loại tài nguyên mà không giới hạn vị trí địa lý. Nguyên tắc hoạt động của mô hình Client/Server 1.Client Người dùng đưa ra yêu cầu tại Client.
Máy Client chạy một chương trình ứng dụng có chức năng : - Cung cấp giao diện cho người dùng. - Định dạng yêu cầu cung cấp dữ liệu. - Hiển thị dữ liệu nó nhận lại từ máy Server. Trong môi trường Client/Server, máy Server không chứa phần mềm giao diện người dùng.
Máy Client có nhiệm vụ trình bày dữ liệu theo hình thức hữu ích. Chẳng hạn với giao diện người dùng và lập báo biểu. Chương trình ứng dụng trên máy Server tiếp nhận những chỉ thị từ người dùng, chuẩn bị chúng cho máy Server, rồi gởi một yêu cầu cung cấp thông tin cụ thể đến máy Server. Máy Server xử lý yêu cầu, định vị thông tin tích hợp, rồi gởi thông tin tìm được qua mạng đến máy Client.
Máy Client sau đó sẽ “đẩy” thông tin ra giao diện để hiển thị thông tin trước người dùng.Server Máy Server trong môi trường Client/Server chuyên dùng để lưu trữ và quản lý dữ liệu. Đây là nơi xảy ra hầu hết hoạt động thực của cơ sở dữ liệu. Máy Server tiếp nhận các yêu cầu có cấu trúc từ phía máy Client, xử lý chúng, rồi gửi trả thông tin được yêu cầu và trở lại máy Client qua mạng. Ưu và nhược điểm của mô hình Client/Server 1.Ưu điểm - Tập trung: Ưu điểm đầu tiên của mô hình Client/Server kiểu mạng khách chủ đó chính là khả năng kiểm soát tập trung (Centralization) đã được tích hợp sẵn.
Theo như mô hình này thì tất cả mọi thông tin cần thiết đều sẽ được đặt ở một vị trí duy nhất. Đây là một ưu điểm vô cùng hữu ích được những người quản trị viên mạng yêu thích bởi vì họ có thể toàn quyền quản lý cũng như điều hành mọi việc. Tính năng này giúp cho mọi sự cố trong mạng đều sẽ được giải quyết ở cùng một nơi thống nhất. Đồng thời, việc cập nhật cơ sở tài nguyên, dữ liệu cũng sẽ dễ dàng hơn rất nhiều.
5 - Bảo mật: Trong mạng Client/Server, tất cả các dữ liệu đều sẽ được bảo vệ một cách tối đa nhờ vào hệ thống kiến trúc tập trung của mạng. Thông qua đó, nó sẽ giúp người dùng kiểm soát truy cập để chỉ có những ai được cấp quyền truy cập thì mới được thực hiện các thao tác cần thiết. Muốn làm như vậy, chúng ta cần phải áp đặt thông tin đăng nhập cũng như Username hay Password. Bên cạnh đó, nếu dữ liệu của chúng ta bị mất thì các file sẽ được khôi phục một cách vô cùng dễ dàng chỉ từ một bản sao lưu duy nhất mà thôi.
- Khả năng mở rộng: Mô hình mạng kết nối Client/Server có khả năng mở rộng vô cùng tốt. Chỉ cần người dùng cần sử dụng bất cứ lúc nào thì họ cũng có thể tăng được số lượng tài nguyên của mình. Ví dụ như số Client hoặc Server. Nhờ đó mà chúng ta có thể tăng kích thước của Server một cách dễ dàng mà không bị gián đoạn nhiều.
- Khả năng truy cập: Hoàn toàn không hề có sự phân biệt giữa các vị trí hay nền tảng với nhau. Tất cả mọi Client đều có khả năng đăng nhập được vào hệ thống mạng máy tính. Điều này sẽ giúp cho tất cả các nhân viên đều có thể truy cập thông tin của công ty một cách dễ dàng mà không cần phải dùng một terminal mode hoặc một bộ xử lý nào khác.Nhược điểm - Tắc nghẽn lưu lượng: Nói về nhược điểm lớn nhất của mô hình mạng Client/Server đó chính là tắc nghẽn lưu lượng. Trong trường hợp có quá nhiều Client tạo request từ cùng một Server thì nó có thể sẽ làm cho kết nối chậm hơn.
Trong trường hợp xấu nhất còn có thể xuất hiện hiện tượng crash. Khi một Server bị quá tải thì sẽ tạo ra nhiều vấn đề khi truy cập thông tin. - Độ bền: Client/Server là mạng tập trung chính vì thế, khi Server chính xảy ra sự cố hoặc bị nhiễu thì cũng đồng nghĩa với việc toàn bộ hệ thống mạng sẽ bị gián đoạn. Như vậy, bạn cần chú ý đó là mạng thiếu tính ổn định và độ bền.
Bạn cần chú ý khi thực hiện. - Chi phí: Chi phí được sử dụng để thiết lập và bảo trì Server trong Client/Server thường sẽ khá cao. Lý do là vì các hệ thống mạng có sức mạnh rất 6 lớn cũng đồng nghĩa với việc giá để chi cho việc này là rất đắt. Chính vì vậy, không phải ai cũng có khả năng chi trả và sử dụng.
- Bảo trì: Khi các Server thực hiện triển khai để làm việc thì nó cũng sẽ hoạt động một cách không ngừng nghỉ. Điều này đồng nghĩa với việc chúng ta cần phải quan tâm đến việc bảo trì hệ thống đúng mức. Khi xảy ra bất cứ vấn đề gì cũng cần phải giải quyết ngay lập tức. Vậy nên, cần phải có một nhà quản lý mạng chuyên biệt để tiến hành duy trì hoạt động của Server khi chúng được đưa vào và sử dụng.
- Tài nguyên: Một điều mà chúng ta rất cần phải lưu ý đó chính là không phải tất cả tài nguyên hiện có trên Server đều sử dụng được. Ví dụ một cách đơn giản đó chính là chúng ta không thể in trực tiếp được tài liệu từ trên web cũng như tiến hành chỉnh sửa bất kỳ một thông tin nào trên ổ cứng của Client cả.Lập trình Client/Server với Socket trong C# 1. Giới thiệu về Socket Socket là một giao diện lập trình ứng dụng (API – Application Programming Interface). Nó được giới thiệu lần đầu tiên trong ấn bản UNIX – BSD 4.2 dưới dạng các hàm hệ thống theo cú pháp ngôn ngữ C (socket(), bind(), connect(), send(), receive(), read(), write(), close(),.
Ngày nay, Socket được hỗ trợ trong hầu hết các hệ điều hành như MS Windows, Linux và được sử dụng trong nhiều ngôn ngữ lập trình khác nhau: như C, C++, Java, Visual Basic, Visual C++,. Socket cho phép thiết lập các kênh giao tiếp mà hai đầu kênh được đánh dấu bởi hai cổng (port). Thông qua các cổng này một quá trình có thể nhận và gởi dữ liệu với các quá trình khác. Mô hình Socket 7 1.
Số hiệu cổng của Socket Để có thể thực hiện các cuộc giao tiếp, một trong hai quá trình phải công bố số hiệu cổng của socket mà mình sử dụng. Mỗi cổng giao tiếp thể hiện một địa chỉ xác định trong hệ thống. Khi quá trình được gán một số hiệu cổng, nó có thể nhận dữ liệu gởi đến cổng này từ các quá trình khác. Quá trình còn lại cũng được yêu cầu tạo ra một socket.
Ngoài số hiệu cổng, hai bên giao tiếp còn phải biết địa chỉ IP của nhau. Địa chỉ IP giúp phân biệt máy tính này với máy tính kia trên mạng TCP/IP. Trong khi số hiệu cổng dùng để phân biệt các quá trình khác nhau trên cùng một máy tính. Cổng trong Socket Trong hình trên, địa chỉ của quá trình B1 được xác định bằng 2 thông tin: (Host B, Port B1): Địa chỉ máy tính có thể là địa chỉ IP dạng 203.149 hay là địa chỉ theo dạng tên miền như www.vn Số hiệu cổng gán cho Socket phải duy nhất trên phạm vi máy tính đó, có giá trị trong khoảng từ 0 đến 65535 (16 bits).
Trong đó, các cổng từ 1 đến 1023 được gọi là cổng hệ thống được dành riêng cho các quá trình của hệ thống. Các cổng mặc định của 1 số dịch vụ mạng thông dụng: Số hiệu cổng Quá trình hệ thống 7 Dịch vụ Echo 21 Dịch vụ FTP 23 Dịch vụ Telnet 8 25 Dịch vụ E – mail (SMTP) 80 Dịch vụ web (HTTP) 110 Dịch vụ E – mail (POP) 1. Xây dựng ứng dụng Client/Server với Socket 1.Mô hình Client/Server sử dụng socket ở chế độ có kết nối (TCP) Hình 1. Mô hình Client/Server sử dụng Socket ở chế độ có kết nối (TCP) Có thể phân thành 4 giai đoạn như sau: Giai đoạn 1: Server tạo Socket, gán số hiệu cổng và lắng nghe yêu cầu nối kết.
Server sẵn sàng phục vụ Client.socket(): Server yêu cầu tạo một socket để có thể sử dụng các dịch vụ của tầng vận chuyển. o bind(): Server yêu cầu gán số hiệu cổng (port) cho socket. o listen(): Server lắng nghe các yêu cầu nối kết từ các Client trên cổng đã được gán. Giai đoạn 2: Client tạo Socket, yêu cầu thiết lập một nối kết với Server.
o socket(): Client yêu cầu tạo một socket để có thể sử dụng các dịch vụ của tầng vận chuyển, thông thường hệ thống tự động gán một số hiệu cổng còn rảnh cho socket của Client. o connect(): Client gởi yêu cầu nối kết đến Server có địa chỉ IP và Port xác định. 9 o accept(): Server chấp nhận nối kết của Client, khi đó một kênh giao tiếp ảo được hình thành, Client và Server có thể trao đổi thông tin với nhau thông qua kênh ảo này. Giai đoạn 3: Trao đổi thông tin giữa Client và Server.
o Sau khi chấp nhận yêu cầu nối kết, thông thường Server thực hiện lệnh read() và nghẽn cho đến khi có thông điệp yêu cầu (Request Message) từ Client gởi đến. o Server phân tích và thực thi yêu cầu. Kết quả sẽ được gởi về Client bằng lệnh write(). o Sau khi gởi yêu cầu bằng lệnh write(), client chờ nhận thông điệp kết quả (ReplyMessage) từ Server bằng lệnh read().
Giai đoạn 4: Kết thúc phiên làm việc. o Các câu lệnh read(), write() có thể được thưc hiện nhiều lần (ký hiệu bằng hình ellipse). o Kênh ảo sẽ bị xóa khi Server hoặc Client đóng socket bằng lệnh close().Mô hình Client/Server sử dụng socket ở chế độ không kết nối (UDP) Hình 1. Mô hình Client/Server sử dụng socket ở chế độ không kết nối (UDP) 10 Có thể phân thành 3 giai đoạn như sau: Giai đoạn 1: Server tạo Socket – gán số hiệu cổng.