Тема 17. Сетевые протоколы и сокеты

Сетевой протокол – правила и технические процедуры, позволяющие компьтерам , объединенным в сеть, осуществлять соединение и обмен данными.

Маршрутизация (англ. Routing) — процесс определения маршрута следования информации в сетях связи.

Протоколы Интернета

User Datagram Protocol (UDP) — протокол пользовательских датаграмм; Transmission Control Protocol (TCP), протокол управления передачей.

UDP и TCP базируются на протоколе IP

IP-адрес – уникальный идентификатор, однозначно определяющий узел (хост) в сети, использующей протокол TCP/IP. Узел (node) или хост (host) – устройство, подключенное к сети и способное взаимодействовать с другими устройствами.

TCP- и UDP-порты

В TCP/IP-сетях порт – это механизм, позволяющий компьютеру поддерживать сразу несколько коммуникационных сеансов с программами и другими компьютерами. В сети многие приложения могут одновременно взаимодействовать друг с другом.

HyperText Transfer Protocol

HyperText Transfer Protocol (HTTP / «протокол передачи гипертекста» ) — протокол прикладного уровня передачи данных (изначально — в виде гипертекстовых документов в формате HTML, в настоящий момент используется для передачи произвольных данных).

Обычный GET-запрос

Запрос клиента:

GET /wiki/страница HTTP/1.1
Host: ru.wikipedia.org
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5
Accept: text/html
Connection: close
(пустая строка)

Ответ сервера:

HTTP/1.1 200 OK
Date: Wed, 11 Feb 2009 11:20:59 GMT
Server: Apache
X-Powered-By: PHP/5.2.4-2ubuntu5wm1
Last-Modified: Wed, 11 Feb 2009 11:20:59 GMT
Content-Language: ru
Content-Type: text/html; charset=utf-8
Content-Length: 1234
Connection: close
(пустая строка)
(далее следует запрошенная страница в HTML)

Сокеты

Сокет — это один конец двустороннего канала связи между двумя программами, работающими в сети. Соединяя вместе два сокета, можно передавать данные между разными процессами (локальными или удаленными). Реализация сокетов обеспечивает инкапсуляцию протоколов сетевого и транспортного уровней.

Первоначально сокеты были разработаны для UNIX в Калифорнийском университете в Беркли. В UNIX обеспечивающий связь метод ввода-вывода следует алгоритму open/read/write/close. Прежде чем ресурс использовать, его нужно открыть, задав соответствующие разрешения и другие параметры. Как только ресурс открыт, из него можно считывать или в него записывать данные. После использования ресурса пользователь должен вызывать метод Close(), чтобы подать сигнал операционной системе о завершении его работы с этим ресурсом.

Когда в операционную систему UNIX были добавлены средства межпроцессного взаимодействия (Inter-Process Communication, IPC) и сетевого обмена, был заимствован привычный шаблон ввода-вывода. Все ресурсы, открытые для связи, в UNIX и Windows идентифицируются дескрипторами. Эти дескрипторы, или описатели (handles), могут указывать на файл, память или какой-либо другой канал связи, а фактически указывают на внутреннюю структуру данных, используемую операционной системой. Сокет, будучи таким же ресурсом, тоже представляется дескриптором. Следовательно, для сокетов жизнь дескриптора можно разделить на три фазы: открыть (создать) сокет, получить из сокета или отправить сокету и в конце концов закрыть сокет.

Интерфейс IPC для взаимодействия между разными процессами построен поверх методов ввода-вывода. Они облегчают для сокетов отправку и получение данных. Каждый целевой объект задается адресом сокета, следовательно, этот адрес можно указать в клиенте, чтобы установить соединение с целью.

Пример сокетного приложения – TCP сервер

static void Main(string[] args)
{
    TcpListener listener = new TcpListener(8080);
    listener.Start();
    Socket s = listener.AcceptSocket();
    NetworkStream ns = new NetworkStream(s);
    StreamReader r = new StreamReader(ns);
    StreamWriter w = new StreamWriter(ns);

    string st = "";
    do
    {
        st = r.ReadLine();
        if (st != null)
        {
            Console.WriteLine(st);
            w.WriteLine("String " + st + " was reseived.");
            w.Flush();
        }
    } while (st != "end");

    s.Close();
}

Пример сокетного приложения – TCP клиент

static void Main(string[] args)
{
    TcpClient cl = new TcpClient("192.168.1.47", 8080);
    NetworkStream ns = cl.GetStream();
    StreamReader r = new StreamReader(ns);
    StreamWriter w = new StreamWriter(ns);

    string str, stw;
    do
    {
        str = Console.ReadLine();
        w.WriteLine(str);
        w.Flush();

        stw = r.ReadLine();
        Console.WriteLine(stw);
    } while (str != "end");
}

Примечание: 192.168.1.47 - IP адрес сервера.

Загрузка веб-страницы с помощью класса WebClient

Если необходимо только запросить файл с определенного URI (Uniform Resource Identifier — унифицированный идентификатор ресурса), то простейшим в использовании классом .NET, который подходит для этого, будет System.Net.WebClient. Этот исключительно высокоуровневый класс предназначен для выполнения базовых операций с помощью всего одной или двух команд. В настоящее время в .NET Framework поддерживаются URI, начинающиеся с идентификаторов http:, https: и file:.

class Program
{
    public static void Main(string[] args)
    {
        WebClient wcl = new WebClient();
        Stream data = wcl.OpenRead("http://www. day.az");
        StreamReader reader = new StreamReader(data);
        string s = reader.ReadToEnd();
        Console.WriteLine(s);
        data.Close();
        reader.Close();
    }     
}

Дополнительная литература

http://www.wikipedia.org/ ( Запрос: Протокол передачи данных ) http://professorweb.ru/my/csharp/web/level3/3_1.php https://ru.wikipedia.org/wiki/HTTP http://professorweb.ru/my/csharp/web/level2/2_3.php http://mycsharp.ru/post/49/2015_03_02_setevoe_programmirovanie_v_si-sharp.html

results matching ""

    No results matching ""