- •Реферат
- •Розділ 1 Інтернет пейджер типуIcq
- •Розділ 2 Алгоритм програми
- •Розділ 3 Особливості реалізації
- •Вибір мови та середовища програмування
- •Архітектура додатка на базі сокетів
- •Протокол взаємодії додатків клієнта та сервера
- •Основні бібліотеки, використані в програмі
- •Висновки
- •Список використаних джерел
- •Додаток а Інструкція по роботі з додатком
- •Додаток б Тестування програми
Протокол взаємодії додатків клієнта та сервера
Протокол взаємодії сервера з клієнтом базується на основі отримання запитів від клієнта, їх обробці та відсилання відповідей на них.
Якщо сервер отримує повідомлення про те, що з’явився новий клієнт (Command.Login), то записуємо його у список користувачів онлайн (clientList.Add(clientInfo)) і відсилаємо всім користувачам (msgToSend.strMessage = "<- (" + msgReceived.strName + ") is ONLINE").
Якщо клієнт відключається, сервер отримує про це повідомлення (Command.Logout), видаляє користувача зі списку тих, хто онлайн (clientList.RemoveAt(nIndex)), і відсилає повідомлення усім користувачам (msgToSend.strMessage = "-> (" + msgReceived.strName + ") is OFFLINE").
Новому клієнту сервер відсилає список всіх користувачів онлайн (msgToSend.strMessage += client.strName + "*").
Сервер починає прослуховування до отримання нових повідомлень (clientSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, newAsyncCallback(OnReceive), clientSocket)).
Якщо на сервер приходить текстове повідомлення від клієнта (msgToSend.cmdCommand == Command.Message), пересилаємо його необхідному клієнтові (clientInfo.socket.BeginSend(message, 0, message.Length, SocketFlags.None,newAsyncCallback(OnSend), clientInfo.socket)).
Основні бібліотеки, використані в програмі
SYSTEM – простір імен, що містить класи, які дозволяють зіставляти коди URI з шаблонами URI і групами шаблонів URI. З цього простору були використані такі класи:
BitConverter – перетворює базові типи даних в масив байтів і масив байтів в базові типи даних.
Enum– надає базовий клас для перечислень.
EventArgs – це базовий клас для класів, які містять дані про події.
Exeption – представляє помилки, які відбуваються під час виконання додатку.
Object – підтримує всі класи в ієрархії класів .NET Framework і надає низько рівневі служби для похідних класів. Він являється вихідним базовим класом для всіх класів платформи .NET Framework і коренем ієрархії типів.
У програмі був використаний інтерфейс IAsyncResult – він представляє стан асинхронної операції. Також використовується структура Int32 – представляє ціле 32-розрядне число з знаком.
SYSTEM.COLLECTIONS – містить інтерфейси і класи, які визначають різні колекції об’єктів, такі як списки, черги, двійкові масиви, хеш-таблиці і словники.
Використані класи:
ArrayList – реалізує інтерфейс IList за допомогою масиву з динамічною зміною розміру за необхідністю.
SYSTEM.TEXT – містить класи, які представляють кодування ASCII та Юнікод, абстрактні базові класи для перетворення блоків символів в блоки байтів та на оборот і клас підтримки, який управляє об’єктами String.
Використані класи:
Encoding– представляє кодування символів.
SYSTEM.NET – представляє простий програмний інтерфейс для багатьох протоколів, які використовується в сучасних мережах.
Використані класи:
IpEndPoint – представляє мережеву кінцеву точку в вигляді ІР-адреси і номера порта.
Використаний делегат:
BindIPEndPoint – представляє метод, який вказує локальну ІР-адресу і номер порту для точки обслуговування ServicePoint.
SYSTEM.NET.SOCKETS – надає реалізацію інтерфейсу Windows Sockets (Winsock) для тих розробників, яким необхідний жорсткий контроль доступу до мережі.
Використані класи:
Socket – реалізує інтерфейс сокетів.
SocketAsyncEventArgs – представляє асинхронну операцію сокета.
Використані перечислення:
AddressFamily – задає схему адресації, яку може використовувати екземпляр класу Socket.
ProtocolType – задає протокол, який підтримує клас Socket.
SocketType – вказує тип сокету, який є екземпляром класу Socket.
У програмі були використані такі методи класу Socket:
BeginAccept(AsyncCallback, Object) – починає асинхронну операцію, щоб прийняти спробу вхідного підключення.
BeginReceive(IList<ArraySegment<Byte>>, SocketFlags, SocketError, AsyncCallback, Object) – починає виконання асинхронного прийому даних з підключеного об’єкта Socket.
BeginSend(Byte[], Int32, Int32, SocketFlags, SocketError, AsyncCallback, Object) – виконує асинхронну передачу даних на підключений об’єкт Socket.
Bind – зв’язує об’єкт Socket з локальною кінцевою точкою.
Listen – встановлює об’єкт Socket в стан прослуховування.
