Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Литвинов / Лабораторна робота 1.doc
Скачиваний:
26
Добавлен:
23.03.2015
Размер:
568.32 Кб
Скачать

Лабораторна робота 1.

Робота з сокетами засобами c#.

1.Введення

Поняття.

Міжкомп’ютерна взаємодія, що складає основу будь якої розподіленої обробки інформації, базується на cьомірівневої еталонної моделі взаємодії відкритих систем (open system interconnection - OSI).

Суть моделі складається в застосуванні багато-рівневої архітектури, де кожний об’єкт, що знаходиться на рівні n, взаємодіє тільки з віддаленими об’єктами n-го рівня, при цьому об’єкти n-го рівня використовують служби, які забезпечуються об’єктами рівня (n-1) . Об’єкти на рівні n обмінюються протокольними одиницями обміну(protocol data units - PDU), які містять у собі заголовок n-го рівня та данні n-го рівня, при цьому PDU n-го рівня стає даними для рівня n-1.

Основна найбільш розповсюджена䍒䑒( ᷲ녖1 11111봾 mNJ 1NJ11111111111 111ȌUNP147~1.TMPt1111ǐ111 1@111111(ƨǐ1 1111111䥆䕌018 ƨ1Ѐ111111 1111`11111H11ὔ絭駪NJὔ絭駪NJὔ絭駪NJὔ絭駪NJ 11111111111111111101x1111Z111ὔ絭駪NJὔ絭駪NJὔ絭駪NJὔ絭駪NJ11111111 111ȌUNP147~1.TMPtmp01x1111`111봾ὔ絭駪NJὔ絭駪NJὔ絭駪NJὔ絭駪NJ11111111 111ďunp14710839.tmp€1111 111禂ᅇ1ᰏ녖11h111 1@11111 ( H 8111111111㹸11㻘11111111㹸11㹸11111111ˆ111 1@111111(`ˆ1ƀ 111

22갏Ƨ22`22222㹸22ὔ絭駪NJĀ2222 2<unp14710839.tmp222222h222 2@22222 (봾H 8222222222㻘22㻘22222222㹸22㻘22222222222(222 2@22222 (2(222222222㻘22Თ녖222222222h222 2@22222 ( H 8222222222㻘22㼸22222222㻘22㻘222222Თ녖2Თ녖2ˆ222 2@222222(`ˆ2ƀ 222

33갏Ƨ33`33333㻘33ὔ絭駪NJĀ耀333 3<unp14710839.t봾p3333Ც녖3Ც녖3h333 3@33333 ( H 8333333333㼸33㼸33333333㻘33㼸333333338333 3@33333(0 8X33333㻘333333᳡녖3᳔녖33333(333 3@33333 (3(333333333녔肀樼ꛏᳬ333333333¨333 3@33333(@h@ 8 3ȶ333ȶ

44ὔ絭駪NJὔ絭駪NJὔ絭駪NJ444444444444444⊰ꦷ44紈駪봾紈駪NJ紈駪NJ444444444444444⊰ꦷ44ᴇ녖4ᳬ녖4ᳬ녖4˜444 4@44444ᄉᄉ(8`8444444무ƫ44䎂蛣膯NJ

絭駪NJὔ絭駪NJὔ絭駪NJ444444444က44䎂蛣膯NJ紈駪NJ紈駪NJ紈駪NJ444444444က44444444(444 4@44444 (4(4444444444444444444555@555 5@55555(5( ƈ555555€5555 555555@555 5@55555(@5 ƈ555555€5555555555˜555 5@55555ᄉᄉ(8`8☸ 5@555555ƴ55絭駪

NJὔ絭駪NJὔ絭駪NJὔ絭駪NJ55555555 555ὔ絭駪NJὔ絭駪NJὔ絭駪NJὔ絭駪NJ55555555 555ᵠ녖5ᵇ녖5ᵇ녖5˜555 5@55555ᄉᄉ(8`8☸ 5°555555릫ƴ55ὔ絭駪NJὔ絭駪NJὔ絭駪NJὔ絭駪NJ55555555 555ὔ絭駪NJὔ絭駪NJὔ絭駪NJὔ絭駪NJ55555555 555ᵹ녖5ᵠ녖5ᵠ녖5h555 6@66666 (봾H 8666666666㼸66㾘66666666㼸66㼸66666ᶌ녖6ᵹ녖6ᵹ녖6ˆ666 6@666666(`ˆ6ƀ 666

77Ƨ77`77777㼸77ὔ絭駪NJ7777 7<unp14710839.tmp777ᶣ녖7ᶌ녖7ᶌ녖7h777 7@77777 ( H 8777777777㾘77㾘77777777㼸77㾘77777ᶶ녖7ᶣ녖77777(777 7@77777 (7(77777777777᷁녖7777777778777 7@77777(0 8X77777㼸77㻘77᷎녖7᷁녖77777(777 7@77777 (7(777777777೐ꛏᷙ777777777˜777 7@77777ᄉᄉ(8`8☸ 7@777777릫ƴ77ὔ絭駪NJὔ絭駪NJὔ絭駪NJὔ絭駪NJ77777777 777ὔ絭駪NJὔ絭駪NJὔ絭駪NJὔ絭駪NJ77777777 777ᷲ녖7ᷙ녖7ᷙ녖7˜777 7@7 777ᄉᄉ(8`8☸ 7°777777ƴ77ὔ絭駪NJὔ絭駪NJὔ絭駪봾䍒䑒( Ῠ녖7 7777῝녖7봿77777e777ὔ絭駪NJ77777777 777ὔ絭駪NJὔ絭駪NJὔ絭駪NJὔ絭駪NJ77777777 777ḓ녖7ᷲ녖77777(777 7@77777 (7(777777777롄멕汈褰Ḟ녖777777777˜777 7@77777ᄉᄉ(8`8☸ 7@777777릫ƴ77ὔ絭駪NJὔ絭駪NJὔ絭駪NJὔ絭駪NJ77777777 777ὔ絭駪NJὔ絭駪NJὔ絭駪NJὔ絭駪NJ77777777 777ḷ녖7Ḟ녖7Ḟ녖7˜777 7@77777ᄉᄉ(8`8☸ 7°7봿к на структуру даних (в C# це тип), поля якої задають параметри віртуального канала. Такими параметрами є: сім’я адресів, тип комунікації та протокол.

Сім’я адресів (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;

}