Lập trình Mạng Microsoft .NET Framework phần 1

Chia sẻ: Nghia Bui Tuan | Ngày: | Loại File: PDF | Số trang:7

0
190
lượt xem
99
download

Lập trình Mạng Microsoft .NET Framework phần 1

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Lập trình Mạng Microsoft .NET Framework bao gồm một tập các lớp dùng để lập trình mạng thuộc hai không gian tên: System.Net và System.Net.Sockets

Chủ đề:
Lưu

Nội dung Text: Lập trình Mạng Microsoft .NET Framework phần 1

  1. Chương 11 : Lập trình Mạng Microsoft .NET Framework bao gồm một tập các lớp dùng để lập trình mạng thuộc hai không gian tên: System.Net và System.Net.Sockets. Các lớp này hỗ trợ mọi thứ, từ lập trình dựa-trên-socket với TCP/IP cho đến download file và trang HTML từ web thông qua HTTP. Hai không gian tên này cũng là nền tảng cho hai nền networking cấp cao hơn—Remoting và dịch vụ Web XML. Hai nền này sẽ được đề cập chi tiết trong chương 12. Chương này sẽ trình bày các vấn đề sau: Lấy tài nguyên từ web thông qua HTTP (mục 11.1, 11.2, và 11.3). Hiển thị một trang web trong một ứng dụng dựa-trên-Windows bằng điều kiểm Web Browser (mục 11.4). Lấy địa chỉ IP và thông tin DNS về máy tính hiện hành và các miền khác trên World Wide Web (mục 11.5 và 11.6). Gửi thông điệp “ping” (mục 11.7) và giao tiếp bằng giao thức TCP và UDP (mục 11.8 đến 11.13). Gửi và nhận e-mail (mục 11.14 và 11.15). 1.1 Download file thông qua HTTP Bạn cần một cách thật nhanh và đơn giản để download một file từ một website thông qua HTTP. Sử dụng phương thức tĩnh DownloadFile của lớp System.Net.WebClient. .NET Framework cung cấp vài cơ chế dùng để gửi dữ liệu thông qua HTTP. Một trong những cách dễ nhất là sử dụng lớp System.Net.WebClient. Nó cung cấp những phương thức mức-cao như DownloadFile và UploadFile. Các phương thức này không có sự hỗ trợ nội tại nào cho giao tiếp bất đồng bộ, hay xác thực. Nếu cần các tính năng này, bạn có thể sử dụng các chức năng phức tạp hơn do lớp WebRequest và WebResponse cung cấp (sẽ được mô tả trong mục 11.2 và 11.3). Chương trình ví dụ dưới đây sẽ download file winXP.gif từ localhost và lưu vào đĩa. using System; using System.Net; using System.IO; public class Download { private static void Main() {
  2. string remoteUri = "http://localhost/winXP.gif"; string localFileName = "winXP.gif"; WebClient client = new WebClient(); Console.WriteLine("Downloading file " + remoteUri + " to " + Path.GetFullPath(localFileName)); // Thực hiện download. client.DownloadFile(remoteUri, localFileName); Console.WriteLine("Download complete."); Console.ReadLine(); } } 1.2 Download và xử lý file bằng stream Bạn cần lấy một file từ một website, nhưng không muốn lưu trực tiếp vào đĩa. Thay vào đó, bạn muốn xử lý ngay trong ứng dụng của mình. Sử dụng lớp WebRequest để tạo yêu cầu, lớp WebResponse để nhận đáp ứng từ web-server, và một số dạng reader (StreamReader đối với dữ liệu HTML hay text, hoặc BinaryReader đối với dữ liệu nhị phân) để phân tích đáp ứng đó. Download một file cần bốn bước cơ bản sau: 1. Sử dụng phương thức tĩnh Create của lớp System.Net.WebRequest để chỉ định trang bạn cần. Phương thức này trả về một đối tượng dẫn xuất từ WebRequest, phụ thuộc vào kiểu Uniform Resource Identifier (URI) bạn sử dụng. Ví dụ, nếu tài nguyên là HTTP (với cụm từ http://), nó sẽ tạo ra đối tượng HttpWebRequest; nếu tài nguyên là file (với cụm từ file://), nó sẽ tạo ra đối tượng FileWebRequest. Bạn có thể thiết lập thời gian trễ thông qua thuộc tính WebRequest.Timeout. 2. Sử dụng phương thức GetResponse của đối tượng WebRequest, phương thức này trả về một đối tượng WebResponse cho trang. Nếu yêu cầu vượt qua thời gian trễ thì ngoại lệ WebException sẽ bị ném. 3. Tạo một StreamReader hoặc một BinaryReader cho WebResponse. 4. Công việc cuối cùng là xử lý stream này, chẳng hạn ghi nó ra file rồi hiển thị trong ứng dụng của bạn... Đoạn mã dưới đây sẽ lấy và hiển thị một file ảnh và nội dung HTML của một trang web. using System;
  3. using System.Net; using System.IO; using System.Drawing; using System.Windows.Forms; public class DownloadForm : System.Windows.Forms.Form { private System.Windows.Forms.PictureBox picBox; private System.Windows.Forms.TextBox textBox; // (Bỏ qua phần mã designer.) private void DownloadForm_Load(object sender, System.EventArgs e) { string picUri = "http://localhost/winXP.gif"; string htmlUri = "http://localhost/iishelp/iis/misc/default.asp"; // Tạo yêu cầu. WebRequest requestPic = WebRequest.Create(picUri); WebRequest requestHtml = WebRequest.Create(htmlUri); // Nhận đáp ứng. Công việc này sẽ mất nhiều // thời gian, đặc biệt khi file cần lấy quá lớn. WebResponse responsePic = requestPic.GetResponse(); WebResponse responseHtml = requestHtml.GetResponse(); // Đọc response stream. Image downloadedImage = Image.FromStream(responsePic.GetResponseStream()); StreamReader r = new StreamReader(responseHtml.GetResponseStream()); string htmlContent = r.ReadToEnd(); r.Close(); // Hiển thị ảnh. picBox.Image = downloadedImage;
  4. // Hiển thị nội dung dạng text của trang HTML. textBox.Text = htmlContent; } } The image part with relationship ID rId5 was not found in the file. Hình 11.1 Download nội dung của một trang web Để download file lớn một cách hiệu quả, bạn có thể sử dụng kỹ thuật bất đồng bộ đã được mô tả trong chương 4. Bạn cũng có thể sử dụng phương thức WebRequest.BeginGetResponse, phương thức này không chặn mã lệnh của bạn và sẽ gọi thủ tục callback khi nhận được đáp ứng. 1.3 Lấy trang HTML từ một website có yêu cầu xác thực Bạn cần thu lấy một file từ một website, nhưng website đó yêu cầu một số thông tin xác thực. Sử dụng lớp WebRequest và WebResponse đã được mô tả trong mục 11.2. Tuy nhiên, trước khi gửi yêu cầu, bạn phải cấu hình thuộc tính WebRequest.Credentials với các thông tin xác thực. Một số website yêu cầu thông tin xác thực từ người dùng. Khi kết nối thông qua trình duyệt, thông tin này có thể được cung cấp một cách trong suốt (ví dụ, một intranet-site cục bộ có sử dụng Integrated Windows authentication), hoặc trình duyệt có thể yêu cầu
  5. thông tin này thông qua một hộp thoại đăng nhập. Khi truy xuất một trang web bằng lập trình thì mã lệnh của bạn cần phải cung cấp các thông tin này. Cách tiếp cận mà bạn sử dụng tùy thuộc vào kiểu xác thực mà website sử dụng. • Nếu website sử dụng Basic authentication hay Digest authentication, bạn cần gửi kết hợp username và password, bằng cách tạo một đối tượng System.Net. NetworkCredential và gán nó vào thuộc tính WebRequest.Credentials. • Nếu website sử dụng Integrated Windows authentication, bạn thực hiện tương tự như trên. Bạn có thể lấy các thông tin đăng nhập của người dùng hiện hành từ đối tượng System.Net.CredentialCache. • Nếu website đòi hỏi chứng chỉ, bạn cần nạp chứng chỉ từ một file bằng lớp System.Security.Cryptography.X509Certificates.X509Certificate, và thêm nó vào tập hợp HttpWebRequest.ClientCertificates. Dưới đây là đoạn mã ví dụ cho cả ba cách tiếp cận trên: using System; using System.Net; using System.Security.Cryptography.X509Certificates; public class DownloadWithAuthentication { private static void Main() { string uriBasic, uriIntegrated, uriCertificate; // Xác thực username và password với Basic authentication. WebRequest requestA = WebRequest.Create(uriBasic); requestA.Credentials = new NetworkCredential("userName", "password"); requestA.PreAuthenticate = true; // Đăng nhập người dùng hiện hành với // Integrated Windows authentication. WebRequest requestB = WebRequest.Create(uriIntegrated); requestB.Credentials = CredentialCache.DefaultCredentials; requestB.PreAuthenticate = true; // Xác thực người dùng bằng chữ ký điện tử. HttpWebRequest requestC = (HttpWebRequest) WebRequest.Create(uriCertificate);
  6. X509Certificate cert = X509Certificate.CreateFromCertFile(@"c:\user.cer"); requestC.ClientCertificates.Add(cert); // (Bây giờ bắt đầu lấy và xử lý đáp ứng.) } } Nhớ rằng, nếu muốn sử dụng kiểu xác thực chứng chỉ, bạn phải nạp chứng chỉ từ file. Không có cách nào để tạo đối tượng X509Certificate từ một chứng chỉ trong kho chứng chỉ của máy tính. 1.4 Hiển thị trang web trong ứng dụng dựa-trên-Windows Bạn cần hiển thị một trang HTML (hay bất kỳ kiểu tài liệu nào mà Microsoft Internet Explorer hỗ trợ) trong một ứng dụng dựa-trên-Windows. Sử dụng điều kiểm ActiveX Web Browser (đi cùng với Internet Explorer). .NET Framework không cung cấp điều kiểm nào dùng để dịch nội dung HTML. Tuy nhiên, chức năng này lại rất cần thiết cho việc hiển thị một nội dung HTML cục bộ (kể cả những tài liệu HTML đóng gói theo định dạng file trợ giúp của Windows) cũng như các thông tin nào đó từ web. Để hiển thị một trang HTML, bạn có thể thêm một cửa sổ Internet Explorer vào ứng dụng dựa-trên-Windows. Cửa sổ này không chỉ hỗ trợ HTML, mà còn hỗ trợ JavaScript, Microsoft Visual Basic Scripting Edition (VBScript), ActiveX control, và rất nhiều plug-in khác, tùy thuộc vào cấu hình hệ thống của bạn (có thể gồm cả Microsoft Word, Microsoft Excel, và Adobe Acrobat Reader). Bạn còn có thể sử dụng điều kiểm Web Browser để duyệt một thư mục trong ổ đĩa cục bộ, hay hiển thị các file trên một FTP (File Transfer Protocol) site. Để thêm Web Browser vào một dự án trong Microsoft Visual Studio .NET, bạn hãy nhắp phải vào hộp công cụ và chọn Add/Remove Items. Sau đó, chọn thẻ COM Components, và chọn Microsoft Web Browser (xem hình 11.2). Theo đó, điều kiểm Microsoft Web Browser sẽ được thêm vào hộp công cụ. Khi bạn thả điều kiểm này vào form, các Interop Assembly cần thiết sẽ được tạo ra và thêm vào dự án của bạn.
  7. The image part with relationship ID rId6 was not found in the file. Hình 11.2 Chọn Microsoft Web Browser trong hộp thoại Customize Toolbox Nếu không sử dụng Visual Studio .NET, bạn cần tạo ra một vỏ bọc bằng tiện ích Type Library Importer (Tlbimp.exe), sẽ được giải thích trong mục 15.6. Khi sử dụng điều kiểm Web Browser, bạn thường cần các phương thức sau: • Navigate (và Navigate2)⎯Chuyển trang sang URL do bạn chỉ định. • GoBack và GoForward⎯Lái sang các trang trong danh sách history. • GoHome⎯Lái sang trang mặc định (home) được thiết lập trên máy tính hiện hành, và GoSearch⎯Hiển thị trang tìm kiếm. Người dùng có thể vào một trang mới bằng cách nhắp vào một liên kết nào đó trong trang hiện hành (nếu nó tồn tại). Bạn có thể lấy URL hiện hành từ thuộc tính LocationURL và xác định điều kiểm vẫn còn xử lý trang đó hay không bằng cách kiểm tra thuộc tính Busy. Ngoài ra, bạn có thể phản ứng với nhiều sự kiện khác nhau.
Đồng bộ tài khoản