KỸ THUẬT LẬP TRÌNH MẠNG
Tổng quan về lập trình mạng
1.1.1 Mô hình tham khảo 7 tầng OSI
Mô hình kết nối hệ thống mở (OSI) được Tổ chức quốc tế về tiêu chuẩn hoá ISO phát triển nhằm cung cấp một khuôn khổ chuẩn cho các nhà sản xuất và cung cấp sản phẩm viễn thông Mô hình này không chỉ hỗ trợ việc phát triển các sản phẩm viễn thông mà còn thúc đẩy kết nối giữa các hệ thống và modun hoá các thành phần trong mạng viễn thông Chức năng của mô hình OSI là tạo ra một môi trường chuẩn mực cho việc giao tiếp và tương tác giữa các thiết bị mạng.
- Cung cấp kiến thức về hoạt động của kết nối liên mạng
- Đƣa ra trình tự công việc để thiết lập và thực hiện một giao thức cho kết nối các thiết bị trên mạng
Mô hình OSI còn có một số thuận lợi sau :
Chia nhỏ các hoạt động phức tạp của mạng thành các phần công việc đơn giản giúp các nhà thiết kế dễ dàng phát triển từng mô-đun chức năng Điều này cũng cung cấp khả năng định nghĩa các chuẩn giao tiếp có tính tương thích cao, nâng cao hiệu quả và khả năng tích hợp trong hệ thống mạng.
―plug and play‖ và tích hợp nhiều nhà cung cấp sản phẩm b) Cấu trúc mô hình OSI
Mô hình OSI gồm 7 lớp (level), mỗi lớp thực hiện các chức năng riêng cho hoạt động kết nối mạng
Tầng 1: Tầng vật lí (Physical Layer)
Tầng vật lý định nghĩa các đặc tả về điện và vật lý cho thiết bị mạng, bao gồm bố trí chân cắm, hiệu điện thế và đặc tả cáp nối Các thiết bị thuộc tầng vật lý như Hub, bộ lặp (repeater), thiết bị tiếp hợp mạng (network adapter) và thiết bị tiếp hợp kênh máy chủ (Host Bus Adapter - HBA) trong mạng lưu trữ (Storage Area Network) đều thực hiện các chức năng và dịch vụ cơ bản.
+ Thiết lập hoặc ngắt mạch kết nối điện (electrical connection) với một môi trường truyền dẫn phương tiện truyền thông (transmission medium)
Tham gia vào quy trình chia sẻ hiệu quả tài nguyên truyền thông giữa nhiều người dùng, giúp giải quyết tranh chấp tài nguyên và điều khiển lưu lượng.
Điều biến là quá trình chuyển đổi giữa biểu diễn dữ liệu số của các thiết bị người dùng và các tín hiệu tương ứng được truyền qua kênh truyền thông.
Tầng 2: Tầng liên kết dữ liệu (Data Link Layer)
Tầng liên kết dữ liệu cung cấp chức năng và quy trình truyền dữ liệu giữa các thực thể mạng, đồng thời phát hiện và sửa chữa lỗi trong tầng vật lý Địa chỉ trong tầng này là địa chỉ vật lý (địa chỉ MAC), được mã hóa cứng vào thẻ mạng trong quá trình sản xuất Hệ thống xác định địa chỉ này theo kiểu không có đẳng cấp (flat scheme).
Tầng 3: Tầng mạng (Network Layer)
Tầng mạng cung cấp chức năng và quy trình truyền dữ liệu từ nguồn đến đích qua nhiều mạng, đồng thời duy trì chất lượng dịch vụ yêu cầu Tầng này thực hiện định tuyến, với các thiết bị định tuyến (router) gửi dữ liệu khắp mạng mở rộng, tạo điều kiện cho việc liên mạng Ngoài ra, có thiết bị chuyển mạch tầng 3, hay còn gọi là chuyển mạch IP Hệ thống này sử dụng địa chỉ lôgic, được thiết kế bởi kỹ sư mạng, với cấu trúc phả hệ Giao thức IP là ví dụ điển hình của giao thức tầng 3.
Tầng 4: Tầng giao vận (Transport Layer)
Tầng giao vận cung cấp dịch vụ chuyển dữ liệu chuyên dụng giữa các người dùng tại đầu cuối, giúp các tầng trên không phải lo lắng về việc truyền dữ liệu đáng tin cậy và hiệu quả Tầng này kiểm soát độ tin cậy của kết nối và sử dụng các giao thức có định hướng trạng thái và kết nối, cho phép theo dõi các gói tin và truyền lại các gói bị thất bại, với TCP là một ví dụ điển hình Tại tầng 4, các thông điệp được chuyển đổi thành các gói tin TCP hoặc UDP, và địa chỉ được đánh dấu bằng address ports để phân biệt các ứng dụng trao đổi.
Tầng 5: Tầng phiên (Session layer)
Tầng phiên trong mô hình OSI quản lý các hội thoại giữa máy tính, thiết lập và kết thúc kết nối giữa ứng dụng địa phương và ứng dụng từ xa Tầng này hỗ trợ hoạt động song công, bán song công và đơn công, đồng thời thiết lập quy trình đánh dấu điểm hoàn thành để phục hồi truyền thông nhanh chóng khi có lỗi Nó cũng thực hiện các chức năng như trì hoãn, kết thúc và khởi động lại Tầng phiên đảm nhận trách nhiệm "ngắt mạch nhẹ nhàng" cho các phiên giao dịch và kiểm tra, phục hồi phiên, mặc dù chức năng này ít được sử dụng trong bộ giao thức TCP/IP.
Tầng 6: Tầng trình diễn (Presentation layer)
Lớp trình diễn hoạt động như tầng dữ liệu trên mạng, có nhiệm vụ chuyển đổi dữ liệu giữa tầng Application và định dạng chung Tại máy tính gửi, lớp này dịch dữ liệu từ tầng Application sang định dạng chung, và tại máy tính nhận, nó chuyển đổi từ định dạng chung về định dạng của tầng Application Các chức năng chính của lớp trình diễn bao gồm: chuyển đổi mã ký tự từ ASCII sang EBCDIC, chuyển đổi kiểu dữ liệu như từ số nguyên sang số dấu phẩy động, nén dữ liệu để giảm dung lượng truyền tải trên mạng, và mã hóa, giải mã dữ liệu nhằm đảm bảo an toàn thông tin.
Tầng 7: Tầng ứng dụng (Application layer)
Tầng ứng dụng là tầng gần gũi nhất với người sử dụng, cung cấp phương tiện truy cập thông tin và dữ liệu qua các chương trình ứng dụng Đây là giao diện chính để người dùng tương tác với ứng dụng và mạng Một số ví dụ tiêu biểu về các ứng dụng trong tầng này bao gồm Telnet, Giao thức truyền tập tin FTP, Giao thức truyền thư điện tử SMTP, HTTP và X.400 Mail remote.
IP là một họ giao thức để cung cấp phương tiện truyền thông liên mạng và nó đƣợc cấu trúc theo kiểu phân cấp
Khác với mô hình OSI tầng liên mạng sử dụng giao thức kết nối mạng
IP không liên kết là hạt nhân hoạt động của Internet, cho phép kết nối linh hoạt giữa các mạng vật lý khác nhau như Ethernet, Token Ring và X.25 Các thuật toán định tuyến như RIP, OSPF và BGP hỗ trợ tầng liên mạng IP trong việc tối ưu hóa khả năng kết nối này.
Giao thức TCP, hoạt động ở tầng vận chuyển, đảm bảo tính chính xác và tin cậy trong việc trao đổi dữ liệu Nó dựa trên kiến trúc kết nối "không liên kết" của tầng liên mạng IP, giúp tối ưu hóa quá trình truyền tải thông tin.
Các giao thức hỗ trợ ứng dụng như telnet, FTP, HTTP, SMTP và DNS đang trở nên phổ biến và được cài đặt rộng rãi trong các hệ điều hành thông dụng như UNIX, Windows 9x/NT, và Novell Netware, cũng như các hệ điều hành chuyên dụng từ các nhà cung cấp thiết bị tính toán như AIX của IBM, SINIX của Siemens và Digital UNIX của DEC.
1.1.3 So sánh 2 giao thức TCP và UDP
Giao thức UDP (User Datagram Protocol) là một trong những giao thức chính của TCP/IP, cho phép các chương trình trên mạng gửi dữ liệu ngắn gọi là datagram đến máy khác Mặc dù UDP không đảm bảo độ tin cậy và thứ tự truyền nhận như TCP, nhưng nó nhanh chóng và hiệu quả cho các ứng dụng yêu cầu thời gian thực và kích thước dữ liệu nhỏ Với tính chất không trạng thái, UDP rất hữu ích trong việc xử lý các truy vấn nhỏ từ nhiều người dùng cùng lúc.
Lập trình mạng trong NET FRAMEWORK
1.2.1 Cơ sở lý thuyết về NET a) Nền tảng của NET
Microsoft NET không phải là một ngôn ngữ lập trình mà là một nền tảng tích hợp bao gồm bốn ngôn ngữ lập trình: C#, VB.NET, Managed C++ và J# NET Các ngôn ngữ này có sự chồng chéo và được định nghĩa trong thư viện lớp framework (FCL).
Microsoft Net bao gồm hai thành phần chính: Framework và Môi trường Phát triển Tích hợp (IDE) Framework cung cấp các công cụ và nền tảng cần thiết, tạo ra một môi trường hỗ trợ hạ tầng cơ sở theo quy ước nhất định, giúp công việc trở nên thuận tiện hơn Trong khi đó, IDE mang đến một không gian giúp lập trình viên dễ dàng và nhanh chóng triển khai các ứng dụng dựa trên nền tảng Net.
Thành phần quan trọng nhất trong NET là Framework, được coi là cốt lõi và tinh hoa của môi trường phát triển IDE chỉ là công cụ hỗ trợ cho việc phát triển dựa trên nền tảng này Tất cả các ngôn ngữ lập trình trong NET như C#, Visual C++ và Visual Basic.NET đều sử dụng chung một IDE.
Microsoft NET là nền tảng lý tưởng cho việc phát triển và triển khai các ứng dụng phân tán thế hệ mới, bao gồm cả ứng dụng từ client đến server và các dịch vụ khác Nền tảng này cung cấp nhiều tính năng hữu ích cho các nhà phát triển, giúp tối ưu hóa quy trình xây dựng ứng dụng.
Một mô hình lập trình cho phép nhà phát triển xây dựng các ứng dụng dịch vụ web và ứng dụng client với Extensible Markup Language (XML)
Tập hợp dịch vụ XML Web, nhƣ Microsoft NET My Services cho phép nhà phát triển đơn giản và tích hợp người dùng kinh nghiệm
Chúng tôi cung cấp các máy chủ phục vụ như Windows 2000, SQL Server và BizTalk Server, tất cả đều tích hợp và quản lý hiệu quả các dịch vụ XML Web cùng với các ứng dụng liên quan.
Các phần mềm client như Windows XP và Windows CE hỗ trợ nhà phát triển trong việc phân phối sâu và nâng cao trải nghiệm người dùng trên nhiều thiết bị khác nhau.
Visual Studio NET là một công cụ hỗ trợ mạnh mẽ cho việc phát triển dịch vụ Web XML và ứng dụng trên nền tảng Windows cũng như web, giúp quá trình này trở nên dễ dàng và hiệu quả Ngôn ngữ lập trình C# được sử dụng rộng rãi trong môi trường này, mang lại nhiều lợi ích cho lập trình viên.
C# là một ngôn ngữ lập trình đơn giản với khoảng 80 từ khóa và hơn mười kiểu dữ liệu tích hợp sẵn, nhưng lại có tính diễn đạt cao Ngôn ngữ này hỗ trợ lập trình theo cấu trúc, hướng đối tượng và hướng thành phần, mang lại sự linh hoạt cho các nhà phát triển.
Ngôn ngữ lập trình C# tập trung vào lớp, cho phép định nghĩa kiểu dữ liệu mới và mở rộng ngôn ngữ để giải quyết các vấn đề cụ thể C# cung cấp từ khóa để khai báo lớp, phương thức và thuộc tính, đồng thời hỗ trợ đầy đủ các khái niệm trụ cột của lập trình hướng đối tượng như đóng gói, thừa kế và đa hình Khác với C++, C# không yêu cầu tách rời giữa tập tin tiêu đề và tập tin cài đặt, và còn cho phép sưu liệu trực tiếp trong mã nguồn, tạo ra tập tin sưu liệu định dạng XML khi biên dịch.
C# hỗ trợ khái niệm giao diện (interfaces) tương tự như Java, cho phép một lớp chỉ kế thừa từ một lớp cha duy nhất nhưng có thể cài đặt nhiều giao diện khác nhau.
C# có kiểu cấu trúc (struct) khác biệt so với C++ Cấu trúc trong C# là kiểu dữ liệu nhẹ và có những hạn chế nhất định Mặc dù cấu trúc không hỗ trợ kế thừa từ lớp, nhưng nó có khả năng cài đặt các giao diện.
C# hỗ trợ lập trình hướng thành phần với các đặc trưng như property, sự kiện và attribute CLR cung cấp hỗ trợ cho lập trình hướng component thông qua siêu dữ liệu (metadata), mô tả các lớp cùng với phương thức, thuộc tính và thông tin bảo mật.
Assembly là tập hợp các tập tin, bao gồm thư viện liên kết động (DLL) và tập tin thực thi (EXE), trong quan điểm của lập trình viên Trong NET, assembly đóng vai trò là đơn vị tái sử dụng, xác định phiên bản, bảo mật và phân phối CLR cung cấp nhiều lớp để thao tác với assembly, giúp quản lý và sử dụng chúng hiệu quả hơn.
C# cho phép truy cập trực tiếp vào bộ nhớ thông qua con trỏ kiểu C++, nhưng việc này được coi là không an toàn Trong môi trường CLR, việc thu dọn rác tự động cho các đối tượng được tham chiếu bởi con trỏ sẽ không được thực hiện cho đến khi lập trình viên tự giải phóng bộ nhớ.
Socket là một giao diện lập trình ứng dụng (API) mạng
Thông qua giao diện này chúng ta có thể lập trình điều khiển việc truyền thông giữa hai máy sử dụng các giao thức mức thấp là TCP, UDP
Socket là một khái niệm trừu tượng cao, có thể hiểu đơn giản là thiết bị truyền thông hai chiều, cho phép gửi và nhận dữ liệu giữa hai máy tính.
- Socket hướng kết nối (TCP Socket)
- Socket không hướng kết nối (UDP Socket)
Mô hình các loại Socket
* 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
KỸ THUẬT LẬP TRÌNH WINDOW SERVICES
Khác niệm window service
Windows service là một ứng dụng windows, không có giao diện, chạy thường trú
Các dịch vụ Windows có thể được thiết lập để tự động khởi động khi hệ điều hành khởi động hoặc có thể được cấu hình thủ công theo nhu cầu của người dùng.
Windows services thường được sử dụng đối với các ứng dụng phía server, các ứng dụng đó luôn ở trạng thái sẵn sàng phục vụ các yêu cầu từ client
Windows service là ứng dụng hoạt động trên máy chủ hoặc workstation, cung cấp chức năng mà không cần người dùng tương tác trực tiếp Chúng thường được sử dụng để giám sát hoạt động của hệ thống.
Windows service hoạt động trong tiến trình riêng biệt, không phụ thuộc vào người dùng hay các ứng dụng khác trên máy tính Chúng thường được cài đặt để tự động khởi động khi máy tính bật lên và có khả năng chạy ngay cả khi không có người dùng đăng nhập.
Một Windows service không có giao diện người dùng như hộp thoại hay thông báo, và không cung cấp một giao diện trực quan cho người sử dụng.
Một dịch vụ Windows thường giao tiếp với bên ngoài bằng cách sử dụng cơ chế thông điệp hoặc ghi chú sự kiện để báo cáo kết quả Ngoài ra, nó cũng có thể được tích hợp với Web Service, cho phép truyền tải thông tin từ máy cài đặt đến một máy khác qua internet.
Có 2 kiểu dịch vụ window:
Bộ điều khiển dịch vụ
Bộ điều khiển dịch vụ khởi động cùng với hệ thống, thực hiện việc gọi máy chủ từ xa để cấu hình dịch vụ và cho phép chương trình kiểm soát dịch vụ thao tác trên máy từ xa Nó cung cấp giao diện cho các tác vụ quan trọng liên quan đến quản lý dịch vụ.
- Duy trì cơ sở dữ liệu của các dịch vụ đã cài đặt
- Bắt đầu dịch vụ và trình điều khiển khi hệ thống khởi động hoặc khi có nhu cầu
- Liệt kê các dịch vụ và trình điều khiển dịch vụ đã cài
- Duy trình trạng thái thông tin cho dịch vụ và trình điều khiển dịch vụ đang chạy
- Truyền điều khiển yêu cầu để chạy dịch vụ
- Khóa và mở khóa dịch vụ cơ sở dữ liệu.
Cơ sở dữ liệu của dịch vụ đã cài đặt
Một dịch vụ Windows được cài đặt trong thanh nhiệm vụ hoạt động như một đối tượng thực thi của Trình quản lý điều khiển dịch vụ (SCM), quản lý tất cả các dịch vụ SCM điều khiển việc gọi thủ tục máy chủ, hỗ trợ máy trạm và quản lý dịch vụ Dịch vụ Windows có thể được tạo ra bằng công cụ Visual Studio NET, trong khi NET Framework cung cấp các lớp giúp việc tạo, cài đặt và vận hành trở nên dễ dàng hơn.
Windows Service có 3 thành phần:
+ Service ứng dụng: Một ứng dụng bao gồm 1 hoặc nhiều dịch vụ mà cung cấp các chức năng
+ Service controller application: Một ứng dụng cho phép có khả năng điều hành dịch vụ
+ Service Control Manager: Một công cụ cho phép điều hành dịch vụ đã cài đặt trong máy tính
Một Window service sau khi tạo và cài đặt đƣợc đăng ký tại:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
Dữ liệu của mỗi dịch vụ và trình điều khiển dịch vụ gồm các thông tin sau:
- Kiểu dịch vụ: Dịch vụ thực hiện trong quá trình riêng của mình hoặc chia sẻ một quá trình với các dịch vụ khác
+ Dịch vụ đƣợc khởi động tự động khi hệ thổng khởi động + Dịch vụ khởi động khi có yêu cầu
+ Không khởi động dịch vụ
- Mức độ kiểm soát lỗi:
- Đường dẫn đầy đủ của tập tin thực thi
Tài khoản dịch vụ
Mỗi dịch vụ hoạt động trong khuôn khổ bảo mật của tài khoản người dùng Tên và mật khẩu của tài khoản được thiết lập thông qua hàm CreateService(), và có thể được thay đổi bằng hàm ChangeServiceConfig() Để lấy thông tin tên người dùng liên quan đến một dịch vụ, bạn có thể sử dụng hàm QueryServiceConfig().
Tài khoản LocalService là một loại tài khoản địa phương được xác định trước với đặc quyền tối thiểu trên máy tính và không có chứng chỉ xác định trên mạng Tên tài khoản trong tất cả các miền địa phương là NT AUTHORITY\LocalService và tài khoản này không yêu cầu mật khẩu.
Tài khoản NetworkService là một tài khoản địa phương đã được xác định trước, có đặc quyền tối thiểu trên máy tính và hoạt động như một máy tính trong mạng Tên của tài khoản này trong tất cả các miền địa phương là NT AUTHORITY\NetworkService và nó không có mật khẩu.
Tài khoản LocalSystem là một tài khoản địa phương đã được xác định trước, sở hữu nhiều quyền hạn trên máy tính địa phương và hoạt động như một máy tính trong mạng Tên của tài khoản này được định danh là \LocalSystem, và có thể được sử dụng dưới dạng "LocalSystem" hoặc "ComputerName/LocalSystem" Đặc biệt, tài khoản này không yêu cầu mật khẩu.
2.2 - Cấu trúc của windows service trong NET
Cấu trúc tổng quát
ServiceBase : Tạo một lớp dịch vụ mới, nó đƣợc thừa kế từ SerciveBase
Class Các method của lớp có thể đƣợc ghi đè để thay đổi chức năng của họ nếu cần
ServiceProcessInstaller: Đƣợc sử dụng để cài đặt tiến trình quản lý dịch vụ
ServiceInstaller : Đƣợc sử dụng để cài đặt dịch vụ vào hệ điều hành namespace của các lớp là System.ServiceProcess và System.ServiceProcess
Trong thƣ viện system.serviceprocess.dll.
Các phương thức, thuộc tính của lớp
Tạo một đối tượng chứa tất cả thông tin cần thiết để thiết lập một proxy, cho phép giao tiếp với một đối tượng từ xa, thông qua việc kế thừa từ MarshalByRefObject.
Dispose() Giải phóng tất cả tài nguyên đƣợc sử dụng bởi
Component (Kế thừa từ Component.) Dispose(Boolean)
Giải phóng các nguồn tài nguyên (khác với bộ nhớ) đƣợc sử dụng bởi ServiceBase
Equals(Object) Xác định xem các Object được chỉ định là tương đương với Object hiện tại (Kế thừa từ Object.)
GetHashCode Server nhƣ một hàm băm cho một loại hình cụ thể (Kế thừa từ Object.)
GetLifetimeService Trả về thời gian tồn tại của dịch vụ (Kế thừa từ MarshalByRefObject.) GetService
Trả về một đối tƣợng mà đại diện cho một dịch vụ đƣợc cung cấp bởi các thành phần, hoặc bằng Container của nó (Kế thừa từ Component.)
OnContinue Đƣợc gọi khi window service khởi động sau khi pause OnPause Đƣợc gọi khi window service tạm dừng
OnShutdown Đƣợc gọi khi hệ thống tắt máy
OnStart Đƣợc gọi khi Window service khởi động
OnStop Đƣợc gọi khi Window service kết thúc
RequestAdditionalTime Yêu cầu thêm thời gian cho một hoạt động đang chờ giải quyết
Run(ServiceBase) Đăng ký thực thi cho một dịch vụ với Service
Run(ServiceBase[]) Đăng ký thực thi cho nhiều dịch vụ với Service
Stop Dừng các dịnh vụ thực hiện
AutoLog Tự động báo cáo dữ liệu lênh Start, Stop, Pause, và
Tiếp tục vào các bản ghi sự kiện CanPauseAndContinue Có thể tạm dựng và tiếp tục dịch vụ
CanShutdown Lấy hoặc gán một giá trị khi dịch vụ đang tắt
CanStop Có thể tắt dịch vụ
Container Lấy thành phần trong IContainer (Kế thừ từ
Tạo một đối tượng chứa toàn bộ thông tin cần thiết để thiết lập một proxy cho việc giao tiếp với một đối tượng từ xa, kế thừa từ MarshalByRefObject.
Dispose() Giải phóng tất cả tài nguyên đƣợc sử dụng bởi
Component (Kế thừa từ Component.)
Giải phóng các nguồn tài nguyên (khác với bộ nhớ) đƣợc sử dụng bởi ServiceBase
Phương thức Equals(Object) xác định xem đối tượng được chỉ định có tương đương với đối tượng hiện tại hay không, và nó được kế thừa từ lớp Object Trong khi đó, phương thức GetHashCode hoạt động như một hàm băm cho một loại hình cụ thể.
GetLifetimeService Trả về thời gian tồn tại của dịch vụ (Kế thừa từ MarshalByRefObject.)
Trả về một đối tƣợng mà đại diện cho một dịch vụ đƣợc cung cấp bởi các thành phần, hoặc bằng Container của nó (Kế thừa từ Component.)
Install Phương thức này được sử dụng bởi công cụ cài đặt
(Ghi đè Installer.Install(IDictionary))
Xác định nếu trình cài đặt đã chỉ rõ cài đặt các đối tượng tương như bộ cài đặt (Kế thừa từ ComponentInstaller.)
MemberwiseClone() Tạo ra một bản sao của đối tƣợng hiện tại (Kế thừa từ Object.) MemberwiseClone
Tạo ra một bản sao của đối tƣợng MarshalByRef Object hiện tại (Kế thừa từ MarshalByRefObject.) OnAfterInstall Raises the AfterInstall event (Kế thừ từ Installer.)
OnAfterRollback Raises the AfterRollback event (Kế thừ từ Installer.)
OnAfterUninstall Raises the AfterUninstall event (Kế thừ từ Installer.)
OnBeforeInstall Raises the BeforeInstall event (Kế thừ từ Installer.)
OnBeforeRollback Raises the eforeRollback event (Kế thừ từ Installer.)
OnBeforeUninstall Raises the BeforeUninstall event (Kế thừ từ Installer.)
OnCommitted Raises the Committed event (Kế thừ từ Installer.)
OnCommitting Raises the Committing event (Kế thừ từ Installer.)
Tạo một đối tượng chứa đầy đủ thông tin cần thiết để thiết lập một proxy cho việc giao tiếp với đối tượng từ xa, kế thừa từ MarshalByRefObject.
Dispose() Giải phóng tất cả tài nguyên đƣợc sử dụng bởi
Component (Kế thừa từ Component.)
Giải phóng các nguồn tài nguyên (khác với bộ nhớ) đƣợc sử dụng bởi ServiceBase
Equals(Object) Xác định xem các Object được chỉ định là tương đương với Object hiện tại (Kế thừa từ Object.)
GetHashCode Server nhƣ một hàm băm cho một loại hình cụ thể (Kế thừa từ Object.)
GetLifetimeService Trả về thời gian tồn tại của dịch vụ (Kế thừa từ MarshalByRefObject.)
Trả về một đối tƣợng mà đại diện cho một dịch vụ đƣợc cung cấp bởi các thành phần, hoặc bằng Container của nó (Kế thừa từ Component.)
Install Phương thức này được sử dụng bởi công cụ cài đặt
(Ghi đè Installer.Install(IDictionary))
Xác định nếu trình cài đặt đã chỉ rõ cài đặt các đối tượng tương như bộ cài đặt (Kế thừa từ ComponentInstaller.)
MemberwiseClone() Tạo ra một bản sao của đối tƣợng hiện tại (Kế thừa từ
Tạo ra một bản sao của đối tƣợng MarshalByRefObject hiện tại (Kế thừa từ MarshalByRefObject.)
OnAfterInstall Raises the AfterInstall event
OnAfterRollback Raises the AfterRollback event
OnAfterUninstall Raises the AfterUninstall event
OnBeforeInstall Raises the BeforeInstall event
OnBeforeRollback Raises the BeforeRollback event
OnBeforeUninstall Raises the BeforeUninstall event
OnCommitted Raises the Committed event
OnCommitting Raises the Committing event
XÂY DỰNG CHƯƠNG TRÌNH THỰC NGHIỆM
Server
Khởi tạo Socket Đăng ký với hệ thống
Chấp nhận kết nối Accept()
Nhận(Revc) Truyền(Send) Đóng kết nối
- Tạo socket , đăng kí nó với hệ thống ( hàm bind)
- Đặt socket ở chế độ chờ , lắng nghe kết nối
- Khi có request từ client , chấp nhận kết nối , tạo một process con để xử lý
- Quay lại trạng thái chờ lắng nghe kết nối mới
- Công việc của process mới gồm :
+ Nhận thông tin kết nối của client + Giao tiếp với client theo giao thức lớp ứng dụng đã thiết kế + Đóng kết nối và kết thúc process con
Chạy một chương trình khi Client gửi yêu cầu
- Output: Thực thi tiến trình
Bước 1: Tạo đối tượng ProcessStartInfo
Bước 2: Gán tên tiến trình
Bước 3: Tạo mới đối tượng Process
Bước 4: Gán đối tượng ProcessStartInfo cho thuộc tính StartInfo của đối tƣợng Process
Bước 5: Start đối tượng Process
- Input: Địa chỉ đầy dủ của file cần truyền
Bước 1: Truyền thông tin về file cần gửi ( Đường dẫn đầy đủ)
Bước 2: Mở file cần truyền
Bước 3: Lặp liên tục đến khi truyền xong hoặc có yêu cần ngừng gửi:
+ Đọc ra từ file nguồn 1 mảng byte vào buffer
+ Ghi mảng byte ấy vào socket stream
Bước 4: Kết thúc quá trình ( Đóng file )
- Input: Đường dẫn lưu file
Bước 1: Nhận thông tin về file cần nhận từ bên truyền
Bước 2: Tạo mở/tạo 1 file để lưu file chuẩn bị nhận
Bước 3: Dùng buffer để đọc ghi dữ liệu
Bước 4: Lặp liên tục đến khi nhận xong hoặc có yêu cần ngừng nhận:
+ Đọc từ socket stream ra 1 mảng byte vào buffer
+ Ghi mảng byte đã đọc đc vô file lưu
Bước 5: Kết thúc quá trình ( Đóng file ) b) Các lớp đối tượng sử dụng
Lớp Socket: được sử dụng để tạo ra một sự kết nối giữa một chương trình Client and một chương trình Server
* Các phương thức sử dụng
Accept() Tạo Socket mới khi client kết nối đến
Bind() Gán tên cho Socket
Listen() Xác định số lƣợng kết nối chờ có thể đƣợc xếp hàng cho 1 server socket Receive(Byte[]) Chứa số byte thực sự nhận đƣợc
Lớp ProcessStartInfo: Sử dụng để chỉ định chi tiết cho ứng dụng cần chạy
* Các thuộc tính sử dụng
FileName Tên ứng dụng cần chạy
UseShellExecute Gọi Shell của hệ điều hành
Verb Hành động khi chạy ứng dụng
Lớp Process: Sử dụng để để mô tả tiến trình mới, gán đối tƣợng
ProcessStartInfo cho thuộc tính StartInfo của đối tƣợng Process, và rồi khởi chạy ứng dụng bằng cách gọi Process.Start()
Cung cấp các phương thức gửi và nhận dữ liệu dạng mảng byte
* Các thuộc tính sử dụng
Read Đọc dữ liệu từ NetworkStream
Write Ghi dữ liệu tới NetworkStream
Flush Cho xoá sạch tất cả các buffer đối với writer hiện hành
Lớp FileStream: Đƣợc sử dụng đọc và viết dữ liệu vào hoặc từ một file
* Các thuộc tính sử dụng
Read Đọc một khối byte từ stream và ghi dữ liệu vào một buffer
Write Ghi một khối byte tới stream bằng cách sử dụng một buffer
Flush Cho xoá sạch tất cả các buffer đối với writer hiện hành
* Các phương thức sử dụng
Refresh Làm mới lại trạng thái của dịch vụ
Start() Khởi động dịch vụ
Startus Lấy thông tin trạng thái của dịch vụ
Client
Chức năng kết nối và gửi lệnh tới Server
- Xác định địa chỉ server
- Gửi / nhận dữ liệu theo giao thức lớp ứng dụng đã thiết kế
* Giao diện chính của chương trình
(1): Textbox nhập địa chỉ IP của server
(3): Textbox hiển thị thông tin thực hiện lệnh
- Khi người dùng nhấn nút kết nối (5) để kết nối đến Server
+ Nếu địa chỉ IP, số cổng không đúng thì chương trình sẽ hiển thị thông báo lỗi
+ Nếu kết nối thành công thì chức năng gửi lệnh sẽ đƣợc hiển thị
- Khi người dùng nhập lệnh tại ô nhập lệnh (4)
+ Khi người dùng gửi lệnh "ftp" thì chương trình sẽ gửi yêu cầu khởi động dịch vụ FTP bên server và chờ kết quả trả về của server
- Nếu Server thông báo lại là dịch vụ đƣợc khởi động thì Client sẽ gọi chương trình FTP Client
- Nếu Server thông báo lại là dịch vụ không khởi động đƣợc thì FTP Client sẽ không đƣợc hiển thi
+ Khi người dùng gửi khác với lệnh "ftp" thì chương trình sẽ yêu cầu chạy một chương trình bên Server
- Khi người dùng nhấn nút ngắt kết nối (6) thì chương trình sẽ gửi lệnh "quit" và yêu cầu ngắt kết nối đến Server
(1): Textbox hiển thị đường dẫn tệp tin
(2): Textbox hiển thị đường dẫn tệp tin bên FTP
(3): Treeview hiển thị cây thƣ mục trên máy Cliert
(4): Listview hiển thị danh sách file bên Client
(5): Listview hiển thị danh sách file bên FTP Server
(6): Button quay lại thư mục trước
(9): Button làm mới danh sách
- Chương trình được gọi khi có lệnh "ftp" thành công
- Khi chương trình bắt đầu khởi động thì danh sách file bên Server gửi về sẽ hiển thị tại ô số (5)
- Khi người dùng nhấn nút Download thì chương trình kiểm tra sự tồn tại file trong ô (5) và đường dẫn ô (1)
Nếu đủ điều kiện, yêu cầu tải xuống sẽ được gửi đến server Sau khi server nhận và thực hiện yêu cầu, file sẽ được tải về và lưu theo đường dẫn đã chỉ định.
+ Nếu đường dẫn không đúng hoặc chưa chọn file cần tải về thì chương trình sẽ hiển thị thông báo cho người dùng yêu cầu kiểm tra lại
- Khi người dùng nhấn nút Upload thì chương trình sẽ kiểm tra sự tồn tại file trong ô (4) và đường dẫn ô (2)
Nếu đủ điều kiện, yêu cầu tải lên sẽ được gửi đến server Sau khi server nhận và xử lý yêu cầu, file sẽ được tải lên theo đường dẫn đã chỉ định.
+ Nếu đường dẫn không đúng hoặc chưa chọn file cần tải về thì chương trình sẽ hiển thị thông báo cho người dùng yêu cầu kiểm tra lại.
Kết quả đạt đƣợc
* Một số hình ảnh quá trình chạy chương trình
Giao diện khi chưa kết nối tới server
Giao diện khi nhấn nút kết nối tới server
Giao diện khi thực hiện lệnh "ftp"
Giao diện khi nhấn nút Tải xuống, file được lưu theo đường dẫn: E:\Demo
Giao diện khi nhấn nút Tải lên File "Ghi chu.txt" được tải lên thư mục \Demo của server