Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Екзамен з комп. арх..doc
Скачиваний:
4
Добавлен:
17.09.2019
Размер:
449.02 Кб
Скачать

32. Характеристика сокетів зі з’єднанням. Інтерфейс класу Socket для даного типу сокетів.

TCP — это транспортный механизм, предоставляющий поток данных, с предварительной установкой соединения, за счёт этого дающий уверенность в достоверности получаемых данных, осуществляет повторный запрос данных в случае потери данных и устраняет дублирование при получении двух копий одного пакета (см. также T/TCP). В отличие от UDP гарантирует целостность передаваемых данных и уведомление отправителя о результатах передачи.

Реализация TCP, как правило, встроена в ядро ОС, хотя есть и реализации TCP в контексте приложения.

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

Чтобы настроить серверный TCP-сокет в управляемом коде, прежде всего нужно создать экземпляр класса Socket. Его конструктор принимает три параметра: AddressFamily, SocketType и ProtocolType. Создать сокет для взаимодействия по протоколу TCP можно так:

Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

Как только сокет создан, его можно привязать к адресу. Привязка клиентского сокета к адресу не обязательна, но в случае серверных сокетов она необходима. Чтобы привязать сокет к адресу, вызовите метод Bind объекта Socket. Этому методу нужен адрес и порт, которые будут сопоставлены с сокетом, поэтому в качестве параметра он принимает экземпляр класса, производного от EndPoint. Как правило, это объект класса IPEndPoint (кроме него в .NET Framework входит только один класс, производный от EndPoint, — IrDAEndPoint, который служит для взаимодействия посредством инфракрасного порта).

Как только сокет создан, его можно привязать к адресу. Привязка клиентского сокета к адресу не обязательна, но в случае серверных сокетов она необходима.

Объект IPEndPoint является логическим представлением конечной точки при сетевой коммуникации и включает данные об IP-адресе и порте. Класс IPAddress содержит несколько предопределенных IP-адресов, для доступа к которым служат статические свойства; двумя самыми полезными адресами при работе с TCP-сокетами являются IPAddress.Loopback и IPAddress.Any.

Свойство IPAddress.Loopback представляет адрес обратной связи, т. е. локальный адрес компьютера (127.0.0.1). Свойство IPAddress.Any (0.0.0.0) указывает серверу задействовать для прослушивания клиентских запросов все сетевые интерфейсы, а не только интерфейс, сопоставленный с конкретным IP-адресом (в этом отношении UDP- и TCP-сокеты немного различаются).

33. Характеристика сокетів без з’єднання. Інтерфейс класу Socket для даного типу сокетів.

User Datagram Protocol, UDP (укр. Протокол дейтаграм користувача) — один із протоколів в стеку TCP/IP. Від протоколу TCP він відрізняється тим, що працює без встановлення з'єднання.

Класс UdpClient обеспечивает простые методы для передачи и приема UDP-датаграмм без установления соединения в блокирующем синхронном режиме.Так как протокол UDP — это транспортный протокол без установления соединения, не требуется выполнять подключение к удаленному узлу перед приемом и передачей данных. Необходимо, однако, иметь параметр для задания удаленного узла по умолчанию, что можно сделать одним из следующих двух способов:

· Создайте экземпляр класса UdpClient, используя в качестве параметров имя удаленного узла и номер порта.

· Создайте экземпляр класса UdpClient, а затем вызовите метод Connect.

Для передачи данных на удаленное устройство можно использовать любой из методов передачи, обеспечиваемых объектом UdpClient. Используйте методReceive, чтобы получить данные с удаленных узлов.

Не вызывайте метод Send, используя имя узла или объект IPEndPoint, если уже имеется удаленный узел, заданный по умолчанию. Если это сделать, объектUdpClient создаст исключение.

Методы UdpClient позволяют также передавать и принимать групповые датаграммы. Воспользуйтесь методом JoinMulticastGroup, чтобы подписать объектUdpClient для участия в группе многоадресной рассылки. Используйте метод DropMulticastGroup для отмены подписки объекта UdpClient в группе многоадресной рассылки.

Примеры:

В следующем примере задается подключение UdpClient с использованием имени узла www.contoso.com на порте 11000. Посылается небольшое строковое сообщение на два отдельных компьютера удаленного узла. Метод Receive блокирует выполнение на время приема сообщения. Воспользуйтесь объектомIPEndPoint, переданным в метод Receive, чтобы определить удаленный узел, приславший ответ.

// This constructor arbitrarily assigns the local port number.

UdpClient udpClient = new UdpClient(11000);

try{

udpClient.Connect("www.contoso.com", 11000);

// Sends a message to the host to which you have connected.

Byte[] sendBytes = Encoding.ASCII.GetBytes("Is anybody there?");

udpClient.Send(sendBytes, sendBytes.Length);

// Sends a message to a different host using optional hostname and port parameters.

UdpClient udpClientB = new UdpClient();

udpClientB.Send(sendBytes, sendBytes.Length, "AlternateHostMachineName", 11000);

//IPEndPoint object will allow us to read datagrams sent from any source.

IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);

// Blocks until a message returns on this socket from a remote host.

Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);

string returnData = Encoding.ASCII.GetString(receiveBytes);

// Uses the IPEndPoint object to determine which of these two hosts responded.

Console.WriteLine("This is the message you received " +returnData.ToString());

Console.WriteLine("This message was sent from " +RemoteIpEndPoint.Address.ToString() + " on their port number " +RemoteIpEndPoint.Port.ToString());

udpClient.Close();

udpClientB.Close();

}

catch (Exception e ) { Console.WriteLine(e.ToString()); }