Вход

Поиск

Опрос

Какой материал вас больше интересует?
Всего ответов: 4

Чат

Партнеры

Последние престанище космос
Пятница, 19.04.2024, 23:57
Приветствую Вас Гость
Главная | Регистрация | Вход | RSS
Главная » Файлы » Другии материалы

«Технологии сетевого программирования»
[ Скачать с сервера (235.5 Kb) ] 18.01.2018, 09:37

Класс WebClient

Для загрузки файлов с определенных ресурсов предназначен класс WebClient, который находится в пространстве имен System.Net.

Самый простой способ загрузки предоставляет метод DownloadFile(). Например, загрузим файл с какого-нибудь сайта:

1

2

3

WebClient client = new WebClient();

client.DownloadFile("http://somesite.com/book.pdf", "myBook.pdf");

Console.WriteLine("Файл загружен");

Метод DownloadFile() принимает два параметра. Первый параметр указывает на файл в интернете, который надо загрузить, а второй параметр определяет имя загруженного файла на локальном компьютере. После загрузки в папке с приложением появится файл myBook.pdf.

WebClient также позволяет получить файл в качестве потока и затем манипулировать этим потоком в процессе загрузки:

Категория: Другии материалы | Добавил: MVD
Просмотров: 220 | Загрузок: 87 | Комментарии: 14
Всего комментариев: 141 2 »
1 MVD  
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 using System;
using System.Net;
using System.IO;

namespace NetConsoleApp
{
class Program
{
static void Main(string[] args)
{
WebClient client = new WebClient();

using (Stream stream = client.OpenRead("http://somesite.com/sometext.txt"))
{
using (StreamReader reader = new StreamReader(stream))
{
string line = "";
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}

Console.WriteLine("Файл загружен");
Console.Read();
}
}
}

2 MVD  
0
Для открытия потока используется метод OpenRead(), в который передается адрес файла.
Для чтения потока применяется класс StreamReader. Затем прочитанные строки выводятся на консоль.
Загрузку файла можно осуществлять в асинхронном режиме:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 using System;
using System.Net;
using System.Threading.Tasks;

namespace NetConsoleApp
{
class Program
{
static void Main(string[] args)
{
DownloadFileAsync().GetAwaiter();

Console.WriteLine("Файл загружен");
Console.Read();
}

private static async Task DownloadFileAsync()
{
WebClient client = new WebClient();
await client.DownloadFileTaskAsync(new Uri("http://somesite.com/myfile.txt"), "mytxtFile.txt");
}
}
}

3 MVD  
0
Классы .NET для IP-адресов
Все ip-адреса представляют 32-битное (протокол IPv4) или 128-битное значение (протокол IPv6), например, 31.170.165.181.
В системе классов .NET ip-адрес представлен классом IPAddress. Этот класс позволяет управлять адресами с помощью следующих свойств и методов:
• Метод Parse(): преобразует строковое представление адреса в IPAddress
1 IPAddress ip = IPAddress.Parse("127.0.0.1"); // ip указывает на локальный адрес
• Статическое свойство Loopback: возвращает объект IPAddress для адреса 127.0.0.1. Аналогично вышеприведенному коду
• Статическое свойство Any: возвращает объект IPAddress для адреса 0.0.0.0
• Статическое свойство Broadcast: возвращает объект IPAddress для адреса 255.255.255.255
Также для получения адреса в сети используется класс IPHostEntry. Он содержит информацию об определенном компьютере-хосте.
С помощью свойства HostName этот класс возвращает имя хоста, а с помощью свойства AddressList - все ip-адреса хоста, так как один компьютер может иметь в сети несколько ip-адресов.
Для взаимодействия с dns-сервером и получения ip-адреса применяется класс Dns. Для получения информации о хосте компьютера и его адресах у него имеется метод GetHostEntry():
1
2
3
4
5
6
7
8
9
10
11 IPHostEntry host1 = Dns.GetHostEntry("www.microsoft.com");
Console.WriteLine(host1.HostName);
foreach (IPAddress ip in host1.AddressList)
Console.WriteLine(ip.ToString());

Console.WriteLine();

IPHostEntry host2 = Dns.GetHostEntry("google.com");
Console.WriteLine(host2.HostName);
foreach (IPAddress ip in host2.AddressList)
Console.WriteLine(ip.ToString());

4 MVD  
0
Платформа Microsoft Peer-to-Peer Networking
Платформа Microsoft Windows Peer-to-Peer Networking (Платформа для создания одноранговых сетей Windows производства Microsoft) представляет собой предлагаемую Microsoft реализацию технологии P2P. Она поставляется в составе операционных систем Windows XP SP2, Windows Vista, Windows 7 и Windows 8, а также доступна в виде дополнения для Windows XP SP1. Она включает в себя две технологии, которые можно использовать для создания приложений P2P в .NET:
Протокол Peer Name Resolution Protocol (PNRP)
Его можно применять для публикации и преобразования адресов равноправных участников сети.
Сервер People Near Me
Его можно применять для обнаружения локальных равноправных участников (и который в настоящее время доступен только в Windows Vista и Windows 7).
Протокол PNRP
Естественно, для реализации приложения P2P можно использовать любой имеющийся в распоряжении протокол, но при работе в среде Microsoft Windows имеет смысл хотя бы рассмотреть вариант применения протокола PNRP. К настоящему времени успело выйти две версии этого протокола. Первая версия предлагалась в составе Windows XP SP2, Windows XP Professional x64 Edition и Windows XP SP1 с пакетом Advanced Networking Pack for Windows XP. Вторая версия была выпущена вместе Windows Vista и сделана доступной для пользователей Windows XP SP2 в виде отдельного загружаемого компонента.
Первая и вторая версии PNRP не совместимы между собой, и потому здесь рассматривается только вторая версия.
Сам по себе протокол PNRP не предоставляет всего, что необходимо для создания приложения P2P. Скорее, он является лишь одной из основополагающих технологий, которые применяются для преобразования адресов равноправных участников сети P2P.
Протокол PNRP позволяет клиенту регистрировать конечную точку (называемую именем равноправного участника(peer name)), которая автоматически распространяется между остальными равноправными участниками в группе (облаке). Это имя инкапсулируется в идентификатор PNRP (PNRP ID). Любой равноправный участник, который обнаруживает идентификатор PNRP, может использовать PNRP для его преобразования в имя самого равноправного участника и затем начинать взаимодействовать с соответствующим клиентом напрямую.

5 MVD  
0
Например, можно определить имя равноправного участника, представляющее конечную точку службы WCF, и воспользоваться PNRP для его регистрации в группе (облаке) в виде идентификатора PNRP ID. Равноправный участник, выполняющий подходящее клиентское приложение, которое применяет механизм обнаружения, способный распознавать имена равноправных участников для предоставляемой службы, тогда сможет обнаружить этот идентификатор PNRP ID. После обнаружения участник с помощью протокола PNRP установит местонахождение конечной точки службы WCF и начнет пользоваться этой службой.
Важным моментом является то, что PNRP не делает никаких предположений относительно того, что на самом деле скрывается за именем равноправного участника. Право решать, как использовать это имя после обнаружения оставляется за самими равноправными участниками.
Информация, которую равноправный участник получает от PNRP при преобразовании идентификатора PNRP, включает в себя адрес IPv6, а также обычно и адрес IPv4 участника, который опубликовал этот идентификатор, вместе с номером порта и, необязательно, небольшим количеством дополнительных данных. Если равноправный участник не знает, что означает имя другого равноправного участника, он вряд ли сможет сделать с этой информацией что-нибудь полезное.
Идентификаторы PNRP
Идентификаторы PNRP ID являются 256-битными значениями. Младшие 128 бит используются для обозначения уникальным образом индивидуального равноправного участника сети, а старшие 128 бит — для представления его имени. Старшие 128 бит представляют собой хеш-комбинацию, состоящую из хешированного значения открытого ключа, которое получается от осуществляющего публикацию равноправного участника, и строки длиной до 149 символов, которая представляет имя этого участника.
Хешированный открытый ключ (называемый авторитетным источником (authority)) в сочетании с этой строкой (называемой классификатором (classifier)) называются идентификатором P2P. Вместо хешированного открытого ключа также может использоваться значение 0, в случае чего имя равноправного участника считается незащищенным (если применяется открытый ключ, то имя считается защищенным).
На рисунке ниже схематично показана структура идентификатора PNRP:

6 MVD  
0
списка идентификаторов PNRP, как тех, которые публикует сама, так и тех, которые она получает в виде кэшированного списка от экземпляров служб PNRP, находящихся в других местах облака. Когда равноправный участник пытается преобразовать идентификатор PNRP, служба PNRP либо использует кэшированную копию конечной точки для выяснения адреса того равноправного узла, который опубликовал данный идентификатор PNRP, либо спрашивает его соседей, не могут ли они сделать это.
В конечном итоге с узлом, опубликовавшим идентификатор PNRP, устанавливается соединение, и служба PNRP получает возможность преобразовать его.
Обратите внимание, что все это не требует участия администратора. Все, что понадобится сделать — позаботиться о том, чтобы равноправные участники знали, что следует делать с именами после их преобразования с помощью своей локальной службы PNRP.
Равноправные участники сети могут применять PNRP для нахождения идентификаторов PNRP, совпадающих с определенным идентификатором P2P. Эту возможность можно использовать для реализации простейшего механизма, позволяющего обнаруживать незащищенные имена равноправных участников. Дело в том, что в случае отображения несколькими равноправными участниками незащищенного имени с одинаковым классификатором, их идентификатор P2P ID будет совпадать.
Конечно, из-за того, что любой равноправный участник может использовать незащищенное имя, нет никакой гарантии, что конечная точка, с которой будет устанавливаться соединение, будет именно той, которая ожидается, поэтому такое решение подходит лишь для реализации механизма обнаружения по локальной сети.

7 MVD  
0
Облака PNRP
Выше было рассказано, как PNRP осуществляет регистрацию и преобразование имен равноправных участников в облаке (группе). Облако (или группа) поддерживается seed-сервером, которым может быть любой сервер с запущенной службой PNRP, которая поддерживает запись хотя бы об одном равноправном участнике. Для службы PNRP доступны облака двух типов:
Облака локальных соединений (Link local)
В такие облака входят компьютеры с подключением к локальной сети. Каждый ПК может подключаться к более чем одному облаку такого типа при условии наличия у него нескольких сетевых адаптеров.
Глобальные облака (Global)
В такие облака по умолчанию входят компьютеры с подключением к Интернету, хотя также можно определять приватное глобальное облако. Разница состоит в том, что для глобального облака с подключением к Интернету Microsoft поддерживает seed-сервер, а для определяемого самостоятельно приватного глобального облака должен использоваться собственный seed-сервер. В последнем случае необходимо позаботиться о том, чтобы все равноправные участники могли подключаться к нему, настроив соответствующим образом параметры политики.
В прошлых выпусках PNRP существовали облака еще и третьего типа, которые назывались облаками локальных сайтов (Site local). Они больше уже не применяются и потому не рассматриваются.
Для выяснения, в какие облака входит данный компьютер, служит следующая команда:
netsh p2p pnrp cloud show list
Ниже показано, как обычно выглядит результат запуска этой команды:

8 MVD  
0
В данном случае результат указывает, что доступно два облака локальных соединений (Link local). Понять это можно как по значению в столбце Name(Имя), так и по значению в столбце Scope(Область), в котором для облаков локальных соединений всегда отображается значение 3, а для глобальных облаков — значение 1. Для подключения к глобальному облаку необходимо иметь глобальный адрес IPv6. Компьютер, на котором запускалась команда netshс p2p, таковым не обладал, потому для него оказалось доступным только локальное облако.
При наличии проблем с сетевой связью следует проверить, не препятствует ли брандмауэр передаче локального сетевого трафика через порты UDP 3540 или 1900. UDP-порт 3540 используется протоколом PNRP, а UDP-порт 1900 — протоколом SSDP (Simple Service Discovery Protocol — простой протокол обнаружения служб), который, в свою очередь, используется службой PNRP (а также устройствами UPnP).
Особенности PNRP в Windows 7
В Windows 7 протокол PNRP предусматривает использование нового компонента под названием DRT (Distributed Routing Table — таблица распределенной маршрутизации).
Этот компонент отвечает за определение структуры используемых PNRP ключей, роль которой в реализации по умолчанию исполняет описанный выше идентификатор PNRP. С помощью API-интерфейса DRT можно определить альтернативную схему ключей при условии, что они представляют собой 256-битные целочисленные значения (подобно идентификаторам PNRP ID).
Это означает возможность использования любой схемы, но при этом, разумеется, нужно самостоятельно заботиться о генерации и защите ключей. За счет применения этого компонента можно создавать совершенно новые топологии облаков, выходящие за рамки действия PNRP.
В Windows 7 также появилась новая опция для подключения к другим пользователям в приложении Remote Assistance, которая называется Easy Connect. Эта опция использует PNRP для обнаружения пользователей, к которым необходимо подключиться. После создания сеанса с помощью Easy Connect или других средств (например, отправки приглашения по электронной почте) пользователи могут открыть общий доступ к своим рабочим столам и оказывать помощь друг другу через интерфейс Remote Assistance.

9 MVD  
0
Служба People Near Me
Служба PNRP, как было показано в предыдущем разделе, применяется для определения местонахождения равноправных участников сети P2P. Очевидно, что она является важной действующей технологией при продумывании процесса обнаружения, подключения и взаимодействия в приложении P2P, но сама по себе она ни одного из этих этапов полностью не реализует.
В реализации этапа обнаружения ей помогает служба People Near Me (Соседние пользователи), которая позволяет находить равноправных участников, которые зарегистрировались в локальной сети (т.е. подключены к тому же локальному облаку, что и данный компьютер).
Эта служба наверняка уже попадалась на глаза, поскольку она является встроенным компонентом Windows Vista и Windows 7, а также используется в приложении Windows Meeting Space, которое позволяет открывать равноправным участникам общий доступ к различным приложениям. Для конфигурирования этой службы применяется элемент Change People Near Me (Изменить соседних пользователей) панели управления, быстро перейти к которому можно путем ввода следующей команды:
collab.cpl
Этот элемент позволяет получить доступ к диалоговому окну, показанному на рисунке ниже. После регистрации эта служба становится доступной в любом приложении, которое построено с учетом возможности ее использования:

10 MVD  
0
На момент написания этих строк служба PNM было доступна только в семействе операционных систем Windows Vista и Windows 7. Возможно, в будущем появятся пакеты обновлений или дополнительные загружаемые модули, которые позволят сделать ее доступной в Windows XP.

Предоставление каналов RSS и Atom
Чтение синдицируемых каналов является лишь одним из случаев применения API-интерфейса Syndication. Другой случай связан с предоставлением синдицируемых каналов клиентам RSS и Atom. Для этого в Visual Studio предлагается шаблон Syndication Service Library (Библиотека службы синдикации), который послужит хорошей отправной точкой. Этот шаблон содержит ссылку на библиотеку System.ServiceModel и предусматривает возможность добавления конфигурационного файла приложения для определения конечной точки WCF.
Чтобы предоставить данные для синдицируемого канала, удобно применять ADO.NET Entity Framework. В предлагаемом здесь примере приложении используется база данных Формулы-1, которую вы можете скачать по следующей ссылке - Formula1Model. Сначала в проект добавляется элемент ADO.NET Entity Data Model по имени Formula1. Таблицы Racers, RaceResults, Races и Circuits отображаются на классы сущностей Racer, RaceResult, Race и Circuit, как показано на рисунке:

1-10 11-14
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]