
- •Робота з сокетами засобами c#.
- •Типи комунікації сокетів.
- •2.Робота з сокетами в .Net
- •Клас System.Net.Sockets.Socket
- •Задача 1. Отримати список адресів машини по його імені.
- •Асінхронний варіант взаємодії
- •IsComplete – вказує на завершення операції.
- •Розглянемо приклад тестування паралельної обробки
- •Клас ThreadedServer:
- •Сервер доопрацювання флюорографії (сокети)
- •12. Останньою функцією в цьому класі є функція відправки відповіді клієнтові
Лабораторна робота 1.
Робота з сокетами засобами c#.
1.Введення
Поняття.
Міжкомп’ютерна взаємодія, що складає основу будь якої розподіленої обробки інформації, базується на cьомірівневої еталонної моделі взаємодії відкритих систем (open system interconnection - OSI).
Суть моделі складається в застосуванні багато-рівневої архітектури, де кожний об’єкт, що знаходиться на рівні n, взаємодіє тільки з віддаленими об’єктами n-го рівня, при цьому об’єкти n-го рівня використовують служби, які забезпечуються об’єктами рівня (n-1) . Об’єкти на рівні n обмінюються протокольними одиницями обміну(protocol data units - PDU), які містять у собі заголовок n-го рівня та данні n-го рівня, при цьому PDU n-го рівня стає даними для рівня n-1.
Основна
найбільш розповсюджена䍒䑒( ᷲ녖
ὔ絭駪NJὔ絭駪NJὔ絭駪NJ |
|
|
|
|
|
|
|||||
|
|||||
|
NJὔ絭駪NJὔ絭駪NJὔ絭駪NJ
Сім’я адресів (address family) характеризує набір протоколів, що відповідає даному сокету (InterNetwork, Unix, Appletalk, Banyan, Atm, Ipx та інш.).
Тип комунікації визначає метод міжпроцесної взаємодії: зі встановленням з’єднання (stream); без з’єднання (datagram); обходу рівня транспорту TCP/UDP (raw), тобто робота додатку на мережевому рівні (IP) .
Протокол (protocol) задає код конкретного протоколу з вказаного набору , який буде реалізований в даному з’єднанні (напр., TCP, UDP ).
Життєвий цикл сокету складається з: формування, відкриття, обміну, закриття.
Код створення сокету з підтримкою TCP/IP засобами C# представляється наступним чином
using System.Net.Sockets;
…
Socket slistener = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
Для забезпечення підтримки стеку Unix
Socket slistener = new Socket(AddressFamily.Unix,
SocketType.Stream,
ProtocolType.IP);
Параметр STREAM служить для побудови надійного двонаправленого каналу обміну, орієнтованого на з’єднання (TCP для InterNetwork).
Далі сокет, як правило, зв’язується з конкретною адресою (кінцевою точкою доступа), що складається з IP-адреси та номеру порта. В C# це робиться з застосуванням типу IPEndPoint та методу Bind обєкту типу Socket. Якщо значення номера порту завдати равним нулю, слоєм windows socket буде присвоєне вільне значення в диапазоні 1024-5000.
Далі можливі два варіанти поведінки сокету: ініцюювання зєднання(активна) або слухання порту(пасивна).
Нижче наведений приклад відкриття та ініціалізації пасивного сокету (сокет-сервера).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace SocketTest
{
class Program
{
static void Main(string[] args)
{
IPEndPoint localIP = new IPEndPoint(IPAddress.Any, 11000);
Socket slistener = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
slistener.Bind(ipEndPoint);
slistener.Listen(10);
}
}
}
У разі активного сокету (сокет клієнта). В метод Connect здійснюється передача адреси додатку сервера.
IPHostEntry ipTargetHost = Dns.GetHostEntry("192.168.58.176");
IPAddress ipTargetAddr = ipTargetHost.AddressList[0];
IPEndPoint ipTargetEndPoint = new IPEndPoint(ipTargetAddr, 11000);
senderSock = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
senderSock.Connect(ipTargetEndPoint);
Якщо з’єднання встановлене, то починається взаємодія з використанням методів Send та Receive. Як правило ця взаємодія организується на базі легковагомого фонового процесу(thread).
if (senderSock.Connected == true)
{
tr = new Thread(socketRec);
tr.IsBackground = true;
tr.Start();
break;
}