Phần I: Tìm hiểu về Công nghệ xây dựng Website
Hiện nay có rất nhiều công nghệ để xây dựng nên những Website như là JSP (Java Server Page), ASP (Active Server Page) … Ở đây, chúng ta chỉ tìm hiểu về ASP là công cụ được sử dụng để xây dựng Website này.
Chương I: Giới thiệu về ASP (ACTIVE SERVER PAGES)
1) Tìm hiểu công nghệ ASP
a. ASP là gì :
- Microsoft Active Server Pages là một môi trường hỗ trợ cho các Script chạy trên Server (Server-Side Scripting) cho phép tạo hoặc xây dựng các ứng dụ
82 trang |
Chia sẻ: huyen82 | Lượt xem: 2034 | Lượt tải: 0
Tóm tắt tài liệu Xây dựng website giải trí, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ng Web mạnh chứa các thẻ HTML, text và các lệnh Script hay các ứng dụng Web động, giao tiếp giữa Client và Server một cách hiệu qủa.
- ASP hoạt động dựa vào các Script do người lập trình tạo ra. Các trang ASP có thể gọi các thành phần ActiveX để thực hiện các công việc như kết nối với với một Database hoặc thực hiện một tính toán kinh doanh. Với ASP, bạn có thể đưa nội dung tương tác với các trang Web của bạn hoặc xây dựng toàn bộ các ứng dụng Web sử dụng các trang HTML như giao tiếp với khách hàng của bạn.
b. Trang ASP:
Mỗi trang .asp có thể bao gồm một trong các thành phần sau: HTML, Script của ngôn ngữ VBScript hoặc JScript, Text trong đó các tag HTML và Text sẽ được xử lý bình thường như đối với các văn bản HTML (.html) thông thường, các Script sẽ được một bộ phận (engine) của ASP thông dịch và thi hành trên Server. Có thể xem trang ASP như một trang HTML có bổ sung các ASP Script Command.
c. Quá trình biên dịch một trang asp :
Các Script của ASP được chứa trong các text file có phần mở rộng là .asp. Script thường được viết bằng một ngôn ngữ VBScript hay JavaScript.
Khi một Web browser gửi yêu tới một trang .asp. Khi đó Web server sẽ đọc và tiến hành biên dịch các lệnh script trong đó và trả kết quả về cho Web browser dưới dạng của một trang HTML.
d. Tính chất của asp :
- ASP có tính chất động: ta có thể chèn một đoạn Script vào bất kỳ nơi nào trong trang HTML, đây là đăc tính quan trọng nhất và là cốt lõi của công nghệ ASP, chính điều này đã mang lại rất nhiều điều thú vị mà trong HTML không có.
- ASP có tính hướng đối tượng: với các build-in Object rất tiện dụng : Request, Response, Server, Apllication, Session, …
- Có khả năng mở rộng các thành phần ActiveX Server (ActiveX Server Components).
- Các ứng dụng ASP dễ tạo vì dùng các ASP Script để viết các ứng dụng. Khi tạo các Script của ASP ta có thể dùng bất kỳ một ngôn ngữ Script nào, chỉ cần có scripting engine tương ứng của ngôn ngữ đó.
- Việc chèn các Script vào file HTML làm cho quá trình xử lý tạo ra văn bản HTML (Dynamic Pages) đồng thời với việc xử lý các Script, điều bày sẽ làm cho hoạt động của trang Web sẽ trở nên linh động hơn, uyển chuyển hơn.
- Các file .asp cũng tương thích với file HTML, và việc viết các Script đơn giản, không phải biên dịch hay liên kết như việc lập trình thông thường, ASP cung cấp các đối tượng tiện lợi cho nhiều thao tác như: Request, Response, Server, Apllication, Session. Các đối tượng có sẵn này của môi trường ASP sẽ giúp cho việc giao tiếp dữ liệu giữa Client và Server thực sự tiện lợi, cũng như việc quản lý ứng dụng một cách linh hoạt nhờ vào các biến Session, Application.
e. Ưu điểm và khuyết điểm của ASP
Ưu điểm :
ASP bổ sung cho các công nghệ đã có từ trước như CGI (Common Gateway Interface), Giúp người dùng xây dựng các ứng dụng web với những tính năng sinh động. Tuy nhiên, khác với CGI, các trang ASP không cần phải hợp dịch.
Dễ dàng tương thích với các công nghệ của Microsoft. ASP sử dụng ActiveX Data Object (ADO) để thao tác với cơ sở dữ liệu hết sức tiện lợi.
Với những gì ASP cung cấp, các nhà phát triển ứng dụng Web dễ dàng tiếp cận công nghệ này và nhanh chóng tạo ra các sản phẩm có giá trị. Điều này hết sức có ý nghĩa trong điều kiện phát triển như vũ bão của tin học ngày nay. Nó góp phần tạo nên một đội ngũ lập trình Web lớn mạnh.
ASP có tính năng mở. Nó cho phép các nhà lập trình xây dựng các Component và đăng ký sử dụng dễ dàng. Hay nói cách khác ASP có tính năng COM (Component Object Model).
Khuyết điểm :
ASP chỉ chạy và tương thích trên môi trường Windows, điều này làm ASP bị hạn chế rất nhiều.
Dùng ASP chúng ta sẽ gặp không ít khó khăn trong việc can thiệp sâu vào hệ thống như các ứng dụng CGI.
ASP không được sự hổ trợ nhiều từ các hãng thứ ba.
Các ứng dụng ASP chạy chậm hơn công nghệ Java Servlet.
Tính bảo mật thấp. Không giống như CGI hay Java servlet, các mã ASP đều có thể đọc được nếu người dùng có quyền truy cập vào web server. Có lẽ đây là lý do quan trọng nhất để người dùng không chọn công nghệ ASP.
2) Các thành phần và cú pháp ASP :
ASP bao gồm các thành phần sau :
1. Các bộ dịch ngôn ngữ VBScript và JScript.
2. Thư viện các đối tượng, chuyên dùng để truy xuất Database thông qua ODBC Driver (Active Server Data Object – ADO). Thư viện các đối tượng hỗ trợ cho việc viết các trang ASP.
Một file ASP thực chất là một văn bản, nó có thể bao gồm các thành phần sau:
+Văn Bản (Text)
+ Các HTML tag.
+ Các Script. Mỗi Script này sẽ thực hiện một công việc nào đó, giống như các phát biểu của một ngôn ngữ lập trình. Một Script là một chuỗi các lệnh script, nó có thể là:
Một phép gán giá trị cho một biến.
Một yêu cầu Web Server gửi thông tin đến Brower.
Tổ hợp các lệnh riêng rẽ thành một thủ tục hay một hàm giống như trong các ngôn ngữ lập trình.
Việc thi hành một Script là quá trình gửi chuỗi các lệnh tới Scripting Engine, tại đây ASP sẽ thông dịch các lệnh này và chuyển tiếp cho máy tính. Script được viết bằng một ngôn ngữ với các luật được đặt tả nào đó, nếu ta muốn sử dụng một Script Language nào thì trên Server phải chạy Script Engine cho ngôn ngữ đó. Trong ASP cung cấp hai Script Engine là VBScript và JScript (với VBScript là mặc nhiên). Tuy nhiên ASP không phải là ngôn ngữ Script, mà nó chỉ cung cấp một môi trường để xử lý các Script mà ta chèn vào trong các file .asp, việc chèn này phải tuân theo một cú pháp nhất định của ASP.
a .Dấu ngăn cách (Delimiter):
Trong văn bản ASP ta sử dụng các dấu để ngăn cách phần văn bản HTML với phần Script, hay cụ thể là bất cứ một phát biểu Script nào cũng đều phải nằm giữa hai ngăn cách
b. Câu lệnh (Statement):
Một câu lệnh trong VBScript hay trong ngôn ngữ Script khác là một cấu trúc dùng để thực hiện một thao tác, câu lệnh phải được khai báo hoặc định nghĩa trong ngôn ngữ Scripting. Các ngôn ngữ Script trong ASP cung cấp cho ta hầu hết các cấu trúc điều khiển : IF…ELSE, For, While, DO WHILE… cùng với những kiểu dữ liệu cơ bản như Integer , char, string, Array … để sử dụng.
c. SCRIPT tag:
Các phát biểu, biểu thức, lệnh, hay thủ tục mà bạn sử dụng bên trong hai dấu ngăn cách phải được nhìn nhận bởi ngôn ngữ Script mặc định hoặc ngôn ngữ Script được khai báo ở đầu trang ASP. Ngôn ngữ Scripting mặc định của ASP là VBScript, tuy nhiên với ASP ta vẫn có thể sử dụng các ngôn ngữ lập trình khác bên trong bằng cách sử dụng thẻ và
d. Include file:
Khi tạo một ứng dụng Web, bao gồm nhiều trang ASP, nếu như toàn bộ các trang đều cần sử dụng những thông tin chung nào đó chẳng hạn như các hằng, giá trị … Để tránh lại việc định nghĩa lại các giá trị này, ta có thể sử dụng cơ chế include file của ASP (giống như trong ngôn ngữ lập trình cổ điển). Để include một file trong trang ASP ta sử dụng cú pháp sau:
3) Các đối tượng cơ bản của asp:
ASP cung cấp cho người lập trình các đối tượng có sẵn, mỗi đối tượng này sẽ thực hiện một chức năng riêng nào đó, các đối tượng có sẵn (built-in oject) bao gồm:
Tên đối tượng Chức năng
Request Lấy thông tin từ một user.
Respone Gửi thông tin tới một user.
Server Điều khiển môi trường hoạt động của ASP.
Session Lưu giữ thông tin về một session của user.
Application Chia sẻ thông tin giữa các user trong cùng một ứng dụng.
a. Đối tượng Request
Với đối tượng Request, các ứng dụng ASP có thể dễ dàng lấy được thông tin gửi tới từ user.
Đối tượng Request cho phép truy xuất chi tới bất kỳ thông tin nào user gửi tới bằng giao thức HTTP như:
1. Các thông tin chuẩn nằm trong các biến Server (Variable Server).
2. Các tham số được gửi tới bằng phương thức POST.
3. Các thông tin được gửi tới bằng phương thức GET.
4. Các Cookies (là thông tin của User được gửi kèm theo) tới từ Browser.
5. Các Client Certificates.
Đối tượng Request tìm kiếm các giá trị mà Client Browser đưa vào Server trong khi có một yêu cầu HTTP.
Cú pháp:
Request.collection|property|method
Collections:
Cookies: Giá trị của các Cookie gởi trong yêu cầu HTTP.
Form: Giá trị các phần tử Form trong thân của yêu cầu HTTP.
QueryString: Giá trị của các biến trong trong chuỗi truy vấn HTTP.
ServerVariables: Giá trị của các biến môi trường đã được xác định trước.
Properties:
TotalBytes: Tổng số byte Client đang gởi trong thân của yêu cầu.
Các tham số biến là chuỗi ký tự chỉ rõ mục (item) được tìm kiếm từ một collection hoặc được sử dụng như là mục vào đối với một phương thức (method) hoặc một property.
Ngoài ra, tất cả các biến có thể được truy cập một cách trực tiếp bằng cách gọi cú pháp Request(variable) mà không cần tên collection. Trong trường hợp này, Web Server tìm kiếm các collection theo thứ tự sau:
QueryString
Form
Cookies
ClientCertificate
ServerVariables
b. Đối tượng Response
Bạn có thể sử dụng đối tượng Response để gởi kết xuất tới Client.
Cú pháp
Response.collection |property| method
Collections : Cookies : Chỉ định giá trị cookie và thiết lập các giá trị cookie.
Properties :
Buffer : Chỉ ra liệu trang kết xuất được đệm hay không.
ContentType : Chỉ định kiểu nội dung HTTP (vd:”Text/HTML”) khi đáp ứng.
Expires : Chỉ định thời gian trước khi một trang lưu trữ trên Browser kết thúc.
CacheControl: Xác định các Proxy Server có thể kết quả đầu ra phát sinh bởi ASP.
Charset: Thêm vào bộ ký tự Header Content-Type
ExpiresAbsolute: Ngày giờ 1 trang được dấu trên Browser hết hạn
IsClientConnected: Kiểm tra kết nối Client có bị gián đoạn từ Server
PICS: Thêm giá trị vào nhãn PICS field pics-label của Header
Status: Giá trị dòng trạng thái HTTP được trả ra bởi Server
Methods :
AddHeader : Thiết lập tên (name) tiêu đề HTML bằng giá trị (value).
AddHeader: Thêm hoặc thay đổi trị số trong HTTP header
AppendToLog: Thêm text vào cổng vào nhật ký Web Server
BinaryWrite: Gửi text lên Browser mà không cần chuyển đổi bộ Charset.
Clear: Hủy bỏ vùng đệm kết xuất HTML.
End: Ngưng xử lý trang và trả ra kết quả hiện hành.
Flush: Gửi kết quả đầu ra được đệm ngay lập tức.
Redirect: Hướng dẫn cho Browser kết nối với 1 địa chỉ URL khác.
Write: Xuất một biến tới trang hiện hành như là một chuỗi.
c. Đối tượng Server
Đối tượng Server cung cấp truy cập tới các phương thức và đặc tính (property) trên Server. Hầu hết các phương thức và đặc tính (property) Server như là các chức năng tiện ích.
Cú pháp : Server.property|method
Properties : ScriptTimeout : Khoảng thời gian mà một Script có thể chạy trước khi hết thời gian (time out).
Methods :
CreateObject : Tạo một thực thể (instance) của một đối tượng hoặc thành phần server.
HTMLEncode : Mã hóa chuỗi thành dạng HTML.
MapPath : Aùnh xạ đường dẫn ảo, đường dẫn tuyệt đối hay tương đối trên Server hiện hành vào một đường dẫn vật lý.
URLEncode : Mã hóa chuỗi kí tự thành dạng URL.
d. Đối tượng Session
Đối tượng Session được sử dụng để lưu trữ và tìm lại thông tin về một User Session. Các giá trị lưu trữ trong đối tượng Session không bị loại bỏ đi khi user di chuyển từ trang này sang trang khác trong ứng dụng, Web Server tự động tạo ra một đối tượng Session khi một trang Web trong ứng dụng được yêu cầu bởi một User chưa có Session. Server hủy bỏ đối tượng Session khi nó hết thời gian hay được hủy bỏ. Thực tế, một Session chỉ thuộc về một User.
Dữ liệu Session thường gắn liền với một User, nó quản lý các thông tin về User đang sử dụng một ứng dụng .
Cú pháp : Session.collection |property| method
Collections :
Contents Chứa các mục (item) mà bạn thêm vào Session với các lệnh Script.
Properties :
SessionID : Trả về định danh Session đối với User.
Timeout : Khoảng thời gian đối với các Sessio.
Methods :
Abandon Hủy bỏ một đối tượng Session và giải phóng tài nguyên của nó.
Events :
Se_OnStart : Xảy ra khi người sử dụng đầu tiên yêu cầu một trang trong một chương trìng.
Se_OnEnd : Xảy ra khi Session kết thúc.
e. Đối tượng Application
Với đối tượng Session chúng ta đã có thể thực hiện việc lưu trữ dữ liệu chung giữa các trang trong một phiên làm việc của người sử dụng. Đối tượng Application cung cấp phương tiện cho phép chia sẻ dữ liệu giữa các người sử dụng khác nhau (mỗi người sử dụng này có riêng một Session) của cùng một ứng dụng.
Như ta đã biết, ứng dụng ASP là tập hợp các trang .asp (và các thư mục con), được cái đặt trong một Virtual Directory. Mỗi ứng dụng ASP được cung cấp một không gian để lưu trữ các dữ liệu toàn cục của nó gọi là tầm vực Application. Việc truy xuất vào tầm vực này do đối tượng Application quản lý và thực hiện. Thời gian sống của tầm vực Application được tính từ khi ứng dụng bắt đầu chạy (Web Server khởi động) cho đến khi ứng dụng bị huỷ bỏ (Web Server stop).
Để lưu trữ một dữ liệu trong tầm vực Application, sử dụng cú pháp:
Application(“tênbiến”)=giá trị;
Việc lưu trữ và thao tác với các đối tượng dữ liệu (như mảng) trong Application được thực hiện tương tự như đối với các biến Session.
Vì các biến trong tầm vực Application có thể được truy xuất bởi nhiều User khác nhau, nên đối tượng Application cung cấp hai phương thức lock() và unlock() để loại trừ tương hỗ khi truy xuất vào vùng dữ liệu dùng chung này.
Phương thức Application.Lock(): Thực hiện khóa dữ liệu. Trong khi một User khóa tầm vực Application, các User khác sẽ không có khả năng cập nhật hay thay đổi trong vùng này.
Phương thức Application.Unlock(): Được gọi để mở khóa. Khi khóa đã mở, các User khác có thểthực hiện thao tác cập nhật dữ liệu trong tầm vực Application.
Nhìn chung, khi một User cần thực hiện thao tác cập nhật cùng Application, nó thực hiện các bước sau trong kịch bản:
Gọi Application.Lock();
Thực hiện các thao tác với các biến Application.
Gọi Application.Unlock();
Cú pháp: Application.collection | Method | Event
Collection
Contents: Chứa tất cả các item được thêm vào ứng dụng bằng các câu lệnh Script.
Staticobjects: Chứa tất cả các đối tượng được thêm vào ứng dụng bằng tag
Method
Lock: Ngăn cản các Client khác sửa đổi thuộc tính của ứng dụng.
Unclock: Cho pháp các Client khác được sửa đổi thuộc tính của ứng dụng.
Events
OnStart: Xảy ra khi 1 trang trong ứng dụng được xem đầu tiên.
OnEnd: Xảy ra khi thoát ra khỏi ứng dụng, sau biến cố Session_onEnd.
4) Các thành phần (component) của asp.
Ngoài các đối tượng cơ bản có sẵn trong môi trường ASP, việc tạo các trang Web động bằng ASP còn được trợ giúp nhờ một số thư viện các đối tượng (ActiveX Component) của ActiveX Server. Các thành phần được thiết kế để chạy trên Web Server như một ứng dụng Web cơ sở hợp thành các gói nhỏ đặc trưng chung là động. Mỗi thành phần được sử dụng cho một công việc chuyên biệt nhiệm cho là một thư viện các lớp (hay đối tượng), được thiết kế ở dạng Automation Server, thực hiện một nhóm công việc chung nhất cho một thao tác nào đó, chẳng hạn như truy xuất database, truy xuất file… vì thế người phát triển ứng dụng Web bằng ASP khộng cần phải tạo lại các đặc tính này.
Chúng ta có thể tạo động, tương tác với các trang Web bằng cách sử dụng các thành phần Server đã được included với Active Server Pages (ASP) trong các đoạn Script của ta.
5) Truy xuất cơ sở dữ liệu trong ASP.
Ở phần trên chúng ta đã biết về các khái niệm tổng quát về ASP và các thành phần cần có khi xây dựng một ứng dụng. Trong phần này sẽ trình bày kỹ hơn về Active Data Object, đây chính là ưu điểm mạnh nhất cho việc phát triển ứng dụng cơ sở dữ liệu trên web (Web database).
DataBase Access Component :
Một ứng dụng Web database viết bằng ASP có thể truy xuất dữ liệu trong môi trường database bằng cách sử dụng Component Database Access của ActiveX hay còn gọi là thư viện ADO (Active Data Object). Đây cũng chính là điểm mạnh nhất của ASP trong việc phát triển ứng dụng Web database.
Các Object của ADO cung cấp có thể tạo ra các kết nối (Connection) với hầu hết các kiểu Database, cũng như việc truy xuất, cập nhất các database này. Hiện nay thư viện ADO là công cụ mạnh nhất trong việc phát triển các ứng dụng database trên Internet.
Trong phần này ta sẽ xem xét các thành phần trong thư viện công cụ này.
ADO interface :
ADO được thiết kế một cách đơn giản nhất, nó giao tiếp với database thông qua phương thức ODBC (Open DataBase Connectivity), chúng ta có thể sử dụng chúng với bất kỳ loại database nào nếu như ODBC có driver hỗ trợ. Hiện nay tồn tại driver cho hầu hết các loại database như Foxpro, Access, Oracle, SQl Server, . . .
Sự giao tiếp giữa ADO và các thành phần khác trong hệ thống có thể được mô tả theo hình vẽ sau:
Quá trình truy xuất cơ sở dữ liệu thông qua ODBC
Các Object trong ADO :
Các Object chính trong đó là: Connection, RecordSet và Command. Ngoài ba Object chính này còn có các Object, tham số, thuộc tính, phương thức. Sử dụng Connection ta có thể thiết lập sự liên kết với cơ sở dữ liệu, thông qua đó ta có thể thực hiện các Query để lấy ra các record hoặc cập nhật một record bằng cách sử dụng Command Object. Kết quả thực hiện các Query trên Database sẽ được lưu vào đối tượng Recordset, trên đối tượng này ta có duyệt và lấy ra một hay nhiều Record. Sau đây ta xem xét cụ thể cấu tạo cũng như cách sử dụng của từng Object.
Đối tượng Connection :
Để sử dụng tốt đối tượng Connection, trước tiên ta phải tạo ra một Instance cho nó, đây thực sự là một thể hiện của Object này trong ASP. Phát biểu tạo Instance cho Connection có cú pháp như sau:
<%
Connection_name=Server.CreateObject(“ADODB.Connection”)
%>
Thông thường trong một ứng dụng nếu ta cần có một liên kết với Data source cố định cho tất cả các trang thì khi đó ta sẽ đặt Instance của Connection có tầm vực ở mức Application bằng cách đưa phát biểu tạo Instance ở trên vào các thủ tục Application_onStar():
<%
Sub Application_onStar()
Set Connection_name = Server.CreateObject (“ADODB.Connection”)
End Sub
%>
Hoặc thiết lập tầm vực cho Connection ở mức Session như sau:
<%
Sub Session_onStar()
Set Connection_name=Server.CreateObject(“ADODB.Connection”)
End Sub
%>
Tuy nhiên ta có thể xem xét thêm việc tối ưu cho các Connection trong một ứng dụng có nhiều User truy xuất tới database, đó là khả năng Connection pooling.
Connection pooling :
Các ứng dụng cơ sở dữ liệu truyền thống đều tạo một mối liên kết tới database mà nó sử dụng, còn các ứng dụng Database trên web lại mở và đóng các liên kết này ở mỗi trang web. Một phương pháp cho các ứng dụng Database trên web là tạo một sự liên kết liên tục với cơ sở dữ liệu của từng User và lưu trữ trong đối tượng Session. Tuy nhiên, phương pháp này làm gia tăng số lượng các User kết nối tới cơ sở dữ liệu mà không làm việc và nó chỉ đạt được độ tin cậy đối với các Website có sự liên thông dữ liệu thấp (low-traffic).
Phương pháp tiện lợi hơn trong việc quản lý các kết nối với cơ sở dữ liệu của ứng dụng web là quản lý bằng Connection Pool của ODBC nhằm giảm bớt số lượng liên kết rảnh rỗi. ODBC sẽ mở các kết nối và quản lý các kết nối này mỗi khi có một yêu cầu kết nối mới thì thực hiện việc kiểm tra xem có liên kết nào rảnh không, nếu không thì sẽ tạo kết nối mới, ngược lại sẽ lấy liên kết rảnh này mà không tạo liên kết mới. Nếu có một liên kết rảnh nào trong Connection Pool tồn tại quá 60 giây thì nó sẽ tự động hủy bỏ.
Connection Pooling được kích hoạt mặc nhiên trong ASP, ta có thể loại bỏ bằng cách thiết lập giá trị Register Entry Star Connection Pool về giá trị 0.
Các phương thức của đối tượng connection :
Open method : Sử dụng để mở một kết nối với Database. Sau khi tạo một instance cho Connection Object. Ta có thể mở một kết nối với data source để có thể truy xuất dữ liệu, cú pháp như sau:
Connection.open ConnectionString User password
Trong đó ConnectionString là chuỗi định nghĩa tên của datasource (DNS), tên này được khai báo trong ODBC. User và password sẽ thực hiện việc mở Database.
Execute method : Phương pháp này cho phép thực thi một câu lệnh, tác động lên data source. Ta có cú pháp như sau :
Connection.Execute Commandtext.RecordAffected.options
Trong đó thông số option có các giá trị khác nhau tương ứng với mỗi loại CommanText. Các giá trị của Option theo bảng sau:
Giá trị
Danh hiệu hằng tương ứng
Mô tả CommanText
0
AdCmdUnknown
Giá trị này mặc định khi định nghĩa
1
AdCmdText
CommandText là một câu lệnh (vd: SQL)
2
AdCmdTable
Tên của Table mà ta sẽ tạo một RecordSet từ đó
3
AdCmdStoreử dụngPro
Một Seaticored procedure trong data source
Close method : Trong các trang ASP, sau khi đã xử lý xong dữ liệu trên data source, trước khi kết thúc một trang sử dụng phải đóng lại các kết nối đã mở. Việc đóng kết kết nối thực hiện nhờ phương thức Close.
Cú pháp như sau: Connection.Close
Nếu chương trình không thực hiện việc này thì ASP sẽ tự động đóng Connection mở trong trang. Mỗi khi người sử dụng tham khảo sang trang khác (đi khỏi tầm vực của biến Instance). Nếu ta tạo Instance và mở kết nối trong các thủ tục Application hoặc Session_onStar việc đóng các Connection này sẽ được thể hiện trong thủ tục onEnd.
Đối tượng Command :
Thay vì phải sử dụng phương thức Execute của đối tượng Connection để Query hay Update data resource, ta có thể sử dụng đối tượng Command dễ thi hành các thao tác với cơ sở dữ liệu.
Việc tạo một Instance cho đối tượng Command cũng như đối tượng Connection. Nghĩa là cũng sử dụng phương thức Server.CreateObject.
Command-name=Server.CreateObhec (“ADODB.Command”)
Tuy nhiên để sử dụng đối tượng này ta cần xem xét các phương thức và thuộc tính kèm theo.
Các phương thức (Methods) :
Create Paramater: Dùng để tạo một đối tượng (thông số) trong tập thông số
Execute: Dùng để thực thi câu lệnh được đặc tả trong thuộc tính CommandText.
Các thuộc tính (Properties):
ActiveConnection :Chỉ định đối tượng Connection nào được sử dụng trong đối tượng Command.
CommandText: Chỉ định câu lệnh cần thực thi trên cơ sở dữ liệu .
CommandTimeOut: Xác định thời gian thực thi lệnh, giá trị thời gian thực thi được tính theo giây.
CommandType: Cho biết kiểu của Query đặc tả trong CommandText
Prepared : Tạo ra lệnh chuẩn bị trước khi thực thi.
Tạo ActiveConnection :
Sau khi đã có các Instance của các Connection Object đã được kết nối với cơ sở dữ liệu và Command Object. Lúc này nếu muốn sử dụng Command Object ta phải gán tên của Connection thích hợp (Connection nào kết nối tới cơ sở dữ liệu cần làm việc) vào cho thuộc tính ActiveConnection của Command Object
Command-name.ActiveConnection = Command-name;
Thực thi Query :
Ta có thể sử dụng phương thức Execute của Command gần giống như Connection. Tuy nhiên điểm khác với Connection là đối tượng Command nếu ta có dự định thi hành một lệnh nào thì ta phải gán động cho các giá trị thuộc tính CommandText, Parameter, …
Các Methods :
Append : Thêm một thông số vào Collections.
Delete : Xóa một thông số trong Collections.
Refresh : Làm tươi lại sự thay đổi thông số đó.
Các Properties :
Count : trả về các thông số có trong Collections.
Item : được sử dụng để lấy giá trị của một thông số trong Collections.
Atribute: Thể hiện kiểu dữ liệu mà thông số đó chấp nhận.
Direction : Thể hiện hướng của thông số là Input, Output hay cả hai, ...
Name : Tên thông số.
NumberScale : Số chữ số thập phân trong thông số kiểu số.
Size : Kích thước lớn nhất tính theo byte.
. . . .
Đối tượng RecordSet :
Bằng cách sử dụng các đối tượng Connection và Command ta có thể thực thi các query để Add, Update, or Delete, . . .một Record trong Datasource.
Các Method:
AddNew : Là phương thức để tạo ra một Reccord.
Close : Đóng lại đối tượng.
Delete : Xóa đi Record hiện hành trong RecordSet.
Move : Dịch chuyển vị trí Record hiện tại.
Các phương thức dịch chuyển con trỏ :
MoveFirst, MoveNext, MovePrevious, MoveLast.
Các Properties :
AbsolutePosition: Số thứ tự hay Record hiện tại.
BOF : Có giá trị True nếu con trỏ nằm ở Record đầu tiên.
CursorType: Kiểu con trỏ được sử dụng trong RecordSet.
RecordCount : Trả vể số Record trong RecordSet.
Phần II: Tìm hiểu về Chat và Mail
Chương I: Tìm hiểu về Chat theo chuẩn IRC
Hiện nay trên Internet có nhiều loại dịch vụ, mỗi dịch vụ cung cấp cho chúng ta một tiện ích khác nhau, trong đó có dịch vụ Chat. Đây là loại dịch vụ cho phép mọi người trên khắp hành tinh có thể gặp gỡ, trao đổi thông tin với nhau mà không cần phải gặp nhau trực tiếp. Dịch vụ này rất phát triển, có đến hàng triệu người trên thế giới đang sử dụng dịch vụ này. Vì vậy vấn đề đặt ra là phải có một quy định chung cho hệ thống mạng IRC (Internet Relay Chat). Ủy Ban IAB về các giao thức chuẩn (IAB Official Protocol Standards) đã đưa ra một giao thức chuẩn (Standard protocol) dùng cho tất cả các chương trình chat đang tồn tại. Đó là IRC (Internet Relay Chat) protocol được định nghĩa trong RFC (Request For Comment) 1459, 2810, 1324, 2811, 2813.
IRC Protocol được đưa ra vào năm 1980, tiền thân của nó, dùng cho các thành viên trong mạng BBS trao đổi thông tin với nhau, dần dần được cải tiến và trở thành giao thức chuẩn cho các chương trình IRC. Quy mô của IRC protocol là trên toàn cầu, gồm có 2 thành phần Client và Server.
Hiện nay IRC Protocol được xây dựng trên họ giao thức mạng phổ biến nhất là TCP/IP (TCP/IP Net Work Protocol) lý do việc sử dụng họ giao thức này là tính chính xác, tin cậy, phổ biến, rất thích hợp cho các cuộc thảo luận từ xa.
IRC Protocol dùng mô hình Client–Server, vì thế chúng ta có thể chạy nhiều máy trên môi trường phân tán (distributed enviroment). Trong đó máy đóng vai trò là Server cung cấp một điểm tập trung (central point) cho các Client kết nối đến, và đồng thời thực hiện quá trình truyền nhận message từ các Client này đến các Client khác.
I) Một số khái niệm cơ bản.
1. Servers:
Server được xem là xương sống của mạng IRC, mỗi Server là một tâm điểm trong hệ thống các Server, chúng cho phép Client và Server khác kết nối vào. Những Server này được kết nối theo biểu đồ hình cây (Spanning Tree).
2. Clients
Client là một máy tính mà nó được kết nối đến Server và máy tính đó không phải là Server.
Client là thiết bị đầu cuối nó không chuyển tiếp message cho bất cứ máy tính nào khác
Mỗi Client được phân biệt với nhau thông qua Nickname (Nickname là chuỗi có giá trị tối đa 9 ký tự ). Server dùng Nickname để quản lý các Client.
Khi có sự tham gia của một Client vào hệ thống, tất cả các Server phải có thông tin về Client đó như là tên Client (Hostname), tên Server mà nó kết nối đến v.v ...
Operators:
Để có thể quản lý số lượng User tham gia trên mạng (IRC network) người ta xây dựng một nhóm User gọi là “Client Operator” nhóm này có đầy đủ mọi quyền hạn trên mạng (IRC network). Mặc dù quyền hạn (cấp cho Client Operation) có thể được xem là “nguy hiểm”, nhóm “Client Operator” có thể thực hiện các tác vụ như hủy bỏ kết nối (disconnecting) của một Client nào đó hoặc tái kết nối (reconnecting) đến Server nào đó. Những tác vụ này có thể thực hiện khi có một Server bị hỏng hay khi có sự cố về đường truyền và nhiều nguyên nhân khác. Chính vì khả năng đó nên người ta cho rằng nhóm “Client Operator” có thể nguy hiểm. vì có thể nhóm Client này hủy bỏ kết nối của một Client khác mà không có lý do hợp lý, hay mục đích chính đáng.
3. Channels
Channel là tên nhóm một hay nhiều client, mà những client này sẽ cùng được nhận các message gởi đến channel đó, nói cách khác là các client thuộc về một channel sẽ nhận được message gởi đến channel đó. Những client trong cùng một channel mới có thể nhận thấy nhau.
Một channel được ngầm tạo ra khi có client đầu tiên tham gia và kết thúc khi client cuối cùng ngưng kết nối. Trong khi channel đang tồn tại thì client có thể tham gia vào channel đó bằng cách dùng tên channel.
Tên của channel có thể lên đến 200 ký tự và bắt đầu bằng ký tự ‘&’ hoặc ký tự ‘#’, Tên channel không có ký tự khoảng trắng (‘ ‘), Ctr+G(^G or ASCII 7), dấu phẩy (‘,’ ).
Để có thể tạo ra một channel hay là tham gia vào một channel có sẵn client phải gởi JOIN message để tham gia vào channel đó.
Channels operation :
Channel oprerator còn được gọi là “chop” hoặc “chanop”. Khi có một user tạo ra channel thì mặc nhiên user đó trở thành channel operator, là người sở hữu channel user (channel operator) có đầy đủ mọi quyền hạn trên channel đó. Để quản lý các client channel operator có thể thực hiện quyền của mình như :
ð KICH - đẩy một client ra khỏi channel
ð MODE - thay đổi mode của channel
ð INVITE - gọi một client tham gia vào channel mà nó đang ở trạng thái invite-only (mode i+).
ð TOPIC - thay đổi topic channel, channel này đang ở trạng thái +t(mode +t).
Ngoài ra channel operator có thể cấp quyền cho client khác hay nhường quyền channel operator lại. Tuy nhiên quyền hạn này không được chính xác vì những nguyên nhân đã được trình bài phần trên.
Một channel operation thì được nhận dạng bởi ký tự bắt đầu “@” tiếp theo là nickname (nick name của user tạo ra channel đó). Ví dụ @HappyMan
II) Những quy định trong IRC.
Dạng chung của thông điệp.
Thông điệp thường có 2 dạng:
Các thông điệp xuất phát từ lệnh (thông điệp được phát sinh từ một lệnh): là thông điệp được client gửi lên server để yêu cầu một mục đích nào đó (ví dụ như hỏi thông tin một nick nào đó, hay hỏi thông tin các channel, hoặc chỉ đơn giản là muốn gửi thông điệp cần nói trên channel…). Các thông điệp này có thể không còn nguyên thủy như khi user gõ vào, mà chúng được gắn thêm prefix (địa chỉ host, nickname... của user gửi).
Thông điệp trả về: là thông điệp được server gửi về client để trả lời lại các yêu cầu của client.
Các thông điệp có hai dạng: thông điệp bằng chữ và thông điệp bằng số.
2. Message
Message là thông điệp từ client gởi cho server hoặc ngược lại, nếu trong message chứa lệnh (lệnh này sẽ được mô tả phần sau), thì những lệnh này sẽ được đáp lại bằng thông điệp phản hồi (reply message).
Mỗi message gồm có 3 phần chính: phần đầu còn gọi là tiếp đầu ngữ (prefix), tiếp theo đó là phần lệnh (command) và cuối cùng là danh sách đối số(parameters list), mỗi phần cách nhau bởi ký tự khoảng trắng (ASCII 0x20). Bắt đầu prefix là ký tự “:” (ASCII 0x3b) chính nhờ vào ký tự này mà server nhận biết chính xác phần lệnh (command), những cú pháp lệnh sẽ được mô tả chi tiết trong phần định dạng message (format message).
Nếu message từ client gởi đến mà không nhận thấy phần đầu (prefix) thì server xem như message ._.đó được gởi từ client mà nó kết nối trực tiếp, vì thế các client muốn gởi message đến server mà nó kết nối trực tiếp không nên dùng phần prefix, nếu sử dụng cần phải sử dụng chính xác vì nếu prefix không đúng thì server không đáp lại mà nó im lặng.
Phần lệnh (command) là những thành phần thuộc về IRC (được mô tả chi tiết trong phần message detail), chiều dài lệnh và danh sách đối số cho phép là 510 ký tự, cuối mỗi message có ký tự kết thúc (CR-LF) như thế tổng chiều dài chúng là 512 ký tự.
Định dạng một message
Vấn đề đặt ra là làm sao có thể nhận dạng và phân tích ra từ những luồng tuần tự các message gởi đến, để giải quyết vấn đề này người ta lập ra quy định cho message.
[‘:’]
Phần đầu(prefix) Lệnh DS đối số ký tự kết thúc
Như đã mô tả ở phần trên, một message luôn cóù ký tự kết thúc nhờ vào ký tự này mà server có thể tách message ra khỏi luồng (stream). Sau khi tách ra chúng được phân tích thành 3 thành phần chính. chúng ta sẽ khảo sát chúng trong phần sau. Bây giờ chúng ta phân tích cấu trúc tổng quát cho một message:
Giải thích cú pháp:
@ Đối tượng nằm trong dấu [ ] có thể có hoặc không có.
@ Đối tượng nằm trong dấu là bắt buột phải có.
@ Toán tử ‘ | ’ là có khả năng chọn một trong hai ví dụ: “ | ” có thể chọn hoặc chọn .
@ Đối tượng nằm trong dấu {} có thể xuất hiện nhiều lần.
3 thành phần chính của message:
ØPhần đầu (prefix)
Phần prefix có thể không có, bắt đầu prefix phải có dấu ‘:’ :
::= | [‘!’ ][‘@’ ]
Ở đây chúng ta có thể thấy prefix có thể là servername hoặc nickname ngoài ra còn có thể có thêm username hay hostname hoặc cả hai. Nhưng đối với username phải có ký tự ‘!’ đứng trước, tương tự như thế hostname phải có ký tự ‘@’đứng đầu.
ØPhần Lệnh (command)
Phần lệnh có thể ở dạng chuỗi hoặc số :
::= {} |
dễ dàng chúng ta có thể nhận thấy lệnh có thể do một hay nhiều ký tự hoặc giá trị số gồm 3 chữ số.
ØPhần danh sách đối số (parameters list)
::= [‘:’ | ]
Chúng ta thấy đối số có thể không xuất hiện, giải thích thêm về
là chuỗi ký tự đại diện trong đó không có ký tự NULL hoặc CR, LF. Chuỗi này được đặt giữa hai ký tự “* * ”
cũng là chuỗi đại diện nhưng có sự phân biệt, ký tự đầu chuỗi không được là ký tự ‘:’(ASCII 0x3b).
Ví dụ: “* !* “ đại diện cho tất cả các user.
“*@* “ đại diện cho tất cả host name.
“*.edu “ đại diện cho nhóm server có phần cuối là edu.
3. Giá trị số trả về (numeric replies)
Sau khi khảo sát về cấu trúc của một message, chúng ta được biết một message được nhận dạng như thế nào. Sau khi nhận được message, server sẽ phát ra message phản hồi (repply message). Reply Message được hiểu tương tự như là message, thật sự nó gồm 3 phần: sender prefix, giá trị số gồm 3 chữ số và target.
Ø sender prefix là nickname của client gởi.
Ø giá trị số được mô tả phần sau.
Ø ::= | ‘@’ | | [ “,” ] để nhận biết reply message đến client nào chúng dựa vào .
Ở đây chúng ta có 2 loại message phản hồi:
error reply
normal reply
Lưu ý: chỉ có server mới có khả năng phát ra reply message.
III. Chi tiết cho từng message (Message detail)
Đây là phần mô tả chính cho mỗi loại message, để sever và client có thể nhận biết chúng. Server sẽ nhận message và phân tích chúng, sau đó trả lại thông báo thích hợp. Nếu phân tích message mà gặp phải lỗi (error). Khi đó server phải có cơ chế thông báo cho client.
Một lỗi (error) sinh ra thường do những nguyên nhân sau:
þ Sai đối số (incorrect parameter).
þ Sai Lệnh(incorrect command).
þ Sai địa chỉ đích Tên server
NickName
Channel name
þ Sai vì vi phạm quyền hạn v.v…
Cú pháp cho một command message
:Name COMMAND parameter list
Chú ý: Đối với “Name”, đó là tên của client gởi. Một server (từ xa) được client gởi message đến thì server sẽ căn cứ vào “Name”, để có thể đáp lại yêu cầu ngược lại nếu client gởi đến server mà nó kết nối trực tiếp không cần.
1. Nhóm message đăng ký kết nối
Nhóm message đăng ký kết nối chịu trách nhiệm kết nối với IRC server.
Trong nhóm message này có 3 loại message:
v Message do server sử dụng.
v Message do client sử dụng.
v Message dùng chung.
1.1 Message do Server sử dụng
Server Message
Cú Pháp: SERVER
Server message dùng để thông báo cho các server khác trên toàn hệ thống biết, có thêm một server kết nối vào hệ thống mạng (IRC network). Những thông tin về server này được chuyển cho các server khác trên mạng chứa trong đối số . Sự kiện này xảy ra khi có một server mới kết nối vào hệ thống mạng. Lúc đó server (mới kết nối vào) phát ra SERVER message, message này được phát quảng bá (broadcast) lên mạng.
Lưu ý SERVER message khi gởi đến phải được chấp nhận bởi Server có tên là đối số .
Giải thích: vì chúng ta biết rằng khi có một server tham gia vào hệ thống thì các server khác phải có thông tin về server đó để chúng cập nhật lại cấu hình mạng, như thế thông tin này phải thông báo cho các server khác. Message này được gởi cho từng server.
Server Quit Message
Cú Pháp: SQUIT
SQUIT message được dùng khi server muốn thoát khỏi hệ thống mạng. Message này cũng là hành động của operator giúp giữ cho hệ thống mạng gọn hơn (orderly fashion), hoặc loại bỏ server ra khỏi hệ thống nếu nó bị treo (deal). Operator có thể dùng SQUIT message cho các server ở xa trong tình trạng này các server còn lại phải phân tích SQUIT message này để cập nhật lại thông tin về hệ thống mạng (IRC Network). lí do việc tách khỏi hệ thống, comment được operator đưa ra.
1.2 Message Client sử dụng
Operator message
Cú Pháp: OPRE
Người dùng thông thường sử dụng dòng lệnh này để tranh quyền làm operator. Tuy nhiên, nếu server không cấu hình cho phép kết nối từ một client được phép tự thiết lập quyền làm operator khi gia nhập channel thì dòng lệnh này không có tác dụng (khi đó server sẽ trả về lỗi ERR_NOOPERHOST cho user).
Khi lệnh OPER thành công, server sẽ trả về cho user đó một thông điệp như khi sử dụng lệnh MODE đặt trạng thái operator cho người dùng.
Quit message
Cú Pháp: QUIT []
Một client muốn thoát ra hệ thống mạng nó phát ra QUIT message đến server mà nó kết nối trực tiếp server khi nhận được message này nó sẽ đóng kết nối với client đó. Đồng thời thông báo cho server khác để các server này thông báo cho các client trong cùng channel.
1.3 Nhóm message dùng chung
Pass message
Cú pháp : PASS
Đối với Server:
Server dùng pass message để thiết lập password cho mình, bằng cách dùng password server ngăn không cho sự xâm nhập bất hợp pháp của các client khác. Server dùng pass message (có cung cấp password) trước khi server phát ra message SERVER (message này gúp cho server định danh trên mạng). Sau khi phát ra pass message server có thể đăng ký kết nối (connection register).
Đối với Client :
Client dùng pass message để thiết lập password cho nickname mà nó muốn đăng ký, nói cách khác. Password được dùng để không cho người khác sử dụng nickname của mình. Tất nhiên, việc thiết lập password là không cần thiết, nếu như chúng ta không cần bảo vệ nickname của mình. Tuy nhiên đối với nhóm channel operator là cần thiết. Cũng giống như server, client phải đưa ra PASS message trước khi đăng ký kết nối (bằng cách gởi NICK/USER message).
Lưu ý : PASS message có thể được gởi nhiều lần. Nhưng chỉ có lần cuối cùng gởi mới được xác nhận password và xem đó là password chính thức.
NickMessage
Cú pháp: NICK []
Đối với Server:
Server dùng NICK message để thông báo vị trí của cho các server khác, khi sever dùng NICK message đối số phải được đưa vào, (hopcount là số server phải đi qua để đến được đích). Nếu một package được chuyển trên mạng khi đi qua một server nó rừ đi hopcount một đơn vị cho đến khi hopcount bằng 0 thì đến đích.
Đối với Client:
Client dùng NICK message để xác định nickname cho mình hoặc thay đổi nickname của mình. Nếu NICK message dùng cho client không cần đối số . Trong trường hợp có xuất hiện đối số thì nó sẽ bị bỏ qua.
Nếu NICK message từ client đến server, mà server đó đã có thông tin về nickname (nickname đã đăng ký) đó, thì hiện tượng cạnh tranh (Nickname Collision) xảy ra. Vì chúng ta được biết nickname phải là tên duy nhất không cho phép trùng. Kết quả là tất cả thông tin về nickname đó sẽ bị hủy bỏ khỏi cơ sở dữ liệu trong server (client kết nối) và một KILL message được phát ra để hủy bỏ nickname đó ra khỏi cơ sỡ dữ liệu của các server còn lại. Nếu server nhận được nickname từ client (kết nối trực tiếp vào server) mà nickname này bị trùng với một nickname hiện có trong server, thì nó sẽ phát ra thông báo lỗi ERR_NICKCOLLISION. Sau đó hủy bỏ NICK message và không phát ra KILL message. Như thế một client khi đưa ra nickname không thích hợp thì client đó không thể đăng ký kết nối với server đồng thời không ảnh hưởng đến các client khác.
User Message
Cú pháp: USER
Đối với Server:
Server dùng USER message để thông báo cho các server khác có user mới tham gia vào mạng (IRC network). Đồng thời nó cũng cung cấp cho các thông tin như , , , . Khi gởi USER message cho các server khác thì client sẽ gắn nickname vào trước message đó. Căn cứ vào nickname này, server sẽ nhận biết được thông tin thuộc về nickname nào. Nhưng có một điều lưu ý là server dùng USER message, sau khi nó nhận được NICK message và USER message từ client muốn kết nối vào hệ thống mạng. Điều này có nghĩa là client gởi NICK message thành công, tiếp đó là USER message được gởi đến server. Khi đó server sẽ phát ra USER message.
Đối với Client:
Sau khi đăng ký nickname thành công, client phát ra USER message để cung cấp thông tin cho server, thông tin mà nó cung cấp là , , , .
Tuy nhiên có một số điều lưu ý là: hai đối số và bị bỏ đi nếu là client kết nối trực tiếp đến server. Vì lý do bảo mật trên mạng (security reasons). Và điều lưu ý thứ hai là đối số phải đứng sau cùng. Vì trong có thể có ký tự khoảng trắng và ký tự đầu tiên là dấu ‘:’.
2. Nhóm message dùng cho việc điều khiển Channel
2.1 Join message
Cú Pháp: JOIN {,} [][,]
Để có thể tham gia vào channel client phải phát ra JOIN message, server kiểm tra message này nếu cung cấp đúng channel thì cho phép gia nhập vào channel. Ngoài ra server còn kiểm tra client đó có bị trạng thái “active bans”, (đây là trạng thái mà client đó bị cấm quyền kết nối người cấm quyền chính là channel opertor) nếu gặp trạng thái này server không cho gia nhập.
Điều kiện để một client có thể tham gia vào channel:
User phải được mời (invite) nếu channel đó đang ở trạng thái invite-only(mode +i). Nickname, username, hostname của user phải không ở vào trạng thái “active bans” (trạng thái cấm tham gia).
Phải cung cấp đúng password và nickname nếu có thiết lập password cho nickname.
Kể từ khi client JOIN thành công chúng sẽ nhận được thông báo, và có thể dùng các command để liên lạc với server của chúng bao gồm: MODE, KICK, PART, QUIT và quan trọng nhất là PRIVMSG/NOTICE message.
JOIN message cũng cần phải được phát quảng bá (broadcast) lên mạng để các server có được thông tin về client mới tham gia, nhờ vào thông tin này các server có thể tìm thấy client đó.
2.2 part message
Cú pháp: PART {,}
Client dùng part message để thoát khỏi channel
2.3 Mode message
MODE message phục vụ 2 mục đích trong IRC, nó cho phép user và channel thay đổi mode của mình.
Channel mode
Cú pháp: MODE {[ + | - ]| o | p | s | i | t | n | b | v } [][][]
Trong trường hợp này MODE dùng thay đổi trạng thái channel chỉ có nhóm channel operator mới có quyền sử dụng command này.
Các giá trị mode:
o - lấy quyền channel operation.
p - cờ private.
s - cờ secret.
i - cờ thông báo channel ở trạng thái invite.
b - thiết lập user ban mask.
User mode
Cú pháp : MODE {[+ | - ]| i | w | s | o |}
MODE trong trường hợp này dùng cho user.
Một user MODE chỉ có thể được chấp nhận nếu nickname người gởi và đối số phải giống nhau.
Lưu ý: một channel operator có thể tự giáng cấp (deopping) của mình bằng cách đưa ra mode -o
2.4 Topic message
Cú Pháp: TOPIC []
Topic message dùng thay đổi hoặc xem chủ đề của channel. Nếu đối số được đưa vào lệnh TOPIC message sẽ thay đổi topic cho channel đó, trong trường hợp nó đang ở chế độ cho phép user thay đổi.
2.5 Names message
Cú pháp: NAMES []{,}
Bằng cách sử dụng NAMES message. User có thể xem danh sách tất cả nickname có thể thấy được (visible) trên channel, đối số được dùng đối với trường hợp này không phải là channel private (mode+p) hoặc secret (mode +s), vì hai mode này không cho phép user truy xuất. Nếu có cung cấp đối số thì nó sẽ trả về danh sách nickname của channel đó, không có thông báo lỗi được trả về nếu sai channelname. Nếu trường hợp không có đối số thì nó sẽ trả về danh sách tất cả các channel và nickname (trong các channel đó).
2.6 List message
Cú Pháp: LIST [{,}[]]
LIST message dùng để client liệt kê danh sách các channel và topic của chúng. Nếu đối số không được cung cấp thì nó sẽ liệt kê các channel mà client đang tham gia. Đối với Private và secret channel chúng vẫn được liệt kê nhưng không hiển thị chủ đề.
2.7 Invite message
Cú Pháp: INVITE
INVITE message được dùng để mời/gọi user tham gia vào channel, đối số là nickname của user được mời/gọi. Tuy nhiên không có sự đòi hỏi user phải tham gia vào channel. User được mời phải nằm trong channel ở chế độ +i (invite-only).
2.8 Kick message
Cú pháp: KICK []
KICK command dùng để loại bỏ user ra khỏi channel. Chỉ có channel operator mới có quyền dùng lệnh KICK, mỗi server nhận được KICK message nó kiểm tra thật chính xác trước khi nó hủy/loại bỏ user đó ra khỏi channel. Sau khi bị KICK user đó có thể tái kết nối, điều này khác với BANs nếu user bị BANs nó sẽ không được kết nối trở lại cho đến khi người quản trị channel cho phép.
3. Nhóm message truy vấn đến server (server query and command)
Server Queries and command là nhóm message được thiết kế để trả về thông tin của tất cả những server mà chúng đang tham gia trong mạng (IRC network), server (được truy vấn) phải trả lời chính xác các truy vấn. Nếu trường hợp server có những thông tin trả về không chính xác lập tức server đó sẽ bị loại ra khỏi mạng cho đến khi nó được phục hồi.
3.1 Version message
Cú pháp: VERSION []
Message này dùng để xem version chương trình của server, đối số là server name của server từ xa(remote server) mà client không trực tiếp kết nối đến, nếu không có đối số mặt định là server hiện hành.
3.2 Stats Message
Cú pháp: STATS [[]]
client dùng STATS message để truy vấn (query) thông tin từ server, thông tin nhận được có thể là con số thống kê nào đó.
Hoạt động của lệnh này mang tính độc lập cao mặc dù server phải trả về thông tin truy vấn (query). Khi có STATS message đến server, nó sẽ kiểm tra xem server đích (destination server), sau đó nó chuyển message cho server kế tiếp cho đến khi đến đích.
3.3 Link Message
Cú Pháp: LINKS [[]]
Với message LINKS, user có thể liệt kê tất cả những server mà biết.
Danh sách trả về là các server. Tuy nhiên danh sách này có một số phần bị che dấu đi (mask)ù nếu không có sự che dấu này thì tất cả được hiển thị.
3.4 Time Message
Cú pháp: TIME []
TIME message dùng cho client truy vấn (query) về thời gian từ một server nào đó, server được truy vấn sẽ nằm trong đối số , trường hợp đối số không được đưa vào, thì server hiện hành phải trả lời truy vấn đó.
3.5 Connect message
Cú pháp: CONNECT [[]]
CONNECT command có thể được dùng để buộc server thiết lập một kết nối đến server khác ngay lập tức. CONNECT là lệnh hạn chế nó chỉ được dùng cho người quản trị ngoài ra không có client nào khác sử dụng được.
3.6 Trace Message
Cú pháp: TRACE []
Đây là lệnh được dùng để tìm đường đi đến server nào đó (destination server). Mỗi server khi xử lý TRACE, message nó phải báo cho người gởi (sender) bằng cách là đưa ra những message chỉ đường, đồng thời nó gởi tiếp cho server kế tiếp. Tiến trình này được lặp đi lặp lại cho đến đích.
Nếu đối số không đưa vào thì mặc định message sẽ đến server kết nối trực tiếp.
Lưu ý: trong khoảng giữa server gởi và server nhận, các server trung gian phải gởi trả về message trả lời RPL_TRACELINK.
3.7 Admin Message
Cú pháp: ADMIN []
Server dùng ADMIN message để tìm tên người quản lý (administrator) của dùng làm đối số.
Nếu không có đối số thì xem server mà nó kết nối trực tiếp đến là đối số. Mỗi server có khả năng chuyển ADMIN message đến server khác, sao cho message đến được server cần đến.
Như thế chúng ta thấy rằng một client có thể yêu cầu một server khác gởi thông tin về người quản lý cho mình
3.8 Info Message
Cú pháp: INFO []
INFO message do client yêu cầu khác trả về thông tin cho mình, nếu đối số không đưa ra xem như server hiện tại (server kết nối trực tiếp).
4. Nhóm message gởi text (sending message)
Mục đích chính IRC protocol là cung cấp cho các client có thể giao tiếp với nhau, để thực hiện việc trao đổi text, ta cần có Private Message và Notice Message để chuyển text message từ client này đến client khác. Sau khi thực hiện quá trình kết nối với server và gia nhập channel thành công sending message sẽ hoạt động để thực hiện mục đích chính cho chat protocol.
4.1 Private Message
Cú pháp: PRIVMSG {,}
Message này dùng cho client, user có thể gởi private message từ user gởi đến user nhận, và chỉ có user nhận mới được nhận PRIVMSG message. Đối số là nickname của client nhận, có thể là danh sách nickname, channel chúng được phân biệt với nhau bằng dấu phẩy (‘ , ’).
4.2 Notice Message
Cú pháp: NOTICE
NOTICE message sử dụng tương tự như PRIVSMSG message chỉ có điều khác nhau giữa hai message này là NOTICE message không cần phải có sự đáp lại từ client nhận. Qui định này cũng được áp dụng cho server, như thế server không cần thông báo lỗi cho client. Lý do có việc quy định này là để tránh sự tự động trả lời lặp đi lặp lại giữa server và client.
5. Nhóm message do client truy vấn đến server (user-based query)
Đây là nhóm command mà user có thể dùng để tạo truy vấn. Khi dùng nhóm lệnh này user có thể xem được thông tin chi tiết về các user khác với điều kiện các user có thể nhận biết nhau trên mạng. Việc có thể nhận biết nhau tùy thuộc vào mode user đó và trạng thái channel đang dùng.
5.1 Who Query
Cú pháp: WHO [[]]
WHO message dùng cho client để tạo ra truy vấn, kết quả truy vấn đó là danh sách các user phù hợp với đối số . Nếu không có đối số thì tất cả user (có thể thấy được) được trả về, có thể nhận được danh sách các operator nếu chúng ta sử dụng đối số []hoặc ký tự đại diện (wildcard).
Đối số có thể là hostname, server, realname, nickname.
5.2 Who is Query
Cú pháp: WHOIS [][,[,…]]
Message này dùng để yêu cầu thông tin cụ thể về một user nào đó, như thế có sự khác nhau giữa WHO message và WHOIS message cụ thể là:
WHO message: yêu cầu danh sách các user.
WHOIS message: yêu cầu thông tin về một user nào đó.
Server sẽ trả lời cho message này, trong trường hợp server là server ở xa (remote server) thì nó phải được đưa vào đối số .
Lưu ý: Danh sách các nickmask phải cách nhau bởi dấu phẩy.
5.3 Whowas Message
Cú pháp: WHOWAS [[]]
Khác với WHOIS messge, WHOWAS messge yêu cầu thông tin những user trong quá khứ mà hiện giờ không còn có mặt trong danh sách user active. Để trả lời cho message này server phải tìm kiếm trong danh sách các nickname đã thoát ra khỏi hệ thống mạng (IRC network). Chúng ta thấy trong danh sách đối số có , đối số này là một số nguyên dương, cho biết lấy bao nhiêu lần thông tin về nickname đó, có nghĩa là trong danh sách các nickname đã rời khỏi hệ thống mạng có thể có nhiều mẩu tin nickname giống nhau nhưng khác nhau về thời gian đăng nhập. Khi đó quy định lấy bao nhiêu mẩu tin, nếu trường hợp không có giá trị server sẽ trả về toàn bộ thông tin các nickname mà server có được.
6. Nhóm message khác (miscellaneous message)
6.1 Kill Message
Cú pháp: KILL
KILL message được dùng khi cần kết thúc kết nối giữa client và server, khi gặp phải hiện tượng Nick Collision (khi có sự trùng lắp của 2 mẩu tin trong danh sách Nickname.) xảy ra, khi đó server sẽ phát ra KILL message, KILL message cũng được channel operator sử dụng là lý do cho KILL message do server đưa ra để giải thích cho hành động của mình.
Ghi chú: chỉ có operator mới có thể dùng KILL message để ngưng kết nối của users.
6.2 Ping Message
Cú Pháp: PING [ ]
PING message dùng để kiểm tra một client còn hoạt động trong hệ thống mạng hay không? PING message được server gởi đến client, khi nhận được message này, client phải đáp lại bằng PONG message, nếu sau một khoảng thời gian nào đó (time out) mà không thấy client trả lời thì xem như kết nối đó bị ngắt, vì thế khi nhận được PING message client phải trả lời bằng PONG message càng sớm càng tốt.
Xem trong danh sách đối số ta nhận thấy rằng có đến 2 đối số và điều đó có nghĩa là PING message gởi đến cả hai và , tuy nhiên server nhận được message nó không đáp lại mà dựa vào client kết nối với nó để thông báo kết nối vẫn còn liên thông. Từ đây chúng ta rút ra được kết luận là: Server không đáp lại PING message mà nó nhờ client đáp lại.
6.3 Pong Message
Cú Pháp: PONG []
PONG là message được client dùng để đáp lại PING message là đối số cho biết client nào đáp lại PING message.
6.4 Error Message
Cú pháp: ERROR
ERROR message dùng cho server thông báo lỗi cho operator. Nó có thể được gởi từ server này đến server khác. Message này chỉ dùng để thông báo lỗi liên kết giữa server với nhau, nếu server nhận được ERROR message từ server khác thì nó không cần thông báo cho server khác biết, đều này có thể hiểu rằng server gởi ERROR message đến server nhận, khi đó message chỉ chuyển cho operator của nó.
Một khi cần thông báo lỗi đến client operator nó phải được đóng gói thông qua lệnh NOTICE message để chuyển, tất nhiên client operator không cần phải trả lời cho message này.
7. Nhóm message tùy chọn(option message)
7.1 Away Message
Cú pháp: AWAY[message]
Với AWAY message user có thể thiết lập cơ chế trả lời tự động cho mỗi PRIVMSG message, nội dung trả lời được lưu trữ trong chuỗi [message]. Sau khi thiết lập xong chế độ này việc trả lời tự động sẽ được gởi từ server đến client phát ra PRIVMSG message, server gởi chính là server kết nối trực tiếp với client phát ra PRIVMSG message.
Nếu AWAY message không có [message] thì xem như chuỗi trả lời bị xóa bỏ.
7.2 Rehast Message
Cú pháp:
REHASH
Server có một tập tin cấu hình để thiết lập các tham số. Lệnh này do operator thi hành bắt buộc server phải đọc lại và xử lý lại tập tin cấu hình của server đó.
7.3 Restart Message
Cú pháp: RESTART
Đây là message dùng cho channel operator buộc server phải khởi động (restart) lại hệ thống.
7.4 Summon Message
Cú pháp: SUMMON []
Mời một client có chương trình server hiện đã có cài đặt trên host gia nhập hệ thống IRC Nếu không có đối số thì nó xem server hiện hành là server đích, khi đó các client kết nối trực tiếp đến server đó sẽ được mời.
7.5 Users Message
Cú Pháp: USER[]
USER message dùng để trả về danh sách của các user đã login vào tương tự như WHO message. Tuy nhiên có một số client không thể dùng message này được trên server của họ, có thể vì lý do bảo mật (security reasion). Nếu user không thể dùng message này một reply được phát ra.
7.6 Operwall Message
Cú pháp: WALLOPS
Khi WALLOPS hoạt động nó sẽ gởi đến tất cả các operator hiện có trên mạng.
7.7 Userhost Message
Cú pháp: USERHOST{}
USERHOST yêu cầu trả về thông tin của client có làm đối số, danh sách có thể lên đến 5 đối số khi đó thông tin về mỗi nickname sẽ được trả về cho client.
Lưu ý : mỗi thông tin trả về được phân cách bằng ký tự khoảng cách.
7.8 Ison Message
Cú pháp: ISON{}
ISON message được thiết lập để trả về thông tin về hiện thời trên IRC một cách hiệu quả nhất. Có thể có nhiều đối số được đưa vào nhưng chúng phải cách nhau bằng ký tự khoản trắng.
Chương II: Tìm hiểu về Mail
Email là một phương tiện truyền thông tiện lợi nhanh chóng, rẻ tiền, được sử dụng rộng rãi trên Internet. Khi nhắc đến Internet thì người ta không thể không nói đến Email. Sau đây, chúng ta hãy xét đến một số khái niệm về mạng Email.
I/ Tìm hiểu chung về Mail.
1) Các thành phần của một hệ thống Email:
Một hệ thống Email bao gồm các phần như sau:
Người gởi và người nhận.
Phần giao tiếp với hệ thống Email, đó chính là chương trình Email mà chúng ta sử dụng.
Hệ thống mạng Email gồm có:
Một vùng đệm dùng để chứa các message trước khi được gởi đi.
Một chương trình client.
Một chương trình Server.
Các MailBox dùng để chứa các thư nhận được.
Trong đa số hệ thống mạng Email hiện nay, công cụ giao tiếp của user với hệ thống Email thường gắn với các chương trình Client. MailBox chính là địa chỉ hộp thư của user, nơi chứa đựng dữ liệu của Email.
2) Các thành phần của một hệ thống Internet Mail:
User Agent (UA) thay thế cho chương trình Email và các bộ phận MTA thay thế cho các quá trình Server, Client.
Người sử dụng tương tác với chương trình User Agent, mà nó thay thế cho bạn trong việc tương tác với kho chứa dữ liệu Email (hay chính là MTA). User Agent sẽ che chắn cho bạn khỏi phải tương tác với một mớ các hệ thống Email khác nhau. Cũng tương tự MTA sẽ che chắn hệ thống Email không phải tương tác với các cơ quan đại diện của người sử dụng (UA) hay các MTA khác. Điều này giúp cho hệ thống Email của chúng ta trở nên thân thiện, gần gũi hơn với người sử dụng - và đó cũng chính là mục đích chính của các chương trình Mail khác nhau.
3) Cấu trúc của một bức mail:
Về cơ bản, một bức Mail bao gồm 3 phần chính:
Phần phong bì: Mô tả thông tin về người gởi và người nhận. Do hệ thống tạo ra.
Phần tiêu đề (header): chứa đựng các thông tin về người gởi, người nhận, chủ đề bức Mail, địa chỉ hồi âm .v.v.. Các thông tin này, một số được người sử dụng cung cấp khi gởi Mail, một số khác được chương trình Mail thêm vào, và số còn lại do Hệ thống điền thêm.
Phần nội dung (body): chứa đựng nội dung của bức Mail, là nội dung được tạo ra bởi trình soạn thảo Editor của chương trình Mail. Sau đây là chi tiết của từng phần:
Phần phong bì (Envelope):
Phần này do các MTA tạo ra và sử dụng, nó chứa các thông tin để chuyển nhận email như địa chỉ của nơi nhận, địa chỉ của nơi gửi. Hay nói cách khác, giao thức SMTP sẽ quy định thông tin của phong bì, các hệ thống Email cần những thông tin này để chuyển dữ liệu từ một máy tính này sang một máy tính khác.
Phần tiêu đề (header):
Phần này cung cấp những thông tin tổng quát về Email như người nhận, người gửi, ngày giờ nhận...
Cấu tạo gồm nhiều trường (field) cấu trúc mỗi trường là một dòng văn bản ASCII chuẩn 7 bit như sau: : .
Sau đây là một số trường thông dụng và ý nghĩa của nó :
- Date: chỉ ngày giờ nhận mail.
- From: chỉ người gởi.
- To: chỉ người nhận.
- Cc: chỉ người những nhận bản copy của mail.
- Bcc: chỉ ra những người nhận bản copy của bức mail, nhưng từng người không biết những người nào sẽ nhận bức thư này
- Return-path: chứa các thông tin để người nhận có thể trả lời lại (thường nó chính là địa chỉ người gởi).
- Subject: chủ đề của nội dung Email.
Các trường trên là các trường chuẩn do giao thức SMTP quy định, ngoài ra trong phần header cũng có thể có thêm một số trường khác do chương trình Email tạo ra nhằm quản lý các email mà chúng tạo. Các trường này được bắt đầu bằng ký tự X- và thông tin theo sau là cũng giống như ta thấy trên một trường chuẩn.
Phần nội dung (body):
Để phân biệt phần tiêu đề và phần nội dung của bức Mail, người ta qui ước đặt ranh giới là một dòng trắng (chuỗi ký tự "\r\n"). Kết thúc của phần nội dung là chuỗi ký tự kết thúc Mail: "\r\n.\r\n". Như vậy nội dung bức Mail nằm trong khoảng giữa dòng trắng đầu tiên và ký tự kết thúc Mail, và trong phần nội dung của bức Mail không được phép tồn tại chuỗi ký tự kết thúc Mail. Mặt khác do môi trường truyền thông là mạng Internet nên các ký tự cấu thành phần body của bức Mail cũng phải là các ký tự ASCII chuẩn.
II/ Các chuẩn được sử dụng trong hệ thống Mail
Có 2 chuẩn về Mail quan trọng nhất và được sử dụng nhiều nhất từ trước đến nay là X.400 và SMTP (Simple Mail Transfer Protocol). SMTP thường đi kèm với chuẩn POP3 và do hạn chế của SMTP mà ngày nay người ta dùng chuẩn mở rộng của nó là ESMTP (Extended SMTP). Mục đích chính của X.400 là cho phép các mail có thể được truyền nhận thông qua các loại mạng khác nhau bất chấp cấu hình phần cứng, hệ điều hành mạng, giao thức truyền dẫn được dùng. Còn mục đích của chuẩn SMTP miêu tả cách điều khiển các thông điệp trên mạng Internet. Điều quan trọng của chuẩn SMTP là giả định máy nhận phải dùng giao thức SMTP gởi Mail cho 1 Server luôn luôn hoạt động. Sau đó, người nhận sẽ đến lấy Mail của họ từ Server khi nào họ muốn dùng giao thức POP (Post Office Protocol), ngày nay POP được cải tiến thành POP3 (Post Officce Protocol vertion 3). Các giao thức Mail thông dụng : chuẩn X.400, chuẩn MAIP, SMTP (ESMTP), POP3 . Ở đây chỉ trình bày chi tiết về POP3 và SMTP.
1. Giao thức SMTP(Simple Mail Transfer Protocol )
Mục đích của giao thức SMTP là truyền mail một cách tin cậy và hiệu quả. Giao thức SMTP không phụ thuộc vào bất kỳ hệ thống đặc biệt nào và nó chỉ yêu cầu trật tự của dữ liệu truyền trên kênh truyền đảm bảo tính tin cậy.
1.1. Mô hình SMTP
SMTP được thiết kế dựa trên mô hình giao tiếp sau:
+ Sender- SMTP thiết lập một kênh hai đường vận chuyển đến một receiver- SMTP .
+ Receiver- SMTP có thể là đích đến cuối cùng hay một trung gian. Những lệnh SMTP được sinh ra bởi Sender-SMTP gửi đến Receiver- SMTP. Những reply SMTP được gửi từ Receiver- SMTP đến Sender- SMTP trong sự đáp ứng cho những lệnh đó.
Khi một kênh chuyển giao được thiết lập sender-SMTP gửi đi một lệnh Mail biểu thị cho Sender của mail đó. Nếu Receiver-SMTP có thể chấp nhận mail, nó trả lời với một OK reply. Sau đó Sender-SMTP gửi một lệnh RCPT nhận diện Receiver mail nếu Receiver-SMTP có thể chấp nhận mail nó trả lời với một OK reply nếu không nó sẽ lời với một reply bác bỏ receiver đó (nhưng không phải toàn bộ sự giao dịch đó). Sender- SMTP và Receiver- SMTP có thể điều đình với vài recipient, khi những recipient đã được dàn xếp Sender-SMTP gửi mail data kết thúc với một chuỗi đặc biệt nếu receiver xử lý Mail Data thành công nó trả lời với một OK reply. Cuộc hội thoại một cách chủ ý lock –step (one-at-a-time).
Sender
SMTP
Receiver
SMTP
User
F._.