Загрузка данных


using System;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // 1. Объявление переменных для подключения
        string host = "www.google.com";
        int port = 80;

        // 2. Инициализация Socket (IPv4, потоковый, TCP) внутри конструкции using var
        using var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        try
        {
            // Асинхронное подключение к серверу
            await socket.ConnectAsync(host, port);
            
            // Вывод локального и удаленного адресов
            Console.WriteLine($"Локальный адрес (LocalEndPoint): {socket.LocalEndPoint}");
            Console.WriteLine($"Удаленный адрес (RemoteEndPoint): {socket.RemoteEndPoint}");

            // 3. Отправка и получение данных
            // Перевод HTTP-запроса HEAD в байты через UTF-8 и асинхронная отправка
            string request = "HEAD / HTTP/1.1\r\n\r\n";
            byte[] requestBytes = Encoding.UTF8.GetBytes(request);
            await socket.SendAsync(new ArraySegment<byte>(requestBytes), SocketFlags.None);

            // Создание пустого буфера размером 512 байт
            byte[] buffer = new byte[512];
            
            // Асинхронный прием ответа от сервера
            int receivedBytes = await socket.ReceiveAsync(new ArraySegment<byte>(buffer), SocketFlags.None);

            // Перевод байтов обратно в текст и вывод на экран
            string response = Encoding.UTF8.GetString(buffer, 0, receivedBytes);
            Console.WriteLine("\nОтвет сервера:");
            Console.WriteLine(response);

            // 4. Асинхронное отключение сокета с параметром true
            await socket.DisconnectAsync(true);
            Console.WriteLine("\nСокет успешно отключен.");
        }
        // Обработка возможных ошибок SocketException
        catch (SocketException ex)
        {
            Console.WriteLine($"Произошла ошибка сокета: {ex.Message}");
            Console.WriteLine($"Код ошибки: {ex.SocketErrorCode}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Общая ошибка: {ex.Message}");
        }
    }
}