C#/C# 교과서

[C# 교과서] 60. 네트워크 프로그래밍 맛보기

서니션 2023. 2. 11. 18:19
728x90
반응형

C#에서 다루는 데이터는 인메모리, 파일, XML과 JSON을 포함하여

여러 데이터를 인터넷 같은 네트워크를 통해서 주고 받을 수 있음


HttpClient 클래스로 웹 데이터 가져오기

닷넷에서 제공하는 Http 클래스를 사용하면 인터넷에 연결된 네트워크상의 데이터를 가져오거나 전송 가능

// HttpClientDemo 프로젝트에서 실행
using System;
using System.Net.Http;
using System.Threading.Tasks;

class HttpClientDemo
{
    static async Task Main()
    {
        //[1] HttpClient 개체 생성
        HttpClient httpClient = new HttpClient();

        //[2] GetAsync() 메서드 호출
        HttpResponseMessage httpResponseMessage = 
            await httpClient.GetAsync("http://www.dotnetnote.com/");

        //[3] HTML 가져오기 
        string responseBody = await httpResponseMessage.Content.ReadAsStringAsync();

        //[4] 출력
        Console.WriteLine(responseBody);
    }
}

HTML로 내려받은 문자열은 웹 브라우저 같은 프로그램에서 HTML을 실행해서 보여 주지만,

이 예제에서는 그대로 텍스트로 화면에 출력함

 

GetAsync()처럼 해당 URL로 데이터를 전송하는 PostAsync() 메서드도 제공

HttpClient 클래스와 같은 API는 때에 따라 더 향상된 클래스로 추가해서 제공하기도 함


WebClinet 클래스로 웹 데이터 읽어 오기

using System;
using System.Net;
using System.Threading;

class WebClientDemo
{
    static void Main()
    {
        WebClient client = new WebClient();

        // 동기적으로 출력
        string google = client.DownloadString("http://www.google.co.kr");
        Console.WriteLine("Google: " + google.Substring(0, 10)); // 20자만 가져오기

        string naver = client.DownloadString(new Uri("http://www.naver.com"));
        Console.WriteLine("Naver: " + naver.Substring(0, 10));

        // 비동기적으로 출력
        client.DownloadStringAsync(new Uri("http://www.dotnetkorea.com"));
        client.DownloadStringCompleted += Client_DownloadStringCompleted;
        Thread.Sleep(3000); // 잠시 대기
    }

    private static void Client_DownloadStringCompleted(object sender,
        DownloadStringCompletedEventArgs e)
    {
        string r = e.Result.Replace("\n", "").Substring(0, 10);
        Console.WriteLine($"DotNetKorea: {r}");
    }
}

HttpWebRequest 클래스를 사용하여 웹 페이지 가져오기

using System;
using System.IO;
using System.Net;

class HttpWebRequestDemo
{
    static void Main()
    {
        // 아래 URL에서 HTML문서를 가져올 수 있다고 가정
        string url = "http://www.google.com";

        var req = HttpWebRequest.CreateHttp(url);
        var res = req.GetResponse() as HttpWebResponse;

        var stream = res.GetResponseStream();
        
        using (var sr = new StreamReader(stream))
        {
            var html = sr.ReadToEnd();
            Console.WriteLine(html);
        }
    }
}

 

728x90
반응형