ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ Π°ΡƒΠ΄ΠΈΠΎ связи ΠΏΠΎ локальной сСти ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌΠΈ станциями Π² дуплСксном Ρ€Π΅ΠΆΠΈΠΌΠ΅

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Класс содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΡΠ΅Ρ€Π²Π΅Ρ€Π΅ — адрСс ΠΈ ΠΏΠΎΡ€Ρ‚, сокСт для ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ. Π’Π°ΠΊΠΆΠ΅ Π² ΠΊΠ»Π°ΡΡΠ΅ содСрТится Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ сСрвСрного прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ запросы Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², список установлСнных соСдинСний — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса Connection. Π’ ΡΠ΅Ρ€Π²Π΅Ρ€Π΅ хранится список зарСгистрированных ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ инициализируСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ LogWriter, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ Π°ΡƒΠ΄ΠΈΠΎ связи ΠΏΠΎ локальной сСти ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌΠΈ станциями Π² дуплСксном Ρ€Π΅ΠΆΠΈΠΌΠ΅ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ОглавлСниС Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ БокращСния ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹

1. Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ

1.1 ВСхничСскоС Π·Π°Π΄Π°Π½ΠΈΠ΅

1.2 Анализ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… систСм ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ аудиосвязи

1.3 ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ Π°ΡƒΠ΄ΠΈΠΎΠΏΠ΅Ρ€Π΅Π°Ρ‡ΠΈ Π’Ρ‹Π²ΠΎΠ΄ ΠΏΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ части

2. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ΡΠΊΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ

2.1 АрхитСктура сСтСвого взаимодСйствия

2.2 ОписаниС ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…

2.2.1 ВзаимодСйствиС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ

2.2.2 ВзаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ

2.3 Алгоритм сСрвСрного прилоТСния

2.4 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° клиСнтского прилоТСния Π’Ρ‹Π²ΠΎΠ΄ ΠΏΠΎ ΠΊΠΎΠ½ΡΡ‚рукторской части

3. ВСхнологичСская Ρ‡Π°ΡΡ‚ΡŒ

3.1 Π’Ρ‹Π±ΠΎΡ€ языка программирования ΠΈ ΡΡ€Π΅Π΄ΡΡ‚Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

3.2 ВрСбования ΠΊ ΡΠΈΡΡ‚Π΅ΠΌΠ΅

3.3 ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

3.3.1 ОписаниС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ сСрвСрного прилоТСния

3.3.2 ОписаниС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ клиСнтского прилоТСния

3.4 ОписаниС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса Π’Ρ‹Π²ΠΎΠ΄ ΠΏΠΎ Ρ‚СхнологичСской части Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠΡƒΠ΄ΠΈΠΎΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΡΠ²ΡΠ·ΡŒ — ΠΎΠ±Π»Π°ΡΡ‚ΡŒΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π°Ρ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π²ΡƒΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Π°ΡƒΠ΄ΠΈΠΎΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈΠ½Π° расстояниС Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽΠ°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎ-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΡΡ€Π΅Π΄ΡΡ‚Π²Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ.

ΠΡƒΠ΄ΠΈΠΎΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΡΠ²ΡΠ·ΡŒ примСняСтся для Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΈ Π΄Π΅Π»ΠΎΠ²ΠΎΠ³ΠΎ общСния, провСдСния совСщаний, ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΉ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π°ΠΆΠ½Ρ‹Ρ… мСроприятий, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Π°ΠΆΠ½ΠΎ присутствиС Ρ‚Π΅Ρ… ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² общСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎ Ρ‚Π΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΌΠ΅ΡΡ‚Π΅ провСдСния мСроприятия Π»ΠΈΡ‡Π½ΠΎ.

Π°ΡƒΠ΄ΠΈΠΎΡΠ²ΡΠ·ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ язык

БокращСния ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹

Π’ Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ сокращСния ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹:

TCP (Transmission Control Protocol) — ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π½Π° ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами, выполняСмыми Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ»ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ….

UDP (User Datagram Protocol) — простой ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π° Π΄Π΅ΠΉΡ‚Π°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π±Π΅Π· ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ соСдинСния, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ быстроС, Π½ΠΎ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ΅ транспортноС обслуТиваниС.

ΠšΠ»ΠΈΠ΅Π½Ρ‚ — ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ доступ ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ, хранящимся Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π΅.

Π‘Π΅Ρ€Π²Π΅Ρ€ — ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранится информация, прСдоставляСмая ΠΏΠΎ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌΡƒ доступу ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ.

1. Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ

1.1 ВСхничСскоС Π·Π°Π΄Π°Π½ΠΈΠ΅ ЦСлью Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ являСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ Π°ΡƒΠ΄ΠΈΠΎΡΠ²ΡΠ·ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°ΠΌΠΈ, находящимися Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ сСти.

Β· БистСма ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° ΡΠ΅ΠΌΠ΅ΠΉΡΡ‚Π²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм Windows;

Β· ΠŸΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π΅;

Β· Π”ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΆΡƒΡ€Π½Π°Π»Π° для сСрвСра.

1.2 Анализ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… систСм ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ аудиосвязи

Skype (http://www.skype.com/intl/ru/get-skype)

Skype (послСдняя вСрсия 5.5.0.124, страна-ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ: БША, компания Microsoft, 2011 Π³.) — бСсплатноС ΠΏΡ€ΠΎΠΏΡ€ΠΈΠ΅Ρ‚Π°Ρ€Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС с Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΡƒΡŽ связь Ρ‡Π΅Ρ€Π΅Π· Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°ΠΌΠΈ (VoIP), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ»Π°Ρ‚Π½Ρ‹Π΅ услуги для связи с Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠΉ сСти.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ‚Π°ΠΊΠΆΠ΅ позволяСт ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†-Π·Π²ΠΎΠ½ΠΊΠΈ (Π΄ΠΎ 25 голосовых Π°Π±ΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΎΡ€Π°), Π²ΠΈΠ΄Π΅ΠΎΠ·Π²ΠΎΠ½ΠΊΠΈ (Π² Ρ‚.Ρ‡. Π²ΠΈΠ΄Π΅ΠΎΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Π΄ΠΎ 10 Π°Π±ΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²), Π° Ρ‚Π°ΠΊΠΆΠ΅ обСспСчиваСт ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ тСкстовых сообщСний ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ².

НСдостатки:

Β· Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Skype Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ для P2P-сСтСй ΠΈ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½Ρ‹ΠΉ постоянный Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΡΡ‚ΠΈΠ³Π°Ρ‚ΡŒ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π° Π² ΠΌΠ΅ΡΡΡ†.

Β· Skype— это Ρ‡Ρ‘Ρ€Π½Ρ‹ΠΉ ящик с ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ систСмой ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, Π½Π°ΠΏΠΈΡ‡ΠΊΠ°Π½Π½ΠΎΠΉ Π°Π½Ρ‚ΠΈΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΡ‘ΠΌΠ°ΠΌΠΈ исполняСмого Ρ„Π°ΠΉΠ»Π°, ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ с ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‰ΠΈΠΉ Π΅Ρ‘ Π² ΡΠ΅Ρ‚ΡŒ ΠΏΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ.

Β· Как ΠΈ Π»ΡŽΠ±Π°Ρ ΡΠ΅Ρ‚ΡŒ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π°Ρ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ P2P, Skype ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½ вирусным эпидСмиям. Π£ΠΆΠ΅ извСстны случаи распространСния врСдоносных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€Ρ‹ Π² Skype.

iChat (http://www.apple.com/macosx/what-is-macosx/ichat.html)

iChat (послСдняя вСрсия 3.19.0.111, страна-ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ: БША, компания Apple, 2010 Π³.) — ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями, прСдставлСна ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Apple Inc. Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ° Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΠΏΠΎΠ΄ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Macintosh. Π’ Π½ΠΎΠ²ΠΎΠΉ вСрсии Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ голосового ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Ρ‡Π°Ρ‚Π°. Π’Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ поставку Mac OS X.

ВозмоТности: ВСкстовый Ρ‡Π°Ρ‚, Π°ΡƒΠ΄ΠΈΠΎΡ‡Π°Ρ‚, Π²ΠΈΠ΄Π΅ΠΎΡ‡Π°Ρ‚, ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ доступ ΠΊ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌΡƒ столу, удалённая дСмонстрация Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (iChat Theater), Π²Π΅Π·Π΄Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ с Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ двумя собСсСдниками.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹: OSCAR (AIM, ICQ), XMPP (Jabber), Bonjour LAN Chat.

ΠœΠΈΠ½ΡƒΡΡ‹:

Β· ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Macintosh.

1.3 ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ Π°ΡƒΠ΄ΠΈΠΎΠΏΠ΅Ρ€Π΅Π°Ρ‡ΠΈ Π‘Ρ‚Ρ€Π΅ΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ рост ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠ°-ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Π½ΠΎΠ²Ρ‹Π΅ трСбования ΠΊ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΠΈ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΌΠ°ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. И Π΄Π»Ρ Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒ всС эти запросы, ΠΎΠ΄Π½ΠΎΠ³ΠΎ увСличСния Смкости сСти нСдостаточно, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹Π΅ ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ управлСния Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ загруТСнности Π»ΠΈΠ½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ.

Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ… Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΡΡ‚оянной ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ, Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ (ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΠΈ) Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ с Ρ‚ΠΎΠΉ ΠΆΠ΅ самой ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ. Π’Π°ΠΊΠΈΠ΅ прилоТСния Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°ΡƒΠ΄ΠΈΠΎΠΈ Π²ΠΈΠ΄Π΅ΠΎΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ, ΠΆΠΈΠ²ΠΎΠ΅ Π²ΠΈΠ΄Π΅ΠΎ, ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ диагностику Π² ΠΌΠ΅Π΄ΠΈΡ†ΠΈΠ½Π΅, ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΡƒΡŽ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΈΡŽ, распрСдСлСнноС ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈΠ³Ρ€Ρ‹, ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Ρ€.

НаиболСС ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» транспортного уровня — это TCP. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ TCP позволяСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ мноТСство Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… распрСдСлСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΎΠ½ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. TCP обСспСчиваСт Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ доставку ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΈΡ… Ρ†Π΅Π»ΠΎΡΡ‚ности ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π·Π°Π΄Π°Ρ‡, связанных с ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ Π²Π°ΠΆΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½Π΅ ΠΏΡ€ΠΈΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ ΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» TCP осущСствляСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ доставки ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ Π² ΡΠ»ΡƒΡ‡Π°Π΅ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠΉ доставки осущСствляСт ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ. Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ нСдопустим для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ ΠΆΠ΄Π°Ρ‚ΡŒ доставки утСрянного ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠΌΡƒ Ρ€Π°Π·Ρ€Ρ‹Π²Ρƒ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² — Ρ‡Ρ‚ΠΎ являСтся нСдопустимым для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π­Ρ‚Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π΄Π΅ΠΉΡ‚Π°Π³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» UDP, Π·Π°Π΄Π°Ρ‡Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ — быстрая доставка Π΄Π΅ΠΉΡ‚Π°Π³Ρ€Π°ΠΌΠΌ Π±Π΅Π· установлСния соСдинСния, ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ доставки ΠΏΠ°ΠΊΠ΅Ρ‚Π°. НСсмотря Π½Π° ΡΡ‚ΠΈ нСдостатки, ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» UDP Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»Π΅Π½ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ обСспСчиваСт Π±ΠΎΠ»Π΅Π΅ Π±Ρ‹ΡΡ‚Ρ€ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΉ срСдС Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ с ΠΏΠΎΡΡ‚оянной ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ. Они ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, проходят Ρ‡Π΅Ρ€Π΅Π· ΡΠ΅Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ся ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΌ, воспроизводящим Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎ ΠΈΡ… ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ. Однако Π²Π²ΠΈΠ΄Ρƒ измСнСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΏΠΎ ΡΠ΅Ρ‚ΠΈ, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ±Ρ‹Π²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· нСрСгулярныС ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Для компСнсации этого эффСкта ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‚ΡΡ ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ с ΠΏΠΎΡΡ‚оянной ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌΡƒ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡŽ, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π²Ρ‹Π²ΠΎΠ΄.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ послС ΠΎΠ±Π·ΠΎΡ€Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°ΠΌΠΈ Π² ΡΠ΅Ρ‚ΠΈ Π±Ρ‹Π»ΠΈ поставлСны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

Β· Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° общСния сСрвСра с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ;

Β· Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ комплСкса, состоящСго ΠΈΠ· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ сСрвСра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ». ΠŸΡ€ΠΈ этом Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π΅;

Β· ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ аудиосвязи ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ;

2. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ΡΠΊΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ

2.1 АрхитСктура сСтСвого взаимодСйствия Для сСтСвого взаимодСйствия примСняСтся гибридная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°.

Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ, поэтому Π±Ρ‹Π»Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° «ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр», схСма ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ прСдставлСна Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 2.1.

Рисунок 2.1. АрхитСктура «ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр»

Она обСспСчиваСт Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π΅ ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ взаимодСйствиС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ собой Ρ‡Π΅Ρ€Π΅Π· сСрвСр.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ быстроС ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠ°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π±Ρ‹Π»Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° «Ρ‚ΠΎΡ‡ΠΊΠ°-Ρ‚ΠΎΡ‡ΠΊΠ°», схСма ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ прСдставлСна Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 2.2.

Рисунок 2.2. АрхитСктура «Ρ‚ΠΎΡ‡ΠΊΠ°-Ρ‚ΠΎΡ‡ΠΊΠ°»

ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ всС участники процСсса Ρ€Π°Π²Π½ΠΎΠΏΡ€Π°Π²Π½Ρ‹. ВзаимодСйствиС происходит ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈ ΡΠ΅Ρ€Π²Π΅Ρ€Π°ΠΌΠΈ. ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ сСрвСра Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΠ΅Ρ‚, поэтому Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€ отсутствуСт, Ρ‡Ρ‚ΠΎ позволяСт ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ систСму. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ достаточно Π²Ρ‹Π³ΠΎΠ΄Π΅Π½ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π°ΡƒΠ΄ΠΈΠΎΠΈ Π²ΠΈΠ΄Π΅ΠΎΠ΄Π°Π½Π½Ρ‹Ρ….

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ гибридная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрноС взаимодСйствиС для осущСствлСния управлСния Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΠ΅ «Ρ‚ΠΎΡ‡ΠΊΠ°-Ρ‚ΠΎΡ‡ΠΊΠ°» для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ.

2.2 ОписаниС ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Для осущСствлСния ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», основанный Π½Π° Ρ‚ранспортном ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ TCP, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π°ΡƒΠ΄ΠΈΠΎ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ осущСствляСтся ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ основы Π΄Π΅ΠΉΡ‚Π°Π³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» UDP.

2.2.1 ВзаимодСйствиС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ

ВзаимодСйствиС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ высокой стСпСни надСТности, поэтому Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° гарантированная доставка сообщСний. Для этого использовался ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», основанный Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ TCP. Рассмотрим Π΅Π³ΠΎ основныС аспСкты.

ΠŸΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° устанавливаСтся соСдинСниС с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ. Π‘Π΅Ρ€Π²Π΅Ρ€, получая запрос Π½Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, выдСляСт ΠΏΠΎΡ‚ΠΎΠΊ для взаимодСйствия с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ ΠΎΡ‚правляСт Π΅ΠΌΡƒ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅.

ПослС этого ΠΊΠ»ΠΈΠ΅Π½Ρ‚ отправляСт сСрвСру сообщСниС AuthorizationRequest, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сопровоТдаСт имя ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΏΡ‹Ρ‚Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ ΡΠ΅Ρ€Π²Π΅Ρ€Ρƒ. Π‘Π΅Ρ€Π²Π΅Ρ€ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ — провСряСт Π΅ΡΡ‚ΡŒ Π»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π² ΡΠ΅Ρ‚ΠΈ ΠΈ Ρ€ΠΏΠ°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ пароля сСрвСра, ΠΈ ΠΎΡ‚правляСт ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ сообщСниС AuthorizationSuccess ΠΈΠ»ΠΈ AuthorizationFailed Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ вмСстС с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΡ…, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ сообщСниС ΠΎΠ± Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½Π΅ΠΌ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ±ΠΎ всСх Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΡ… ΠΈ Π² ΡΠ»ΡƒΡ‡Π°Π΅ нСобходимости смоТСт ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ.

ΠŸΡ€ΠΈ нСобходимости ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ взаимодСйствиС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ отправляСт сСрвСру сообщСниС IQuit. Π‘Π΅Ρ€Π²Π΅Ρ€, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² это сообщСниС, удаляСт всю ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ ΠΈ ΠΎΠΏΠΎΠ²Π΅Ρ‰Π°Π΅Ρ‚ всСх ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΎΠ± ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π‘Ρ…Π΅ΠΌΠ° взаимодСйствия прСдставлСна Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 2.3.

Рисунок 2.3. Π‘Ρ…Π΅ΠΌΠ° взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ

2.2.2 ВзаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ ВзаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ осущСствляСтся ΠΊΠ°ΠΊ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ TCP, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ UDP.

По ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ TCP осущСствляСтся ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° запроса Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΌΠ΅Π΄ΠΈΠ°Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ°Π· ΠΎΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ увСдомлСния ΠΎΠ± ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΡ‚ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ° Π°ΡƒΠ΄ΠΈΠΎΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ.

По ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ UDP производится нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π°ΡƒΠ΄ΠΈΠΎΠ΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ запроса Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠšΠ»ΠΈΠ΅Π½Ρ‚1 отправляСт сообщСниС ConnectToClient ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρƒ2, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ.

ΠšΠ»ΠΈΠ΅Π½Ρ‚2, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² сообщСниС, ΡΠΎΠ³Π»Π°ΡˆΠ°Π΅Ρ‚ΡΡ ΠΈΠ»ΠΈ отказываСтся ΠΎΡ‚ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΈ ΠΎΡ‚правляСт сообщСниС ConnectToClientSuccess ΠΈΠ»ΠΈ ConnectToClientFailed соотвСтствСнно. Если соСдинСниС установлСно, Ρ‚ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ся ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π²ΠΈΠ΄Π΅ΠΎΠΈ Π°ΡƒΠ΄ΠΈΠΎΠ΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ UDP.

Если ΠšΠ»ΠΈΠ΅Π½Ρ‚1 Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… — ΠΎΠ½ ΠΎΡ‚правляСт ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρƒ2 сообщСниС DisconnectRequest, послС Ρ‡Π΅Π³ΠΎ ΠΎΠ±Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΌΠ΅Π΄ΠΈΠ°Π΄Π°Π½Π½Ρ‹Ρ….

Π‘Ρ…Π΅ΠΌΠ° взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ прСдставлСна Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 2.4.

Рисунок 2.4. ВзаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ

2.3 Алгоритм сСрвСрного прилоТСния

Π‘Π΅Ρ€Π²Π΅Ρ€Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ выполняСт ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Π΅Π΄Π΅Ρ‚ ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Π’ Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ Π±Π»ΠΎΠΊ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, приходящиС ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ установлСно соСдинСниС. Π—Π°Ρ‚Π΅ΠΌ происходит Π°Π½Π°Π»ΠΈΠ· Ρ‚ΠΈΠΏΠ° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°.

Если Ρ‚ΠΈΠΏ ΠΏΠ°ΠΊΠ΅Ρ‚Π° = AuthorizationRequest, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ рСгистрация Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π΅.

ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° с Ρ‚ΠΈΠΏΠΎΠΌ ConnectToClientRequest — происходит ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ½ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ.

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² ΠΏΠ°ΠΊΠ΅Ρ‚ с Ρ‚ΠΈΠΏΠΎΠΌ IQuit — удаляСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ ΠΎΡ‚сылаСт всСм ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ сообщСниС ΠΎΠ± ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΠ²ΡˆΠ΅ΠΌΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅.

Π’Π°ΠΊΠΆΠ΅ сСрвСр осущСствляСт сбор ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ±ΠΎ всСх дСйствиях, ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π΅. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ записываСт Π² Ρ„Π°ΠΉΠ» Π½Π° ΠΆΠ΅ΡΡ‚ΠΊΠΎΠΌ дискС.

Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹ сСрвСра ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 2.5.

Рисунок 2.5. Π‘Π»ΠΎΠΊ схСма Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ сСрвСра

2.4 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° клиСнтского прилоТСния

Π—Π°Π΄Π°Ρ‡Π°ΠΌΠΈ клиСнтского прилоТСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ взаимодСйствиС с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ с ΠΎΠ΄Π½ΠΎΠΉ стороны ΠΈ Ρ ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны.

ПослС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ сСрвСру запроса Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… сообщСний: AuthorizationSuccess, AuthrizationFailed. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ сообщСний ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° — ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π΅, ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ список доступных ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС авторизация Π±Ρ‹Π»Π° Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Π° ΠΈ Π½Π° ΡΠΊΡ€Π°Π½ выводится сообщСниС с ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Π½Π΅ΡƒΠ΄Π°Ρ‡ΠΈ.

ΠŸΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊ ΡΠ΅Ρ€Π²Π΅Ρ€Ρƒ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° всСм Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ отсылаСтся сообщСниС ClientConnected, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ‚ Π΅Π΅ Π² ΡΠΏΠΈΡΠΎΠΊ доступных ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

ΠŸΡ€ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΎΡ‚ ΡΠ΅Ρ€Π²Π΅Ρ€Π° всСм Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ отправляСтся сообщСниС ClientDisconnected, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ удаляСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° доступных ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

ΠŸΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°ΡƒΠ΄ΠΈΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ посылаСт сСрвСру ΠΏΠ°ΠΊΠ΅Ρ‚ для Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° с Ρ‚ΠΈΠΏΠΎΠΌ ConnectToClientRequest, содСрТащий ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅.

ΠšΠ»ΠΈΠ΅Π½Ρ‚, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉ Ρ‚Π°ΠΊΠΎΠ΅ сообщСниС, Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС Π½Π° ΡΠΊΡ€Π°Π½ с Π·Π°ΠΏΡ€ΠΎΡΠΎΠΌ Π½Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅. Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π³ΠΎΡ‚ΠΎΠ² Π½Π°Ρ‡Π°Ρ‚ΡŒ Π°ΡƒΠ΄ΠΈΠΎΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ — ΠΎΠ½ ΠΎΡ‚правляСт ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚ Ρ‚ΠΈΠΏΠ° ConnectToClientSuccess, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅.

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ Π²ΠΈΠ΄Π΅ΠΎΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ.

Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π³ΠΎΡ‚ΠΎΠ² ΠΈΠ»ΠΈ Π½Π΅ ΠΆΠ΅Π»Π°Π΅Ρ‚ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ — ΠΎΠ½ ΠΎΡ‚правляСт ΠΏΠ°ΠΊΠ΅Ρ‚ с Ρ‚ΠΈΠΏΠΎΠΌ ConnectToClientFailed, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ увСдомляСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΠ± ΠΎΡ‚ΠΊΠ°Π·Π΅ Π² ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ.

ΠŸΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Π°ΡƒΠ΄ΠΈΠΎΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСниС DisconnectRequest ΠΈ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ….

Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 2.6.

Рисунок 2.6. Π‘Π»ΠΎΠΊ-схСма Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния конструкторской части Π±Ρ‹Π»ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Π’ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ комплСкс с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ для Π½Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΡƒΠΊΠ°Π·Π°Π½ Π² ΠΏΡƒΠ½ΠΊΡ‚Π΅ 2.1., для взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ частями систСмы Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», описанный Π² ΠΏΡƒΠ½ΠΊΡ‚Π΅ 2.2. Алгоритмы Ρ€Π°Π±ΠΎΡ‚Ρ‹ сСрвСра ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π±Ρ‹Π»ΠΈ описаны Π² ΠΏΡƒΠ½ΠΊΡ‚Π°Ρ… 2.3. ΠΈ 2.4.

3. ВСхнологичСская Ρ‡Π°ΡΡ‚ΡŒ

3.1 Π’Ρ‹Π±ΠΎΡ€ языка программирования ΠΈ ΡΡ€Π΅Π΄ΡΡ‚Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прилоТСния-сСрвСра ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° использовался язык программирования высокого уровня C# ΠΈ ΡΡ€Π΅Π΄Π° Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования Microsoft Visual Studio 2010. Π’Ρ‹Π±ΠΎΡ€ Π±Ρ‹Π» обусловлСн удобством C# ΠΏΡ€ΠΈ использовании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ‚Π΅ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… срСдств ΠΈ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠ½ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Π° VS 2010 Π±Ρ‹Π»Π° Π²Ρ‹Π±Ρ€Π°Π½Π° ΠΈΠ·-Π·Π° большого разнообразия Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ², Π² Ρ‚ΠΎΠΌ числС ΠΈ Π΄Π»Ρ сСтСвого программирования, ΠΈ ΠΏΡ€ΠΎΡΡ‚ΠΎΡ‚Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса.

3.2 ВрСбования ΠΊ ΡΠΈΡΡ‚Π΅ΠΌΠ΅

Для Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ функционирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ комплСкса систСма Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ трСбованиям:

Β· опСрационная систСма Windows XP, Windows Vista, Windows 7;

Β· установлСнный.NET Framework 3.0;

Β· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Voice. dll;

Β· Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠΈΠΊΡ€ΠΎΡ„ΠΎΠ½Π° (встроСнного ΠΈΠ»ΠΈ внСшнСго).

3.3 ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

3.3.1 ОписаниС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ сСрвСрного прилоТСния

Π‘Π΅Ρ€Π²Π΅Ρ€Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ абстрактно ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ Ρ‚Ρ€Π΅Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ создания соСдинСний — основной ΠΌΠΎΠ΄ΡƒΠ»ΡŒ сСрвСрного прилоТСния. Он ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ классом Server, листинг ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

Класс содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΡΠ΅Ρ€Π²Π΅Ρ€Π΅ — адрСс ΠΈ ΠΏΠΎΡ€Ρ‚, сокСт для ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ. Π’Π°ΠΊΠΆΠ΅ Π² ΠΊΠ»Π°ΡΡΠ΅ содСрТится Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ сСрвСрного прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ запросы Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², список установлСнных соСдинСний — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса Connection. Π’ ΡΠ΅Ρ€Π²Π΅Ρ€Π΅ хранится список зарСгистрированных ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ инициализируСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ LogWriter, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΆΡƒΡ€Π½Π°Π»Π° событий.

Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ осущСствляСт ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π° ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½ΠΎ — создаСт Π½ΠΎΠ²ΠΎΠ΅ соСдинСниС для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

ΠœΠΎΠ΄ΡƒΠ»ΡŒ обслуТивания соСдинСний — ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Π·Π°Π΄Π°Ρ‡Π΅ΠΉ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся осущСствлСниС связи ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ. Он ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ классом Connection, листинг ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

Π­Ρ‚ΠΎΡ‚ класс содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ соСдинСнии — сокСт для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, имя ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сСрвСром запросов ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Π—Π°Π΄Π°Ρ‡Π° модуля — ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅, Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ сбора статистики Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для осущСствлСния контроля дСйствий, происходящих Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π΅. ΠœΠΎΠ΄ΡƒΠ»ΡŒ прСдставлСн классом LogWriter, листинг ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ прСдставлСн Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

Π—Π°Π΄Π°Ρ‡Π° модуля — ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ· событий ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ½ Π½ΠΈΡ… Π² Π»ΠΎΠ³-Ρ„Π°ΠΉΠ» для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° состояний сСрвСра. ΠœΠΎΠ΄ΡƒΠ»ΡŒ тСсно связан с Π΄Π²ΡƒΠΌΡ Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ выполняСтся наряду с Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ клиСнтского прилоТСния.

3.3.2 ОписаниС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ клиСнтского прилоТСния

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ абстрактно ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ Ρ‚Ρ€Π΅Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс осущСствляСт взаимодСйствиС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс прСдставлСн Π³Π»Π°Π²Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ прилоТСния, которая содСрТит ΠΏΠΎΠ»Π΅, содСрТащСС список ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Π½Π°Π±ΠΎΡ€ ΠΊΠ½ΠΎΠΏΠΎΠΊ для управлСния процСссом Π°ΡƒΠ΄ΠΈΠΎΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΏΡƒΠ½ΠΊΡ‚Π΅ 3.4.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ взаимодСйствия с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ сообщСний ΠΎΡ‚ ΡΠ΅Ρ€Π²Π΅Ρ€Π°. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ классом Client, листинг ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π’ ΡΡ‚ΠΎΠΌ классС хранится информация ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ соСдинСнии с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ — имя, ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, сокСт, ΠΏΠΎΡ‚ΠΎΠΊ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний ΠΎΡ‚ ΡΠ΅Ρ€Π²Π΅Ρ€Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ список ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π—Π°Π΄Π°Ρ‡Π° модуля — ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π΅, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список доступных ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Π΄Π°Π»Π΅Π΅ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ сообщСния ΠΎΡ‚ ΡΠ΅Ρ€Π²Π΅Ρ€Π° ΠΈ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ. Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ взаимодСйствуСт с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ интСрфСйсом ΠΏΡƒΡ‚Π΅ΠΌ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ — ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ аудиоизобраТСния ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΅Π³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ. ΠœΠΎΠ΄ΡƒΠ»ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ клиСнтского прилоТСния, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π°Ρ…Π²Π°Ρ‚, ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅, Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ Π²ΠΈΠ΄Π΅ΠΎΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ прСдставлСн двумя классом AudioTranceiver, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ соотвСтствСнно ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π°ΡƒΠ΄ΠΈΠΎΠ΄Π°Π½Π½Ρ‹Ρ….

3.4 ОписаниС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса

ΠžΡΠ½ΠΎΠ²Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса составляСт Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ клиСнтского прилоТСния. Π•Π³ΠΎ Π²ΠΈΠ΄ прСдставлСн Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 3.1.

Рисунок 3.1. Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ клиСнтского прилоТСния Π’ Ρ†Π΅Π½Ρ‚Ρ€Π΅ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° располагаСтся список ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΊ ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ.

Π’Π²Π΅Ρ€Ρ…Ρƒ располагаСтся мСню. Π’ΠΊΠ»Π°Π΄ΠΊΠ° «ΠšΠΎΠ½Ρ„СрСнция» ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ΄ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ «ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅», «ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅» ΠΈ «Π’Ρ‹Ρ…ΠΎΠ΄». (см. Π ΠΈΡΡƒΠ½ΠΎΠΊ 3.2.).

Рисунок 3.2. МСню «Π€Π°ΠΉΠ»»

ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΏΡƒΠ½ΠΊΡ‚ «ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅» появляСтся Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ «ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅» (см. Ρ€ΠΈΡΡƒΠ½ΠΎΠΊ 3.3.), с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ ΡΠ΅Ρ€Π²Π΅Ρ€Ρƒ. Π’ ΡΡ‚ΠΎΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ располоТСны ΠΏΠΎΠ»Π΅ для Π²Π²ΠΎΠ΄Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ располагаСтся сСрвСр, поля для Π²Π²ΠΎΠ΄Π° Π»ΠΎΠ³ΠΈΠ½Π° ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Ρ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Рисунок 3.3. Π”ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ «ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅»

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ сСрвСрного прилоТСния ΠΊΡ€Π°ΠΉΠ½Π΅ прост. Π•Π³ΠΎ Π²ΠΈΠ΄ прСдставлСн Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 3.4.

Рисунок 3.4. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ сСрвСрного прилоТСния Π’ Ρ†Π΅Π½Ρ‚Ρ€Π΅ ΠΎΠΊΠ½Π° Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ поля Π²Ρ‹Π±ΠΎΡ€Π° IP сСрвСра ΠΈΠ· ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ся (ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ) ΠΈ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° пароля для Π²Ρ…ΠΎΠ΄Π° Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€. МСню «Π‘Π΅Ρ€Π²Π΅Ρ€» ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ΄ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ «Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ», «ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ» ΠΈ «Π’Ρ‹Ρ…ΠΎΠ΄» (см. Π ΠΈΡΡƒΠ½ΠΎΠΊ 3.5).

Рисунок 3.5. МСню «Π€Π°ΠΉΠ»»

3.5 Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстирования Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ³ΠΎ срСдства

Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ тСстирования Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ ΡΠ΅Ρ€Π²Π΅Ρ€ ΠΏΡ€ΠΈ ΡˆΡ‚Π°Ρ‚Π½ΠΎΠΌ использовании ΠΈ Π½Π΅ΡˆΡ‚Π°Ρ‚Π½Ρ‹Ρ… ситуациях.

1. ΠŸΡ€ΠΈ запускС сСрвСра появляСтся ΠΎΠΊΠ½ΠΎ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (рисунок 3.5.1.)

Рис. 3.5.1. Окно Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ

2. ΠŸΡ€ΠΈ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΌ ΠΏΠ°Ρ€ΠΎΠ»Π΅ (рисунок 3.5.2) ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°ΠΏΡƒΡΡ‚ится.

Рис. 3.5.2. Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΌ ΠΏΠ°Ρ€ΠΎΠ»Π΅ ΠΏΡ€ΠΈ запускС сСрвСра

3. ΠŸΡ€ΠΈ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΉ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π² ΡΠ»ΡƒΡ‡Π°ΡΡ…, Ссли ΠΏΠ°Ρ€ΠΎΠ»ΡŒ Π½Π΅Π²Π΅Ρ€Π΅Π½ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π² ΡΠ΅Ρ‚ΠΈ, Π½Π° ΡΠΊΡ€Π°Π½Π΅ появятся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ сообщСния (рисунки 3.5.3 ΠΈ 3.5.4).

Рис. 3.5.3. Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΎ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΌ ΠΏΠ°Ρ€ΠΎΠ»Π΅.

Рис. 3.5.4. Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΎ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΌ Π»ΠΎΠ³ΠΈΠ½Π΅.

А Ρ‚Π°ΠΊΠΆΠ΅ появятся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ записи Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ ΠΎΠ± ΡΡ‚ΠΎΠΌ:

13.12.2011 23:04:06: Авторизация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Mendax Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½Π°. ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ.

13.12.2011 23:03:20: Авторизация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Mendax Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½Π°. ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

4. Если сСрвСр Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ, Π½Π° ΡΠΊΡ€Π°Π½Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² выдаСтся сообщСниС ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅ (рисунок 3.5.5).

ΠŸΡ€ΠΈ Π²Π΅Ρ€Π½ΠΎΠΉ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ ΠΊ ΡΠ΅Ρ€Π²Π΅Ρ€Ρƒ, имя ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° добавится Π² ΡΠΏΠΈΡΠΎΠΊ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° запись Π² ΠΆΡƒΡ€Π½Π°Π»: «04.12.2011 18:36:39: Авторизация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Mendax ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ».

Рис. 3.5.2. Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΎΠ± ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ сСрвСра.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ комплСкс, состоящий ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΡΠ΅Ρ€Π²Π΅Ρ€Π°.

Для сСрвСра Π±Ρ‹Π» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»:

1. АвтоматичСский поиск IP-адрСсов, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½ сСрвСр;

2. Запуск сСрвСра;

3. ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° сСрвСра;

4. Π–ΡƒΡ€Π½Π°Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„Π°ΠΉΠ» serverLog. txt;

5. ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ΠΆΡƒΡ€Π½Π°Π»Π°.

Для ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π±Ρ‹Π» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»:

1) ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ ΡΠ΅Ρ€Π²Π΅Ρ€Ρƒ;

2) ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ ΡΠ΅Ρ€Π²Π΅Ρ€Π°;

3) ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ;

4) ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Сля;

5) ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π°ΡƒΠ΄ΠΈΠΎ-Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Сля ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ;

6) УвСдомлСния ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠΈΡ… ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, Π²ΠΎΠ·Π½ΠΈΠΊΡˆΠΈΡ… Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Они Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Π²ΠΈΠ΄Π΅ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΎΠΊΠΎΠ½.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ аудиосвязи ΠΏΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ сСти, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ комплСкс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π΅Π³ΠΎ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ комплСкс состоит ΠΈΠ·:

1. ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΎΠ³ΠΎ прилоТСния;

2. Π‘Π΅Ρ€Π²Π΅Ρ€Π½ΠΎΠ³ΠΎ прилоТСния.

Π’ Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ комплСкса Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ трСбования:

1. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° высокого уровня для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ взаимодСйствия ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр;

2. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса;

3. ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ аудиосвязи ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ комплСкс удовлСтворяСт всСм трСбованиям, Π²Ρ‹Π΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΌ Π² Ρ‚СхничСском Π·Π°Π΄Π°Π½ΠΈΠΈ. Однако ΠΎΠ½ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ нСдостстками. НапримСр, остутствиС связи ΠΎΠ΄ΠΈΠ½ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠšΠ»ΠΈΠ΅Π½Ρ‚:

using System;

using System.Collections.Generic;

using System. Linq;

using System. Text;

using System.Net;

using System.Net.Sockets;

using System. Threading;

using System.Windows.Forms;

namespace Client

{

public delegate void NeedListRedraw ();

public delegate void EmptyHandler ();

class Client

{

frmClient form;

String nickName;

String password;

Socket socket;

Thread mainThread;

public String connectedUser = «» ;

public List connectedUsers;

AudioTransceiver audiotransceiver;

bool isTransfering;

public Client (String _nickName, String _password, frmClient _form)

{

nickName = _nickName;

password = _password;

form = _form;

socket = new Socket (AddressFamily.InterNetwork, SocketType. Stream,

ProtocolType.Tcp);

connectedUsers = new List ();

}

public String GetUserName ()

{

return nickName;

}

public void Connect (String hostName)

{

//ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΊ ΡΠ΅Ρ€Π²Π΅Ρ€Ρƒ

socket.Connect (hostName, 11 000);

int port = ((IPEndPoint)socket.LocalEndPoint).Port — 1000;

IPAddress ipAddress = ((IPEndPoint)socket.LocalEndPoint).Address;

audiotransceiver = new AudioTransceiver (ipAddress, port);

byte messageType = (byte)Messages.AuthorizationRequest;

SocketWriter.WriteType (socket, (byte)messageType);

SocketWriter.WriteString (socket, password);

User userToWrite = new User (nickName, new IPEndPoint (ipAddress, 11 100));

SocketWriter.WriteUserRecord (socket, userToWrite);

audiotransceiver.AudioEndHandler = new EmptyHandler (AudioEnd);

mainThread = new Thread (MainThread);

mainThread.IsBackground = true;

mainThread.Start ();

}

void AudioEnd ()

{

}

public void Stop ()

{

try

{

SocketWriter.WriteType (socket, (byte)Messages.IQuit);

socket.Disconnect (false);

if (audiotransceiver ≠ null)

audiotransceiver.Dispose ();

mainThread.Abort ();

}

catch { }

}

void MainThread ()

{

try

{

while (true)

{

byte messageType = SocketReader. ReadType (socket);

switch (messageType)

{

case (byte)Messages.AuthorizationFailed:

{

messageType = SocketReader. ReadType (socket);

if (messageType == (byte)Messages.WrongPassword)

{

MessageBox.Show («ΠΠ΅Π²Π΅Ρ€Π½Ρ‹ΠΉ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ»);

form.Invoke (form.disconnect);

}

else if (messageType == (byte)Messages.WrongName)

{

MessageBox.Show («ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ

Π² ΡΠ΅Ρ‚ΠΈ");

form.Invoke (form.disconnect);

}

break;

}

case (byte)Messages.AuthorizationSuccess:

{

int userNum = SocketReader. ReadInt (socket);

for (int i = 0; i < userNum; i++)

{

connectedUsers.Add (SocketReader.ReadString (socket));

}

form.Invoke (form.redrawList);

break;

}

case (byte)Messages.ClientConnected:

{

NewClientConnected ();

form.Invoke (form.redrawList);

break;

}

case (byte)Messages.ClientDisconnected:

{

ClientDisconnected ();

form.Invoke (form.redrawList);

break;

}

case (byte)Messages.ConnectToClientRequest:

{

ConnectToClientRequest ();

form.Invoke (form.redrawList);

break;

}

case (byte)Messages.ConnectToClientSuccess:

{

ConnectToClientSuccess ();

form.Invoke (form.redrawList);

break;

}

case (byte)Messages.ConnectToClientFailed:

{

ConnectToClientFailed ();

form.Invoke (form.redrawList);

break;

}

case (byte)Messages.DisconnectRequest:

{

connectedUser = «» ;

form.Invoke (form.redrawList);

DisconnectAudio ();

break;

}

case (byte)Messages.ServerClose:

{

MessageBox.Show («Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½. Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Ρ€Π²Π°Π½ΠΎ.»);

DisconnectAudio ();

form.Invoke (form.disconnect);

return;

}

catch (ThreadAbortException e)

{

catch (Exception e)

{

MessageBox.Show («Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ.» + e. Message);

Stop ();

}

void ConnectToClientRequest ()

{

User requestingUser = SocketReader. ReadUserRecord (socket);

if (MessageBox.Show («ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ «+ requestingUser. nickName + «Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Π²Π°ΠΌ. ΠžΠ΄ΠΎΠ±Ρ€ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅?», «Π—апрос Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅», MessageBoxButtons. YesNo) == DialogResult. Yes)

{

SocketWriter.WriteType (socket, (byte)Messages.ConnectToClientSuccess);

SocketWriter.WriteUserRecord (socket, requestingUser. nickName,

audiotransceiver.GetEndPoint ().Address.ToString (),

audiotransceiver.GetEndPoint ().Port);

connectedUser = requestingUser. nickName;

audiotransceiver.Connect (requestingUser.ipEndPoint);

audiotransceiver.BeginTransceiving ();

}

else

{

SocketWriter.WriteType (socket, (byte)Messages.ConnectToClientFailed);

SocketWriter.WriteString (socket, requestingUser. nickName);

}

}

void ConnectToClientSuccess ()

{

User user = SocketReader. ReadUserRecord (socket);

audiotransceiver.Connect (user.ipEndPoint);

audiotransceiver.BeginTransceiving ();

connectedUser = user. nickName;

}

void ConnectToClientFailed ()

{

MessageBox.Show («ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΎΡ‚Π²Π΅Ρ€Π³ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅»);

}

public void DisconnectAudio ()

{

try

{

if (audiotransceiver ≠ null)

{

audiotransceiver.EndTransceiving ();

//audiotransceiver.Dispose ();

}

}

catch

{

}

// }

}

void NewClientConnected ()

{

User user = SocketReader. ReadUserRecord (socket);

connectedUsers.Add (user.nickName);

form.Invoke (form.redrawList);

}

void ClientDisconnected ()

{

//Π§ΠΈΡ‚Π°Π΅ΠΌ имя ΠΎΡ‚ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΠ²ΡˆΠ΅Π³ΠΎΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

String name = SocketReader. ReadString (socket);

//УдаляСм Π΅Π³ΠΎ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°

connectedUsers.Remove (name);

}

public void SendConnectRequest (String userName)

{

SocketWriter.WriteType (socket, (byte)Messages.ConnectToClientRequest);

SocketWriter.WriteUserRecord (socket, userName,

audiotransceiver.GetEndPoint ().Address.ToString (), audiotransceiver. GetEndPoint ().Port);

}

public void SendDisconnectRequest (String userName)

{

SocketWriter.WriteType (socket, (byte)Messages.DisconnectRequest);

SocketWriter.WriteString (socket, userName);

//EndTranslation1();

}

public void EndTranslation1()

{

connectedUser = «» ;

}

}

}

Π‘Π΅Ρ€Π²Π΅Ρ€:

using System;

using System.Collections.Generic;

using System. Linq;

using System. Text;

using System.Net;

using System.Net.Sockets;

using System. Threading;

using System.Windows.Forms;

namespace Server

{

class Server

{

private Socket socket;

private IPAddress ipAddress;

private int port;

private Thread mainThread;

private LogWriter logWriter;

private List users;

private List connections;

private string password;

public Server (String _ipAddress, int _port, String _logFileName, String _password)

{

ipAddress = IPAddress. Parse (_ipAddress);

port = _port;

logWriter = new LogWriter (_logFileName);

users = new List ();

connections = new List ();

password = _password;

}

public void Start ()

{

//УстанавливаСм Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ

IPEndPoint ipEndPoint = new IPEndPoint (ipAddress, port);

//Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ сокСт, привязываСм Π΅Π³ΠΎ ΠΊ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΠ΅

socket = new Socket (ipAddress.AddressFamily, SocketType. Stream, ProtocolType. Tcp);

socket.Bind (ipEndPoint);

socket.Listen (10);

//Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊ для ΠΏΡ€ΠΈΠ΅ΠΌΠ° соСдинСний ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²

mainThread = new Thread (MainThread);

mainThread.IsBackground = true;

mainThread.Start ();

// сообщаСм ΠΎΠ± ΡΡ‚ΠΎΠΌ Π»ΠΎΠ³Ρƒ

logWriter.WriteToLogFile («Π‘Π΅Ρ€Π²Π΅Ρ€ Π·Π°ΠΏΡƒΡ‰Π΅Π½. IP-адрСс: «+ ipAddress. ToString () +

" ΠŸΠΎΡ€Ρ‚: «+ port. ToString ());

}

public void Stop ()

{

//ΠŸΠΎΡΡ‹Π»Π°Π΅ΠΌ всСм сообщСния Ρ‡Ρ‚ΠΎ сСрвСр остановлСн

foreach (Connection connection in connections)

SendMessage (connection, Messages. ServerClose);

//УдаляСм соСдинСния

connections.Clear ();

//Π—Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ сокСт, Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊ

socket.Close ();

mainThread.Abort ();

// пишСм ΠΎΠ± ΡΡ‚ΠΎΠΌ Π² Π»ΠΎΠ³

logWriter.WriteToLogFile («Π‘Π΅Ρ€Π²Π΅Ρ€ остановлСн»);

}

private void MainThread ()

{

try

{

while (true)

{

//Π–Π΄Π΅ΠΌ соСдинСния

Socket connectionSocket = socket. Accept ();

//ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ соСдинСниС

Connection connection = new Connection ();

connection.socket = connectionSocket;

logWriter.WriteToLogFile («ΠΠΎΠ²ΠΎΠ΅ соСдинСниС. «+

connectionSocket.RemoteEndPoint.ToString ());

//Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊ соСдинСния

connection.thread = new Thread (ConnectionThread);

connection.thread.IsBackground = true;

connection.thread.Start (connection);

//ДобавляСм соСдинСниС Π² ΡΠΏΠΈΡΠΎΠΊ

connections.Add (connection);

}

}

catch (ThreadAbortException e)

{

}

catch (Exception e)

{

Stop ();

}

}

private void ConnectionThread (object param)

{

//ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π² ΠΏΠΎΡ‚ΠΎΠΊ — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ соСдинСния

Connection connection = (Connection)param;

try

{

while (true)

{

//Π§ΠΈΡ‚Π°Π΅ΠΌ Ρ‚ΠΈΠΏ сообщСния

byte messageType = SocketReader. ReadType (connection.socket);

//Π”Π΅Π»Π°Π΅ΠΌ Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚

switch (messageType)

{

case (byte)Messages.AuthorizationRequest:

{

if (!Authorization (connection))

return;

break;

}

case (byte)Messages.ConnectToClientRequest:

{

ConnectToClientRequest (connection);

break;

}

case (byte)Messages.ConnectToClientSuccess:

{

ConnectToClientSuccess (connection);

break;

}

case (byte)Messages.ConnectToClientFailed:

{

ConnectToClientFailed (connection);

break;

}

case (byte)Messages.DisconnectRequest:

{

DisconnectRequest (connection);

break;

}

case (byte)Messages.IQuit:

{

DisconnectUser (connection);

return;

}

catch (Exception e)

{

logWriter.WriteToLogFile («Π˜ΡΠΊΠ»Ρ‡Π΅Π½ΠΈΠ΅: «+ e. Message);

//MessageBox.Show («Exception: «+ e. Message);

}

finally

{

//DisconnectUser (connection);

}

}

//ΠšΠ»ΠΈΠ΅Π½Ρ‚ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ

private void ConnectToClientRequest (Connection connection)

{

User requestedUser = SocketReader. ReadUserRecord (connection.socket);

logWriter.WriteToLogFile («Π—апрос Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Сля «+

connection.userNickName + «ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ «+ requestedUser. nickName);

foreach (Connection _connection in connections)

{

if (_connection.userNickName == requestedUser. nickName)

{

SendMessage (_connection, Messages. ConnectToClientRequest);

//SocketWriter.WriteString (_connection.socket,

connection.userNickName);

SocketWriter.WriteUserRecord (_connection.socket,

connection.userNickName,

requestedUser.ipEndPoint.Address.ToString (),

requestedUser.ipEndPoint.Port);

return;

}

//ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΎΠ΄ΠΎΠ±Ρ€ΠΈΠ» ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

private void ConnectToClientSuccess (Connection connection)

{

User requestingUser = SocketReader. ReadUserRecord (connection.socket);

foreach (Connection _connection in connections)

{

if (_connection.userNickName == requestingUser. nickName)

{

SendMessage (_connection, Messages. ConnectToClientSuccess);

SocketWriter.WriteUserRecord (_connection.socket,

connection.userNickName,

requestingUser.ipEndPoint.Address.ToString (),

requestingUser.ipEndPoint.Port);

return;

}

//ΠšΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ ΠΎΠ΄ΠΎΠ±Ρ€ΠΈΠ» ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

private void ConnectToClientFailed (Connection connection)

{

String requestingUser = SocketReader. ReadString (connection.socket);

foreach (Connection _connection in connections)

{

if (_connection.userNickName == requestingUser)

{

SendMessage (_connection, Messages. ConnectToClientFailed);

return;

}

private void DisconnectRequest (Connection connection)

{

String requestingUser = SocketReader. ReadString (connection.socket);

logWriter.WriteToLogFile («Π—апрос Π½Π° ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Сля «+

connection.userNickName + «ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ «+ requestingUser);

foreach (Connection _connection in connections)

{

if (_connection.userNickName == requestingUser || _connection.userNickName

== connection. userNickName)

{

SendMessage (_connection, Messages. DisconnectRequest);

//return;

}

//ΠšΠ»ΠΈΠ΅Π½Ρ‚ прислал запрос Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ

private bool Authorization (Connection connection)

{

String userPassword = SocketReader. ReadString (connection.socket);

User user = SocketReader. ReadUserRecord (connection.socket);

logWriter.WriteToLogFile («ΠΠ²Ρ‚оризация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ «+ user. nickName);

//ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ

if (userPassword ≠ password)

{

SendMessage (connection, Messages. AuthorizationFailed);

SendMessage (connection, Messages. WrongPassword);

logWriter.WriteToLogFile («ΠΠ²Ρ‚оризация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ «+ user. nickName + «

Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½Π°. ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ.");

connections.Remove (connection);

return false;

}

//ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ

foreach (User _user in users)

{

if (_user.nickName == user. nickName)

{

SendMessage (connection, Messages. AuthorizationFailed);

SendMessage (connection, Messages. WrongName);

logWriter.WriteToLogFile («ΠΠ²Ρ‚оризация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ «+ user. nickName +

" Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½Π°. ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.");

connections.Remove (connection);

return false;

}

//Если всС ΡƒΠ΄Π°Ρ‡Π½ΠΎ, добавляСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

users.Add (user);

SendMessage (connection, Messages. AuthorizationSuccess);

logWriter.WriteToLogFile («ΠΠ²Ρ‚оризация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ «+ user. nickName + «

ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ");

connection.userNickName = user. nickName;

//ΠŸΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ список ΠΈΠΌΠ΅Π½

SocketWriter.WriteInt (connection.socket, connections. Count);

foreach (Connection _connection in connections)

{

SocketWriter.WriteString (connection.socket, _connection.userNickName);

}

//ΠŸΠΎΡΡ‹Π»Π°Π΅ΠΌ всСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Ρ‚Π΅Π»ΡΠΌ сообщСниС ΠΎΠ± Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

foreach (Connection _connection in connections)

{

if (connection ≠ _connection)

{

SendMessage (_connection, Messages. ClientConnected);

SocketWriter.WriteUserRecord (_connection.socket, user);

}

return true;

}

//ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

private void DisconnectUser (Connection connection)

{

//УдаляСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°

foreach (User user in users)

{

if (connection.userNickName == user. nickName)

{

users.Remove (user);

logWriter.WriteToLogFile («ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ «+ connection. userNickName + «

ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΡΡ");

break;

}

//ВсСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ отправляСм сообщСниС ΠΎΠ± ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

foreach (Connection _connection in connections)

{

if (_connection ≠ connection)

{

SendMessage (_connection, Messages. ClientDisconnected);

SocketWriter.WriteString (_connection.socket, connection. userNickName);

}

//connection.socket.Shutdown (SocketShutdown.Both);

connection.socket.Close ();

connections.Remove (connection);

}

private void SendMessage (Connection connection, Messages messageType)

{

SocketWriter.WriteType (connection.socket, (byte)messageType);

}

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ