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}");
}
}
}