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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Windows

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

ПослС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ клиСнтского прилоТСния ΠΊ ΡΠ΅Ρ€Π²Π΅Ρ€Ρƒ ΠΈ Π²ΠΎΠ΄Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… строк, сСрвСру отправляСтся ΠΊΠΎΠΌΠ°Π½Π΄Π° USER с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ПослС этого ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ€Π΅ΠΆΠΈΠΌ оТидания ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвСра. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ строка с ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠΌ сСрвСра ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² ΡΠΎΠΊΠ΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Ρ‚ΠΎ ΡΡ‚Π° строка сохраняСтся Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π±ΡƒΡ„Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния строк, содСрТащих… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Windows (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π€Π΅Π΄Π΅Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ агСнтство ΠΏΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ ΠŸΠ•ΠΠ—Π•ΠΠ‘ΠšΠ˜Π™ Π“ΠžΠ‘Π£Π”ΠΠ Π‘Π’Π’Π•ΠΠΠ«Π™ Π£ΠΠ˜Π’Π•Π Π‘Π˜Π’Π•Π’ Π˜Π½ΡΡ‚ΠΈΡ‚ΡƒΡ‚ систСм управлСния ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ бСзопасности ΠŸΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ записка ΠΊ ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ

«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Windows»

ПСнза 2007

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚

Π‘Π•Π’Π•Π’ΠžΠ™ ΠŸΠ ΠžΠ’ΠžΠšΠžΠ›, Π‘ΠžΠšΠ•Π’Π«, Π­Π›Π•ΠšΠ’Π ΠžΠΠΠΠ― ПОЧВА, ΠΠ£Π’Π•ΠΠ’Π˜Π€Π˜ΠšΠΠ¦Π˜Π―, Π‘Π•Π’Π•Π’ΠžΠ• ΠŸΠ ΠžΠ“Π ΠΠœΠœΠ˜Π ΠžΠ’ΠΠΠ˜Π•, ΠžΠŸΠ•Π ΠΠ¦Π˜ΠžΠΠΠΠ― Π‘Π˜Π‘Π’Π•ΠœΠ WINDOWS

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ исслСдования Π² ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ являСтся ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ уровня POP3. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для обСспСчСния доступа ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ сСти ΠΊ ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹ΠΌ сообщСниям, хранящимся Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π΅.

ЦСлью курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° являСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° прилоТСния, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° POP3. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Ρ€ΠΈ Π²ΠΈΠ΄Π° Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, запрос статистики элСктронных сообщСний Ρƒ ΡΠ΅Ρ€Π²Π΅Ρ€Π° ΠΈ Ρ€Π°Π·Ρ€Ρ‹Π² соСдинСния. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы WINDOWS. Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ использован язык программирования Π‘ΠΈ. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ графичСский интСрфСйс.

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ Π—Π°Π΄Π°Π½ΠΈΠ΅ Π½Π° ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

1. ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

1.1 ОписаниС класса pop3Socket

1.2 ОписаниС класса pop3ClientDlg

1.3 ΠŸΡ€ΠΎΡΡ‚Π°Ρ аутСнтификачия

1.4 APOP аутСнтификация

1.5 AUTH аутСнтификация

2. ОписаниС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

2.1 ΠŸΡ€ΠΎΡΡ‚Π°Ρ аутСнтификачия

2.2 APOP аутСнтификация

2.3 AUTH аутСнтификация

3. Руководство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Бписок источников ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ А. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅. Алгоритмы функционирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Post Office Protocol (POP) — ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» доставки ΠΏΠΎΡ‡Ρ‚Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΈΠ· ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ сСрвСра РОР. МногиС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΈ ΠΏΠΎΠ½ΡΡ‚ия ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° POP выглядят ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ SMTP. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ POP практичСски ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ SMTP, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡΡΡŒ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… дСталях. На Ρ€ΠΈΡ. 7 ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π° модСль ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ POP. Π‘Π΅Ρ€Π²Π΅Ρ€ POP находится ΠΌΠ΅ΠΆΠ΄Ρƒ Π°Π³Π΅Π½Ρ‚ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΌΠΈ ящиками.

Π’ Π½Π°ΡΡ‚оящСС врСмя ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π΅ вСрсии ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° POP — РОР2 ΠΈ Π ΠžΠ Π—, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ возмоТностями, ΠΎΠ΄Π½Π°ΠΊΠΎ нСсовмСстимыми Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ Π ΠžΠ 2 ΠΈ Π ΠžΠ Π— Ρ€Π°Π·Π½Ρ‹Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΡ€Ρ‚ΠΎΠ² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°. ΠœΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ отсутствуСт связь, аналогичная связи ΠΌΠ΅ΠΆΠ΄Ρƒ SMTP ΠΈ ESMTP. ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π ΠžΠ Π— Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ РОР2 — это ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ». РОР2 ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ RFC 937 (Post Office Protocol-Version 2, Butler, et al, 1985), a Π ΠžΠ Π— — Π² RFC 1225 (Post Office Protocol-Version 3, Rose, 1991). Π”Π°Π»Π΅Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎ рассмотрим POP Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ — Π ΠžΠ Π—. PΠžΠ Π— Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ спСцифики доставки ΠΏΠΎΡ‡Ρ‚Ρ‹ Π½Π° ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ для этого.

Π Π°Π½Π΅Π΅ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ сообщСния Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° сСтСй Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ»ΠΈΡΡŒ нСпосрСдствСнно ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. И Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ часто мСнял Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Π» нСскольким ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, сущСствовали ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π’ Π½Π°ΡˆΠΈ Π΄Π½ΠΈ общСпринята доставка сообщСния Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π° Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ ящики ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ сСрвСра ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ круглосуточно Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ (Π²ΠΊΠ»ΡŽΡ‡Π΅Π½).

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° Π ΠžΠ Π— обСспСчиваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΡΠ²ΠΎΠ΅ΠΌΡƒ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠΌΡƒ сСрвСру ΠΈ ΠΈΠ·ΡŠΡΡ‚ΡŒ Π½Π°ΠΊΠΎΠΏΠΈΠ²ΡˆΡƒΡŽΡΡ для Π½Π΅Π³ΠΎ ΠΏΠΎΡ‡Ρ‚Ρƒ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π ΠžΠ -сСрвСру ΠΈΠ· Π»ΡŽΠ±ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ доступа ΠΊ Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚. ΠŸΡ€ΠΈ этом ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ Π°Π³Π΅Π½Ρ‚ (UA), Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ Π ΠžΠ Π—, ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΅Π³ΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со ΡΠ²ΠΎΠΈΠΌ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΌ сСрвСром. Π˜Ρ‚Π°ΠΊ, Π²ΠΎ Π³Π»Π°Π²Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ POP находится ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠΉ систСмы (сСрвСра). ΠŸΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½Π΅ΠΌ Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ сообщСния Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ POP, Π° ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ся ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ SMTP. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°Π³Π΅Π½Ρ‚Π°-интСрфСйса ΠΊ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠΉ систСмС — доставки (POP) ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ (SMTP). Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° Π ΠžΠ Π— Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ " Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Π³Π΅Π½Ρ‚Ρ‹" (split UA). ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°Π³Π΅Π½Ρ‚ΠΎΠ² ΠΊΡ€Π°Ρ‚ΠΊΠΎ обсуТдаСтся Π² ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π ΠžΠ Π—.

1. Π’ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ Π ΠžΠ Π— ΠΎΠ³ΠΎΠ²ΠΎΡ€Π΅Π½Ρ‹ Ρ‚Ρ€ΠΈ стадии процСсса получСния ΠΏΠΎΡ‡Ρ‚Ρ‹: авторизация, транзакция ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ сСрвСр ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π ΠžΠ Π— установили соСдинСниС, начинаСтся стадия Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ. На ΡΡ‚Π°Π΄ΠΈΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ сСбя для сСрвСра. Если авторизация ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, сСрвСр ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ся стадия Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π’ Π½Π΅ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π»ΠΈΠ±ΠΎ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρƒ ΡΠ΅Ρ€Π²Π΅Ρ€Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, список ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… сообщСний), Π»ΠΈΠ±ΠΎ просит Π΅Π³ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ дСйствиС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹Π΄Π°Ρ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ΅ сообщСниС. На ΡΡ‚Π°Π΄ΠΈΠΈ обновлСния сСанс связи заканчиваСтся.

1. ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π’ Ρ…ΠΎΠ΄Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π°Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ клиСнтского прилоТСния, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ pop3. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° Π² ΡΡ€Π΅Π΄Π΅ Microsoft Visual Studio 2005. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ прилоТСния ΠΈΠΌΠ΅Π΅Ρ‚ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π’ Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прилоТСния использована Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° классов MFC. Π’ Ρ‡Π°ΡΡ‚ности Π±Ρ‹Π» использован Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс CSocket, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ классом ΠΎΡ‚ CsynkSocket — класс синхронных сокСтов. ИспользованиС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° синхронных сокСтов позволяСт ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ упорядочСнноС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ прилоТСния, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² для синхронизации. Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ дСйствия Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ.

Π’ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π±Ρ‹Π» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ класс pop3Socket, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся наслСдником класса CSocket.

Π’ Ρ…ΠΎΠ΄Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ прилоТСния использовался класс md5Capi, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MD5 с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ wincrypt. h

1.1 ОписаниС класса pop3Socket

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ класс ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ структуру:

class pop3Socket: public CSocket

{

public:

pop3Socket (Cpop3ClientDlg* Dlg);

virtual ~pop3Socket ();

virtual void OnReceive (int nErrorCode);

virtual void OnClose (int nErrorCode);

virtual void OnSend (int nErrorCode);

char fl;

Cpop3ClientDlg* m_Dlg;

};

Π’ ΡΠ΅ΠΊΡ†ΠΈΠΈ public класса находятся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

pop3Socket (Cpop3ClientDlg* Dlg) — конструктор класса. Π”Π°Π½Π½Ρ‹ΠΉ конструктор ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½ Π² ΡΠΎΠΎΡ‚вСтствии с Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ создаваСмого сокСта ΠΎΡ‚ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.

virtual ~pop3Socket () — Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ дСструктор класса;

virtual void OnReceive (int nErrorCode) — Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ сокСтом Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ сообщСния;

virtual void OnClose (int nErrorCode) — Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΏΡ€ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ сокСта;

virtual void OnSend (int nErrorCode) — Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· сокСт;

char fl — свойство класса, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвСра.

Cpop3ClientDlg* m_Dlg — свойство — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Ρ‚ΠΈΠΏΠ° Cpop3ClientDlg (Π³Π»Π°Π²Π½ΠΎΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹).

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ pop3Socket. h ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

РСализация ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² Ρ„Π°ΠΉΠ»Π΅ pop3Socket. срр ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π’ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½ конструктор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ настраивал ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ m_Dlg Π½Π° Π°Π΄Ρ€Π΅Ρ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ происходит Π²Ρ‹Π·ΠΎΠ² конструктора.

1.2 ОписаниС класса pop3ClientDlg

Класс pop3ClientDlg являСтся наслСдником класса CDialog.

Класс ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ структуру:

class Cpop3ClientDlg: public CDialog

{

public:

Cpop3ClientDlg (CWnd* pParent = NULL); // standard constructor

// Dialog Data

enum { IDD = IDD_POP3CLIENT_DIALOG };

protected:

virtual void DoDataExchange (CDataExchange* pDX); // DDX/DDV support

// Implementation

protected:

HICON m_hIcon;

// Generated message map functions

virtual BOOL OnInitDialog ();

afx_msg void OnSysCommand (UINT nID, LPARAM lParam);

afx_msg void OnPaint ();

afx_msg HCURSOR OnQueryDragIcon ();

DECLARE_MESSAGE_MAP ()

public:

CListBox Protocol;

public:

afx_msg void OnBnClickedButton1();

public:

CButton connect_btn;

public:

CButton disconnect_btn;

public:

afx_msg void OnBnClickedButton2();

public:

afx_msg void OnBnClickedRadio1();

public:

bool simple;

public:

bool apop;

public:

bool auth;

public:

afx_msg void OnBnClickedRadio2();

public:

afx_msg void OnBnClickedRadio3();

};

Cpop3ClientDlg (CWnd* pParent = NULL) — стандартный конструктор, наслСдуСмый ΠΎΡ‚ ΠΊΠ»Π°ΡΡΠ° CDialog;

virtual void DoDataExchange (CDataExchange* pDX) — ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ DDX.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ сообщСния:

virtual BOOL OnInitDialog (), afx_msg void OnSysCommand (UINT nID, LPARAM lParam), afx_msg void OnPaint (), afx_msg HCURSOR OnQueryDragIcon (), DECLARE_MESSAGE_MAP ().

ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ класса Π±Ρ‹Π»ΠΈ созданы ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΡΠ²ΠΎΠΉΡ‚сва:

CListBox Protocol — ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ управлСния Ρ‚ΠΈΠΏΠ° ClistBox, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ производится Π²Ρ‹Π²ΠΎΠ΄ строк ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΎΠ±ΠΌΠ΅Π½Π° ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвСром ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ.

CButton connect_btn — пСрСмСнная, связанная с ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ установки соСдинСния с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ

CButton disconnect_btn — пСрСмСнная, связанная с ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉΡ€Π°Π·Ρ€Ρ‹Π²Π° соСдинСния с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ

bool simple, apop, auth — логичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Они ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «true» Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π²Ρ‹Π±Ρ€Π°Π½ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

afx_msg void OnBnClickedButton1() — ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈΠ½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Button1(ΠΊΠ½ΠΎΠΏΠΊΠ° соСдинСния).

afx_msg void OnBnClickedButton2() — ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈΠ½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Button2(ΠΊΠ½ΠΎΠΏΠΊΠ° Ρ€Π°Π·Ρ€Ρ‹Π²Π° соСдинСния).

afx_msg void OnBnClickedRadio1() — ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ RadioButton1 — простая аутСнтификация.

afx_msg void OnBnClickedRadio2() — ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ RadioButton1 — APOP аутСнтификация.

afx_msg void OnBnClickedRadio3() — ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ RadioButton1 — AUTH аутСнтификация.

ОписаниС класса pop3ClientDlg содСрТится Π² Ρ„Π°ΠΉΠ»Π΅ pop3ClientDlg.h. РСализация класса содСрТится Π² Ρ„Π°ΠΉΠ»Π΅ pop3ClientDlg.cpp.

Π’ Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±Ρ‹Π»ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса: ΠΌΠ΅Ρ‚ΠΎΠ΄ BOOL Cpop3ClientDlg: OnInitDialog () — Π² Π½Π΅Π³ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° инициализация свойств класса:

this->simple=false;

this->apop=false;

this->auth=false;

Основная Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° содСрТится Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ void Cpop3ClientDlg: OnBnClickedButton1() — ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вызываСтся ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Button1.

1.2 ОписаниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° void Cpop3ClientDlg: OnBnClickedButton1()

ΠœΠ΅Ρ‚ΠΎΠ΄ содСрТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅:

pop3Socket *pSocket — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса pop3Socket;

Cstring ip — строка Ρ‚ΠΈΠΏΠ° Cstring, прСдназначСнная для зранСния ip Π°Π΄Ρ€Π΅ΡΠ° сСрвСра

int port — цСлочислСнная пСрСмСнная для хранСния Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΡ€Ρ‚Π° сСрвСра;

CString messtr — строка для хранСния сформированного сообщСния ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

CString pswd — строка для хранСния ΠΏΠ°Ρ€ΠΎΠ»ΡŒΡ ΠΏΡ€ΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ;

CString login — строка для хранСния ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ;

char * buf = new char — массив для хранСния принятов строки ΠΎΡ‚ ΡΠ΅Ρ€Π²Π΅Ρ€Π°;

char fl=0 — пСрСмСнная для Π°Π½Π°Π»ΠΈΠ·Π° ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвСра;

char * stamp = new char[64] - строка для хранСния Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΈ сСрвСра.

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

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

GetDlgItemText (IDC_EDIT1,ip); - ΠΈΠ· ΡΡ‚Ρ€ΠΎΠΊΠΈ Π²Π²ΠΎΠ΄Π° Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ip

GetDlgItemText (IDC_EDIT2,login); - ΠΈΠ· ΡΡ‚Ρ€ΠΎΠΊΠΈ Π²Π²ΠΎΠ΄Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ login;

port = atoi (login); - с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ atoi строка login прСобразуСтся Π² Ρ†Π΅Π»ΠΎΡ‡ΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ‚ся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ port.

GetDlgItemText (IDC_EDIT3,login); - ΠΈΠ· ΡΡ‚Ρ€ΠΎΠΊΠΈ Π²Π²ΠΎΠ΄Π° ΠΈΠΌΠ΅Π½ΠΈ Π² ΡΡ‚Ρ€ΠΎΠΊΡƒ login

GetDlgItemText (IDC_EDIT4,pswd); - ΠΈΠ· ΡΡ‚Ρ€ΠΎΠΊΠΈ Π²Π²ΠΎΠ΄Π° пароля Π² ΡΡ‚Ρ€ΠΎΠΊΡƒ pswd.

ПослС этого производится ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ Ρ‚ΠΈΠΏ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Ссли Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ‚ΠΈΠΏΠΎΠ² Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π²Ρ‹Π±Ρ€Π°Π½ Π½Π΅ Π±Ρ‹Π», Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ Π²Ρ‹Π·ΠΎΠ² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° с ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅.

Если ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€ΠΎΡ‘Π΄Π΅Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, происходит созданиС сокСта pSocket=new pop3Socket (this), ΠΈ Π΅Π³ΠΎ инициализация pSocket->Create ().

Π”Π°Π»Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ осущСствляСтся Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Для этого производится Π°Π½Π°Π»ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… simple, apop ΠΈ auth.

1.3 ΠŸΡ€ΠΎΡΡ‚Π°Ρ аутСнтификачия

1. ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΠ΅Ρ‚ΡΡ соСдинСниС с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ° сокСта pSocet: pSocket->Connect (ip, port), Π³Π΄Π΅ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ строка, содСрТащая адрСс сСрвСра ΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π° Если соСдинСниС Π½Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ΠΎ ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ся Π²Ρ‹Π·ΠΎΠ² ΠΎΠΊΠ½Π° ошибки ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

2. ОТиданиС ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ строки ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚ ΡΠ΅Ρ€Π²Π΅Ρ€Π° Π² ΠΌΠ°ΡΡΠΈΠ² ΠΈ buf с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° сокСта pSocet->Receive (buf, 0). Π’ ΡΠ»ΡƒΡ‡Π°Π΅, Ссли Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π±Π°ΠΉΡ‚. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±Π°ΠΉΡ‚, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΡΠ΅Ρ€Π²Π΅Ρ€Π° присваиваСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ int recived.

3. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡΡ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° строки messtr. Format () строки messtr messtr. Format («S: %s», buf). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ добавляСт Π² Π½Π°Ρ‡Π°Π»ΠΎ строки символ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ «S: «ΠΈ Π΄Π°Π»Π΅Π΅ содСримоС массива buf.

4. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡΡ Ρ‹Π²ΠΎΠ΄ строки messtr Π² ListBox с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Protocol->Add (messtr).

5. Π’ Ρ†ΠΈΠΊΠ»Π΅ ΠΎΡ‚ 0 Π΄ΠΎ 127 элСмСнта производится ΠΎΠ±Π½ΡƒΠ»Π΅Π½ΠΈΠ΅ массива buf

6. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° EnableWindow ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° disconect_btn с true Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° производится установка ΠΎΠΊΠ½Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ Ρ€Π°Π·Ρ€Ρ‹Π²Π° соСдинСния с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ Π² Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ сотояниС.

7. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° EnableWindow ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° conect_btn с false Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° производится установка ΠΎΠΊΠ½Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ соСдинСния с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ Π² Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ стостояниС.

8. Если ΠΎΡ‚ ΡΠ΅Ρ€Π²Π΅Ρ€Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ (провСряСтся ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ fl: Ссли ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «+», Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π΅Π½, Ссли «-», Ρ‚ΠΎ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»Π΅Π½), Ρ‚ΠΎΠ³Π΄Π° производится ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Π΅ΠΌΡƒ строки с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ USER:

«pSocket->Send («USER «+ login + «nr», strlen («USER «)+strlen (login) + strlen («nr»), 1)», Ссли Π½Π΅Ρ‚, Ρ‚ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚вляСтся ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ 14

9. ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ 2−7

10. ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏ 8−9 (с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ PASS: pSocket->Send («PASS «+ pswd + «nr», strlen («PASS «)+strlen (pswd)+strlen («nr»), 0))

11. ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏ 8−9 с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ STAT:

pSocket->Send («STATnr», strlen («STATnr»), 0)

12. ΠŸΠΎΡΠ»Π°Ρ‚ΡŒ сСрвСру ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ QUIT:

pSocket->Send («QUITnr», strlen («QUITnr»), 0)

1.4 APOP аутСнтификация

1. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡΡ объявлСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° md5Capi класса Cmd5Capi. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ осущСствляСт вычислСниС Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MD5. ОбъявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… — CString out, in, test; int start, end;

2. Если соСдинСниС с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ установлСно Ρ‚ΠΎ 3, ΠΈΠ½Ρ‡Π°Π΅ Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠΊΠ½Π° ошибки:

3. Установка ΠΎΠΊΠ½Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ соСдинСния с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ Π² Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ сотояниС

4. Устанвка ΠΎΠΊΠ½Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ Ρ€Π°Π·Ρ€Ρ‹Π²Π° соСдинСния Π² Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ стостояниС

5. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ строки ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚ ΡΠ΅Ρ€Π²Π΅Ρ€Π° Π² ΠΌΠ°ΡΡΠΈΠ² ΠΈ buf. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±Π°ΠΉΡ‚, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΡΠ΅Ρ€Π²Π΅Ρ€Π° присваиваСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ int recived.

6. Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° строки messtr. Forma () строки messtr messtr. Format («S: %s», buf)

7. Поиск Π² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΎΡ‚ ΡΠ΅Ρ€Π²Π΅Ρ€Π° строки привСтствия ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΈ.

8. Π’Ρ‹Π²ΠΎΠ΄ строки messtr Π² ListBox.

9. ΠžΠ±Π½ΡƒΠ»Π΅Π½ΠΈΠ΅ массива buf

10. Если ΠΎΡ‚ ΡΠ΅Ρ€Π²Π΅Ρ€Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚, Ρ‚ΠΎ 11, ΠΈΠ½Π°Ρ‡Π΅ 14

11. ВычислСниС MD5 Ρ…ΡΡˆΠ° ΠΎΡ‚ ΡΡ‚Ρ€ΠΎΠΊΠΈ Π²ΠΈΠ΄Π°: ΠΌΠ΅Ρ‚ΠΊΠ°_сСрвСра+ΠΏΠ°Ρ€ΠΎΠ»ΡŒ

12. ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сСрвСру ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ APOP:

out="APOP «+ login + „“ + md5Capi. Digest (in)+» nr" ;

pSocket->Send (out, out. GetLength (), 0)

13. Если ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚, Ρ‚ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сСрвСру ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ STAT, ΠΈΠ½Π°Ρ‡Π΅ 14

14. ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сСрвСру ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ QUIT.

1.5 AUTH аутСнтификация

1. Если соСдинСниС с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ установлСно Ρ‚ΠΎ 2, ΠΈΠ½Ρ‡Π°Π΅ Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠΊΠ½Π° ошибки:

2. Установка ΠΎΠΊΠ½Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ соСдинСния с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ Π² Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ сотояниС

3. Устанвка ΠΎΠΊΠ½Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ Ρ€Π°Π·Ρ€Ρ‹Π²Π° соСдинСния Π² Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ стостояниС

4. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ строки ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚ ΡΠ΅Ρ€Π²Π΅Ρ€Π° Π² ΠΌΠ°ΡΡΠΈΠ² ΠΈ buf. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±Π°ΠΉΡ‚, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΡΠ΅Ρ€Π²Π΅Ρ€Π° присваиваСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ int recived.

5. Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° строки messtr. Forma () строки messtr messtr. Format («S: %s», buf)

6. Поиск Π² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΎΡ‚ ΡΠ΅Ρ€Π²Π΅Ρ€Π° строки привСтствия ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΈ.

7. Π’Ρ‹Π²ΠΎΠ΄ строки messtr Π² ListBox.

8. ΠžΠ±Π½ΡƒΠ»Π΅Π½ΠΈΠ΅ массива buf

9. Если ΠΎΡ‚ ΡΠ΅Ρ€Π²Π΅Ρ€Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚, Ρ‚ΠΎ 11, ΠΈΠ½Π°Ρ‡Π΅ 14

10. ВычислСниС MD5 Ρ…ΡΡˆΠ° ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΊΠΈ сСрвСра с ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΊΠ»ΡŽΡ‡Π°.

11. ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сСрвСру ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ APOP:

out="AUTH «+ login + „“ + md5Capi. Digest (in)+» nr" ;

pSocket->Send (out, out. GetLength (), 0)

12. Если ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚, Ρ‚ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сСрвСру ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ STAT, ΠΈΠ½Π°Ρ‡Π΅ 14

13. ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сСрвСру ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ QUIT.

2. ОписаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ ΡΠ΅Ρ€Π²Π΅Ρ€Ρƒ. Если соСдинСниС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСно, Ρ‚ΠΎ Π²Ρ‹Π΄Π°Π΅Ρ‚ся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ сообщСниС ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. Если соСдинСниС с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ установлСно, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ся Π²Ρ‹Π±ΠΎΡ€ Π²Π΅Ρ‚ΠΊΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Она выбираСтся Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‚ΠΈΠΏΠ° Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Π’ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΡΡ‚ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСт ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Ρ€ΠΈ Π²ΠΈΠ΄Π° Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ: простая аутСнтификация, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΈ ΠΈΠΌΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ°Π½Π°Π»Ρƒ связи Π² Π½Π΅Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅; аутСнтификация с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±Π΅Π·ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MD5, аутСнтификация с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MD5. Π’ ΡΠ»ΡƒΡ‡Π°Π΅, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π²Ρ‹Π±Ρ€Π°Π½ Ρ‚ΠΈΠΏ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ — простая аутСнтификация, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ся ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этого Ρ‚ΠΈΠΏΠ° Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Π’ ΡΠ»ΡƒΡ‡Π°Π΅, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π²Ρ‹Π±Ρ€Π°Π½ Ρ‚ΠΈΠΏ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ MD5, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ся Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ строки, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для вычислСния Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ся ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°ΠΌ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ Π΄Π°Π½Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

2.1 ΠŸΡ€ΠΎΡΡ‚Π°Ρ аутСнтификация

ПослС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ клиСнтского прилоТСния ΠΊ ΡΠ΅Ρ€Π²Π΅Ρ€Ρƒ ΠΈ Π²ΠΎΠ΄Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… строк, сСрвСру отправляСтся ΠΊΠΎΠΌΠ°Π½Π΄Π° USER с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ПослС этого ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ€Π΅ΠΆΠΈΠΌ оТидания ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвСра. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ строка с ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠΌ сСрвСра ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² ΡΠΎΠΊΠ΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Ρ‚ΠΎ ΡΡ‚Π° строка сохраняСтся Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π±ΡƒΡ„Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния строк, содСрТащих ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°. ПослС этого производится ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎΠΉ строки сСрвСра. Если строка ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвСра содСрТит Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ подстрокуERR, Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ ящика с Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π΅ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΠ΅Ρ‚. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС сСрвСру отправляСтся ΠΊΠΎΠΌΠ°Π½Π΄Π° QUIT ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ся Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹. Если ΠΆΠ΅ строка начинаСтся с +ОК, Ρ‚ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик с Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ сущСствуСт Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π΅ ΠΈ ΡΠ΅Ρ€Π²Π΅Ρ€ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ пароля для доступа ΠΊ Π½Π΅ΠΌΡƒ. Π”Π°Π»Π΅Π΅ производится ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сСрвСру строки с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ PASS, содСрТащСй ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ для доступа ΠΊ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠΌΡƒ ящику. Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠΏΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ€Π΅ΠΆΠΈΠΌ оТидания ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвСра ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ся ΠΏΡ€ΠΈΠ΅ΠΌ ΠΈ Π°Π½Π°Π»ΠΈΠ· ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΎΡ‚ Π½Π΅Π³ΠΎ строки. Если строка содСрТит Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ подстроку +ОК, Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π΅Π½, ΠΈ ΡΠ΅Ρ€Π²Π΅Ρ€ ΠΏΠ΅Ρ€Π΅ΡˆΠ΅Π» Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ Ρ„Π°Π·Ρƒ. Если строка-ΠΎΡ‚Π²Π΅Ρ‚ сСрвСра содСрТит подстрокуERR, Ρ‚ΠΎ ΡΠ΅Ρ€Π²Π΅Ρ€Ρƒ отправляСтся ΠΊΠΎΠΌΠ°Π½Π΄Π° QUIT ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ся Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹.

Если аутСнтификация ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ Ρ„Π°Π·Ρƒ. На ΡΡ‚ΠΎΠΉ Ρ„Π°Π·Π΅ функционирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ сСрвСру ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ STAT — для Π²Ρ‹Π²ΠΎΠ΄Π° статистики ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° QUIT — для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ соСдинСния с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ.

2.2 APOP аутСнтификация

Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ Ρ‚ΠΈΠΏ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±Π΅ΡΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MD5, Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹. Π’ Π΄Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ строка, которая Π±Ρ‹Π»Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ части Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. На Π²Ρ‚ΠΎΡ€ΠΎΠΌ шагС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ apop производится склСиваниС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ строки ΠΌΠ΅Ρ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ сСрвСра с ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ПослС этого производится вычислСниС MD5 Ρ…ΡΡˆΠ° ΠΎΡ‚ ΡΡ‚ΠΎΠΉ строки. ПослС этого формируСтся строка для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ APOP. Π­Ρ‚Π° строка ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄: «APOP имя_ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Ρ…ΡΡˆ-функция». ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ эта строка сформирована, ΠΎΠ½Π° отправляСтся сСрвСру. ПослС этого ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΡΠΎΡΡ‚ояниС оТидания ΠΎΡ‚Π²Π΅Ρ‚Π½Π° ΠΎΡ‚ ΡΠ΅Ρ€Π²Π΅Ρ€Π°. ПослС получСния строки с ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠΌ сСрвСра производится Π΅Π΅ Ρ€Π°Π·Π±ΠΎΡ€. Если строка содСрТит Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ подстрокуERR, Ρ‚ΠΎ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π° ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ся ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сСрвСру строки с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ QUIT ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Если строка содСрТит Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ подстроку +OK, Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ аутСнтификация ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ Ρ„Π°Π·Ρƒ. Π’ ΡΡ‚ΠΎΠΉ Ρ„Π°Π·Π΅ сСрвСру отсылаСтся ΠΊΠΎΠΌΠ°Π½Π΄Π° STAT ΠΈ ΠΏΠΎΡΠ»Π΅ этого ΠΊΠΎΠΌΠ°Π½Π΄Π° QUIT. ПослС этого производится Ρ€Π°Π·Ρ€Ρ‹Π² связи с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

2.3 AUTH аутСнтификация (CRAM-MD5)

Π’Ρ‹Π·ΠΎΠ² Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ осущСствляСтся Π² ΡΠ»ΡƒΡ‡Π°Π΅, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ Π²ΠΈΠ΄ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MD5. Алгоритм функционирования Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ практичСски ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ совпадаСт с Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ, описным Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡƒΠ½ΠΊΡ‚Π΅., Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ:

— ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ся вычислСниС Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MD5 ΠΎΡ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΈ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΎΡ‚ ΡΠ΅Ρ€Π²Π΅Ρ€Π° мс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ пароля, Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

— Π‘Π΅Ρ€Π²Π΅Ρ€Ρƒ отправляСтся строка Π²ΠΈΠ΄Π° «AUTH имя_ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Ρ…ΡΡˆ-функция»

3. Руководство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

Разработанная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ графичСский интСрфСйс Рис. 1 Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ПослС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ адрСс сСрвСра ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ½ ΠΎΠ±Ρ€Π°Ρ‰Π°Π΅Ρ‚ся, Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°, имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, послС Ρ‡Π΅Π³ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π²ΠΈΠ΄ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ:

— ΠΏΡ€ΠΎΡΡ‚ая

— APOP

— AUTH

ПослС Ρ‡Π΅Π³ΠΎ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ «ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ». ΠŸΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ «ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ».

Для Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΆΠ°Ρ‚ΡŒ крСстик ΠΈΠ»ΠΈ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ «Π’Ρ‹Ρ…ΠΎΠ΄».

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

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π°Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° POP3. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, запроса статистики ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ соСдинСния. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ программирования Π‘ΠΈ Π΄Π»Ρ ΠžΠ‘ WINDOWS ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ графичСский интСрфСйс.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, всС трСбования задания Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π² ΠΏΠΎΠ»Π½ΠΎΠΌ объСмС.

Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… источников

www.rsdn.ru

www.codenet.ru

www.firststeps.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ А. Алгоритм функционирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠŸΡ€ΠΎΡΡ‚Π°Ρ аутСнтификация АутСнтификация с Π±Π΅ΡΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. Команда APOP

АутСнтификация с ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ CRAM-MD5. AUTH.

ΠžΠ±Ρ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ

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