Thẻ

, ,

Phần lớn các thư viện về network nằm trong package System.Net, sử dụng các giao thức chuyên dụng như HTTP, TCP/IP và FPT. Dưới đây là một số lớp hay được sử dụng:
WebClient: download và upload thông qua giao thức HTTP hoặc FTP.
WebRequestWebResponse low-level control HTTP, FTP.
HttpClient for consuming HTTP web APIs and RESTful services.
HttpListener for writing an HTTP server.
SmtpClient for constructing and sending mail messages via SMTP.
Dns for converting between domain names and addresses.
TcpClient, UdpClient, TcpListener, and Socket classes for direct access to the transport and network layers.

Hầu hết các lớp này đều làm việc dưới tầng transport (TCP,UDP) và tầng application (HTTP,FPT,SMTP,DNS).
namlunoy_networking_Csharp

Sau đây chúng ta sẽ tìm hiểu các class cho các mục đích chúng ta hay dùng!
– WebRequest và WebResponse là 2 lớp hay được sử dụng nhất, nó có thể làm việc được với cả HTTP và FTP.
– WebClient có chức năng của cả 2 lớp trên, dùng rất tiện. Nó cho phép ta làm việc với đủ các loại dữ liệu string, file, bytes, stream trong khi đó WebRequest và WebResponse chỉ làm việc được với stream.
– HttpClient (bao gồm cả HttpWebRequest và HttpWebResponse) cũng được xây dựng từ 2 lớp trên. Nó được cung cấp thêm các chức năng để làm việc với HTTP-based web API, REST-based service.
– Với công việc như download.upload file string hoặc bytes đều có thể dùng bằng HttpClient hoặc WebClient.

Đặc biệt WebClient không sử dụng được cho WinRT, do đó ta phải dụng WebRequest/WebResponse hoặc HttpClient.

1. WebClient

– Các platform khác có thể sử dụng bình thường.
– Riêng đối với WP8.0 thì nó chỉ còn phương thức DownloadStringAsync, do đó mà ta cần phải lấy chuỗi string trả về trong event DownloadStringCompleted, điều đó cũng tương ứng với việc ta cũng phải tạo 1 event bên ngoài để gọi vào khi download string xong:

//Tạo event cho bên ngoài subcribe
delegate void DownLoadXong(String s);
//Download string
        public static void GetListContestAsync(string url)
        {
            WebClient client = new WebClient();
            client.DownloadStringAsync(new Uri(url, UriKind.Absolute));
            client.DownloadStringCompleted += client_DownloadStringCompleted;
        }
//Event
        static void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            if (downxong != null) 
                 downxong(e.Result);
        }

2. HttpClient

Platforms Supported: WP8.1,W8.1
Hãy thử tạo một đối tượng của lớp này và đánh .Get xem bạn có thể tận dụng được những gì từ nó!

public static async void GetStringAsync(string url)
    {
       string html = await new HttpClient().GetStringAsync(url);
        Debug.WriteLine(html);
     }

3. WebRequest/WebResponse

Platforms Supported: WP8.0
Hai lớp trên rất tiện lợi nhưng trong một số trường hợp ta sẽ không thể sử dụng được, lúc đó thì bắt buộc phải sử dugj đến 2 lớp này!
Các bước sử dụng như sau:

        public static async Task<ListContest> GetListContestAsync(string url)
        {
            WebRequest request = WebRequest.Create(url);
            using (WebResponse response = await request.GetResponseAsync())
            {
                using (Stream stream = response.GetResponseStream())
                {
                    //Do something with stream
                }
            }
        }

Bonus: String Stream

public Stream GenerateStreamFromString(string s)
{
    MemoryStream stream = new MemoryStream();
    StreamWriter writer = new StreamWriter(stream);
    writer.Write(s);
    writer.Flush();
    stream.Position = 0;
    return stream;
}
//
StreamReader reader = new StreamReader(stream);
string text = reader.ReadToEnd();

Đặc biệt chú ý, nếu 2 lần request cùng 1 đường link nó sẽ trả về kết quả ý hệt nhau vì nó lưu vào trong … do đó khi gửi request cần thêm vài tham số vô nghĩa vào!

Advertisements