Π”ΠΈΠΏΠ»ΠΎΠΌΡ‹, курсовыС, Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚Ρ‹, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅...
Брочная ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² ΡƒΡ‡Ρ‘Π±Π΅

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±ΠΌΠ΅Π½Π° тСкстовыми сообщСниями Ρ‡Π΅Ρ€Π΅Π· Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ

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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния для Windows. Visual Studio 2008 позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ основныС Windows API, Microsoft Foundation Classes, NET Framework ΠΈΠ»ΠΈ любой SDK. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° инструмСнтов ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ систСмныС слуТбы, Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ устройств, ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, ΠΈΠ³Ρ€Ρ‹, Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½ΠΎΠ΅ ПО, прилоТСния для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ бизнСса ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. НСзависимо ΠΎΡ‚ Ρ‚ΠΈΠΏΠ°… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±ΠΌΠ΅Π½Π° тСкстовыми сообщСниями Ρ‡Π΅Ρ€Π΅Π· Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

1. Анализ исходных Π΄Π°Π½Π½Ρ‹Ρ…

2. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ комплСкса

3. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ Ρ‚СстированиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ комплСкса Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Бписок использованной Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ

ЦСль курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: созданиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±ΠΌΠ΅Π½Π° тСкстовыми сообщСниями Ρ‡Π΅Ρ€Π΅Π· Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ тСкстовых сообщСний ΠΏΠΎ ΡΠ΅Ρ‚ΠΈ. АрхитСктура ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² ΡΠ΅Π±Ρ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΡƒΡŽ ΠΈ ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΎΠ±ΠΌΠ΅Π½ тСкстовыми сообщСниями, Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² локальной сСти Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° копия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π½Π°Π»Π°, ΠΊΠΎΠΌΡƒ ΠΈ ΠΊΡƒΠ΄Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ сообщСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ IP адрСс ΠΈ ΠΏΠΎΡ€Ρ‚.

ΠŸΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ тСкстовых сообщСний Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹: Π²Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой сСрвСр Π»ΠΈΠ±ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ (ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ ΡƒΠΆΠ΅ созданному сСрвСру Π² ΡΠ΅Ρ‚ΠΈ), Π΄Π°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ввСсти ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, IP-адрСс ΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ПослС выполнСния настроСк всСх ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΏΠΎΠ»Π΅ «ΠΎΠΊΠ½Π° тСкстовых сообщСний» Π²Π²ΠΎΠ΄ΠΈΠΌ Π½ΡƒΠΆΠ½ΡƒΡŽ Π½Π°ΠΌ Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ ΠΎΡ‚правляСм всСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‡Π°Ρ‚Π° (ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° осущСствляСтся ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚0=>сСрвСр=>ΠΊΠ»ΠΈΠ΅Π½Ρ‚1 =>ΠΊΠ»ΠΈΠ΅Π½Ρ‚2=>ΠΊΠ»ΠΈΠ΅Π½Ρ‚ n). Окно «Ρ‡Π°Ρ‚Π° сообщСний» Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ всю пСрСписку тСкстовыми сообщСниями всСх ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², находящихся Π½Π° Π΄Π°Π½Π½ΠΎΠΌ сСрвСрС. Π’Π΅ΡΡŒ Π°Ρ€Ρ…ΠΈΠ² сообщСний ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΏΡƒΡ‚Ρ‘ΠΌ наТатия Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ «ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π»ΠΎΠ³ΠΈ», Π³Π΄Π΅ содСрТится история всСй пСрСписки ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’ Π΄Π°Π½Π½ΠΎΠΌ Π°Ρ€Ρ…ΠΈΠ²Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ информация ΠΎ ΠΈΠΌΠ΅Π½ΠΈ получатСля (отправитСля) сообщСний, нСпосрСдствСнно само сообщСниС ΠΈ Π²Ρ€Π΅ΠΌΡ ΠΈ Π΄Π°Ρ‚Π° ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ (получСния) сообщСния.

1. Анализ исходных Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ срСду Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Microsoft Visual Studio 2008 VΠ‘++.

Π’Ρ‹Π±ΠΎΡ€ Π΄Π°Π½Π½ΠΎΠΉ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ рядом прСимущСств:

1) Π‘ΠΎΠ»Π΅Π΅ быстроС написаниС ΠΊΠΎΠ΄Π°. Основа любого ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ — это ΠΊΠΎΠ΄, написанный Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ. Visual Studio 2008 ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ быстрСС, поддСрТивая мноТСство срСдств ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ‚Ρ€ΡƒΠ΄Π°: Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ IntelliSense®, Π°Π²Ρ‚ΠΎΠ·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², автоматичСскоС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚ΠΎΠΌ синтаксичСских конструкций, поиск ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ синтаксиса ΠΈ Ρ‚ΠΈΠΏΠΎΠ², ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ (Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³) ΠΊΠΎΠ΄Π°, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΊΠΎΠ΄Π° ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

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

3) Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния для Windows. Visual Studio 2008 позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ основныС Windows API, Microsoft Foundation Classes, NET Framework ΠΈΠ»ΠΈ любой SDK. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° инструмСнтов ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ систСмныС слуТбы, Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ устройств, ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, ΠΈΠ³Ρ€Ρ‹, Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½ΠΎΠ΅ ПО, прилоТСния для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ бизнСса ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. НСзависимо ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ПО, Visual Studio ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ интСрфСйсы, ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ прилоТСния ΠΈ Π±ΠΈΠ·Π½Π΅Ρ-процСссы ΠΈ ΡƒΡΠΊΠΎΡ€ΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ.

4) Microsoft Visual Studio 2008 ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΠΌ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌ, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°, Windows, Microsoft Office ΠΈ Windows Mobile, ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ созданиС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ Тизнь ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹. НСзависимо ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Visual Studio 2008 обСспСчиваСт ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π°ΠΆΠ½Ρ‹Ρ… бизнСс-Π·Π°Π΄Π°Ρ‡Π°Ρ…. Π’Π°ΠΊΠΆΠ΅ Π² Visual Studio 2008 поддСрТиваСтся ΠΎΠ±ΡˆΠΈΡ€Π½Π°Ρ экосистСма, благодаря ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ всСгда ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€ΠΎΠ², ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‡Π»Π΅Π½ΠΎΠ² сообщСства, способных ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ Π²Π΅Π»ΠΈΠΊΠΎΠ»Π΅ΠΏΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния.

5) Visual Studio 2008 Standard Edition ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠŸΠž для Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° ΠΈ Π΄Π»Ρ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Windows, Π² Ρ‚ΠΎΠΌ числС для Windows Vista® ΠΈ Windows Server® 2008. Visual Studio 2008 Professional Edition ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠŸΠž для Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°, Windows, Microsoft Office ΠΈ Windows Mobile.

2. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ комплСкса

ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±ΠΌΠ΅Π½ сообщСниС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠŸΡ€ΠΈ создании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ комплСкса, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ элСмСнты управлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. Π”Π°Π½Π½Ρ‹ΠΌΠΈ элСмСнтами ΡΠ²Π»ΡΡŽΡ‚ΡΡ: ΠΊΠ½ΠΎΠΏΠΊΠΈ — создания сСрвСра (Ссли сСрвСр Π½Π΅ ΡΠΎΠ·Π΄Π°Π½), ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊ ΡΠ΅Ρ€Π²Π΅Ρ€Ρƒ, Π²Ρ‹Ρ…ΠΎΠ΄ Π»ΠΈΠ±ΠΎ остановка Ρ‡Π°Ρ‚Π°, ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Π²Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ сообщСния, отобраТСния Π°Ρ€Ρ…ΠΈΠ²Π° сообщСний; Ρ‚Π°ΠΊ ΠΆΠ΅ области Π²Π²ΠΎΠ΄Π° ΠΈΠΌΠ΅Π½ΠΈ (nick name) ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π²Π²ΠΎΠ΄ IP-адрСса ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΡ€Ρ‚Π°, ΠΎΠΊΠ½ΠΎ Π²Π²ΠΎΠ΄Π° сообщСний, ΠΎΠΊΠ½ΠΎ отобраТСния ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… сообщСний.

На ΡΡ‚ΠΎΡ€ΠΎΠ½Π΅ сСрвСра вСсь ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ комплСкс прСдставляСт собой:

1) ΠŸΡ€ΠΈ создании сСрвСра Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ввСсти имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ QueryName — запрос ΠΈΠΌΠ΅Π½ΠΈ Ρ‡Π°Ρ‚ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ созданиСм сокСта);

2) Запуск сСрвСра (OnBnClickedRadioServer — функция создания сСрвСра);

3) Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π·Π°ΠΏΡ€Π΅Ρ‚Ρ‹ доступа (DisabledControl — Π·Π°ΠΏΡ€Π΅Ρ‚Ρ‹ Π½Π° Π²Π²ΠΎΠ΄ IP-адрСса, ΠΏΠΎΡ€Ρ‚Π° ΠΈ ΠΈΠΌΠ΅Π½ΠΈ Ρ‡Π°Ρ‚ΡƒΡŽΡ‰Π΅Π³ΠΎ послС создания сСрвСра);

4) ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ запросы Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ OnAccept, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ создаём сокСт ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π΅Π³ΠΎ Π² ΡΠΏΠΈΡΠΎΠΊ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… сокСтов);

5) Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ сообщСния ΠΈΠ· ΡΠ΅Ρ‚ΠΈ (OnReceive — содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Ρ‡Π°Ρ‚ΡƒΡŽΡ‰Π΅Π³ΠΎ, содСрТимоС сообщСния, Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π°Ρ‚Ρ‹ отправитСля сообщСния, Ρ‚ΡƒΡ‚ ΠΆΠ΅ отсылка принятого сСвСром сообщСния Π² ΡΠ΅Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ, ΠΊΠ°ΠΊ Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ Π² ΡΠ΅Ρ‚ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· сСрвСр);

6) ПослС формирования Π±ΡƒΡ„Π΅Ρ€Π° тСкстового сообщСния (функция SendChat), посылаСм ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ сообщСниС Π² ΡΠ΅Ρ‚ΡŒ (SendBuffer);

7) ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ количСство людСй Π² Ρ‡Π°Ρ‚Π΅ (SendCountPeople);

8) ПослС окончания Ρ€Π°Π±ΠΎΡ‚Ρ‹ сСрвСра останавливаСм Ρ‡Π°Ρ‚ (StopChat).

На ΡΡ‚ΠΎΡ€ΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ комплСкс прСдставлСн ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ дСйствиями:

1) ΠŸΡ€ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ввСсти имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ QueryName — запрос ΠΈΠΌΠ΅Π½ΠΈ Ρ‡Π°Ρ‚ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ созданиСм сокСта);

2) Запуск ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (OnBnClickedRadioClient — функция создания сСрвСра);

3) Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π·Π°ΠΏΡ€Π΅Ρ‚Ρ‹ доступа (DisabledControl — Π·Π°ΠΏΡ€Π΅Ρ‚Ρ‹ Π½Π° Π²Π²ΠΎΠ΄ IP-адрСса, ΠΏΠΎΡ€Ρ‚Π° ΠΈ ΠΈΠΌΠ΅Π½ΠΈ Ρ‡Π°Ρ‚ΡƒΡŽΡ‰Π΅Π³ΠΎ послС создания сСрвСра);

4) АктивируСм событиС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (OnConnect);

5) ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ сообщСниС (OnBnClickedButtonSen):

6) ПослС окончания Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ ΠΈΠ· Ρ‡Π°Ρ‚Π° (StopChat).

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ комплСкс сокСта прСдставлСн ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ дСйствами:

1) Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ сокСта;

2) ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΡΡ‚ΠΎΡ€ΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (OnConnect);

3) Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ возмоТности получСния сообщСний (OnReceive);

4) ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»Π΅Π½ΠΈΠ΅ запроса Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, направляСмого ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ сСрвСру (OnAccept).

Π‘Ρ…Π΅ΠΌΠ° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ сообщСний прСдставлСна Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 1.

Рисунок 1. Π‘Ρ…Π΅ΠΌΠ° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ сообщСний Разработанная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° содСрТит Ρ„Π°ΠΉΠ»Ρ‹:

ChatCppDlg.cpp — основной Ρ„Π°ΠΉΠ» Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ класс Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.

Π­Ρ‚ΠΎ Π³Π»Π°Π²Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° для VC C++. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ гСнСрируСтся с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ мастСра ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Он ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π²Π΅Ρ€ΡΠΈΠΈ Visual C++, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

ChatCpp.h — Основной Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ» прилоТСния. Π’ Π½Π΅ΠΌ описан Π³Π»Π°Π²Π½Ρ‹ΠΉ класс прилоТСния

CChatCppApp, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹;

ChatCpp.cpp — Основной Ρ„Π°ΠΉΠ» прилоТСния. Π’ Π½Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ класса CChatCppApp прилоТСния ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹;

Sock.cpp — класс сокСтов;

ChatCpp.rc — Π€Π°ΠΉΠ» рСсурсов. Π’ ΡΡ‚ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ описаны всС рСсурсы прилоТСния.

Π‘Π°ΠΌΠΈ рСсурсы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ записаны Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ RES, располоТСнном Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°;

resChatCpp.ico — Π€Π°ΠΉΠ» ΠΈΠΊΠΎΠ½ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°;

resChatCpp.rc2 — Π’ ΡΡ‚ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ рСсурсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСльзя Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° рСсурсов срСды Visual C++.

ChatCppDlg.h — ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π΅ (ΠΈΠΌΠ΅Π½ΠΈ Ρ‡Π°Ρ‚ΡƒΡŽΡ‰Π΅Π³ΠΎ, Π±ΡƒΡ„Π΅Ρ€ сообщСний, Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π°Ρ‚Ρƒ получатСля сообщСния), устанавливаСт связь ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹ΠΌ ΠΎΠΊΠ½ΠΎΠΌ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ;

Π”Ρ€ΡƒΠ³ΠΈΠ΅ стандартныС Ρ„Π°ΠΉΠ»Ρ‹:

StdAfx.h — Π’ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π΄ΠΊΠΎ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ. Или Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ся для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (Ρ‚Π΅ ΠΆΠ΅ stdio. h ΠΈΠ»ΠΈ windows. h). Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ Π·Π°Π±Ρ‹Ρ‚ΡŒ.

Π‘ΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» — stdafx. cpp — ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ #include «stdafx.h». Он, собствСнно, ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ся.

Resource.h — Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. Visual C++ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ этот Ρ„Π°ΠΉΠ».

ChatCpp.manifest — Π€Π°ΠΉΠ» описываСт Ρ‚ΠΈΠΏ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Π²Π΅Ρ€ΡΠΈΡŽ, Ρ‚ΠΈΠΏ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Ρ‚. Π΄.

ReadMe.txt — ОписаниС всСх Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ„Π°ΠΉΠ»ΠΎΠ² исходного ΠΊΠΎΠ΄Π°, Π° Ρ‚Π°ΠΊ-ΠΆΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² рСсурсов.

Листинг основного Ρ„Π°ΠΉΠ»Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ:

// Ρ„Π°ΠΉΠ» Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

#include

#include

#include «stdafx.h»

#include «ChatCppDlg.h»

#include «.chatcppdlg.h»

// CAboutDlg => класс диалогового окна

class CAboutDlg: public CDialog

{

public:

CAboutDlg ();

// связь с ABOUTBOX Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ½Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ IDD

enum { IDD = IDD_ABOUTBOX };

protected:

virtual void DoDataExchange (CDataExchange* pDX); //функция ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ

// рСализация

protected:

DECLARE_MESSAGE_MAP () // Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠΎΠ²

public:

afx_msg void OnBnClickedOk ();

};

CAboutDlg:CAboutDlg (): CDialog (CAboutDlg:IDD)

{

}

void CAboutDlg: DoDataExchange (CDataExchange* pDX)

{

CDialog:DoDataExchange (pDX);

}

BEGIN_MESSAGE_MAP (CAboutDlg, CDialog)

ON_BN_CLICKED (IDOK, &CAboutDlg:OnBnClickedOk)

END_MESSAGE_MAP ()

// CChatCppDlg рСализация

CChatCppDlg:CChatCppDlg (CWnd* pParent /*=NULL*/)

: CDialog (CChatCppDlg:IDD, pParent)

{

m_hIcon = AfxGetApp ()->LoadIcon (IDR_MAINFRAME);

}

void CChatCppDlg: DoDataExchange (CDataExchange* pDX)

{

CDialog:DoDataExchange (pDX);

DDX_Control (pDX, IDC_RADIO_SERVER, m_ButtonStartServer); // БвязывСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сСрвСра с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΎΠΌ Server

DDX_Control (pDX, IDC_RADIO_CLIENT, m_ButtonStartClient);

DDX_Control (pDX, IDC_EDIT_NAME, m_wndName);

DDX_Control (pDX, IDC_EDIT_IP, m_wndIPAddress);

DDX_Control (pDX, IDC_EDIT_PORT, m_wndPort);

DDX_Control (pDX, IDC_EDIT_SEND, m_wndSend);

DDX_Control (pDX, IDC_BUTTON_SEND, m_ButtonSend);

DDX_Control (pDX, IDC_BUTTON_STOPCHAT, m_ButtonStopChat);

DDX_Control (pDX, IDC_EDIT_CHAT, m_wndChat);

DDX_Control (pDX, IDC_STATIC_COUNTPEOPLE, m_wndCountPeople);

}

BEGIN_MESSAGE_MAP (CChatCppDlg, CDialog)

ON_WM_SYSCOMMAND () // Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ систСмныС события

ON_WM_PAINT () //ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ обновлСния клиСнтской области

ON_WM_QUERYDRAGICON ()

ON_BN_CLICKED (IDC_RADIO_SERVER, OnBnClickedRadioServer) // ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° сообщСний ΠΎΡ‚ ΠΊΠ½ΠΎΠΏΠΎΠΊ

ON_BN_CLICKED (IDC_RADIO_CLIENT, OnBnClickedRadioClient)

ON_BN_CLICKED (IDC_BUTTON_STOPCHAT, OnBnClickedButtonStopchat)

ON_BN_CLICKED (IDC_BUTTON_SEND, OnBnClickedButtonSend)

ON_WM_CLOSE ()

ON_EN_CHANGE (IDC_EDIT_NAME, &CChatCppDlg:OnEnChangeEditName)

ON_EN_CHANGE (IDC_EDIT_IP, &CChatCppDlg:OnEnChangeEditIp)

ON_EN_CHANGE (IDC_EDIT_PORT, &CChatCppDlg:OnEnChangeEditPort)

ON_EN_CHANGE (IDC_EDIT_SEND, &CChatCppDlg:OnEnChangeEditSend)

ON_BN_CLICKED (IDC_STATIC_COUNTPEOPLE, &CChatCppDlg:OnBnClickedStaticCountpeople)

ON_BN_CLICKED (IDC_BUTTON1, &CChatCppDlg:OnBnClickedButton1)

ON_LBN_SELCHANGE (IDC_LIST1, &CChatCppDlg:OnLbnSelchangeList1)

END_MESSAGE_MAP ()

BOOL CChatCppDlg: OnInitDialog ()

{

CDialog:OnInitDialog ();

// НСобходимая инициализация

SetWindowText («ΠΠ΅Ρ‚ сСти!»);

m_wndName.SetLimitText (12); // ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ количСства Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… символов.

m_wndName.SetWindowText (g_EmptyName);

m_wndSend.SetLimitText (200); // ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ количСства Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… символов.

m_wndIPAddress.SetWindowText («127.0.0.1»); // АдрСс ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для тСстирования.

m_wndPort.SetWindowText («1500»); // ΠŸΠΎΡ€Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

m_ButtonStopChat.SetWindowText (g_strExitFromChat);

m_mainSocket.m_pParent = this;

return TRUE;

}

void CChatCppDlg: OnSysCommand (UINT nID, LPARAM lParam)

{

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{

CAboutDlg dlgAbout;

dlgAbout.DoModal ();

}

else

{

CDialog:OnSysCommand (nID, lParam);

}

}

void CChatCppDlg: OnPaint ()

{

if (IsIconic ())

{

CPaintDC dc (this); //контСкст устройства для рисования

SendMessage (WM_ICONERASEBKGND, reinterpret_cast (dc.GetSafeHdc ()), 0);

// Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°Ρ‡ΠΊΠ° ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ клиСнтского ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°

int cxIcon = GetSystemMetrics (SM_CXICON);

int cyIcon = GetSystemMetrics (SM_CYICON);

CRect rect;

GetClientRect (&rect);

int x = (rect.Width () — cxIcon + 1) / 2;

int y = (rect.Height () — cyIcon + 1) / 2;

dc.DrawIcon (x, y, m_hIcon);

}

else

{

CDialog:OnPaint ();

}

}

// Π²Ρ‹Π·ΠΎΠ² Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ систСмой ΠΏΡ€ΠΈ пСрСтаскивании ΠΎΠΊΠ½Π°

HCURSOR CChatCppDlg: OnQueryDragIcon ()

{

return static_cast (m_hIcon);

}

// ЗапускаСм сСрвСр

void CChatCppDlg: OnBnClickedRadioServer ()

{

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ нСсанкционированного запуска сСрвСра:

// Если ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π΅ Π² ΡΠΎΡΡ‚оянии Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ,

// Ссли сокСт Π² Ρ€Π°Π±ΠΎΡ‚Π΅ (Ρ‚.Π΅. Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ сокСтом ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ),

// ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ссли Π² Ρ‡Π°Ρ‚Π΅ всС Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ.

if (m_ButtonStartServer.GetCheck () ≠ BST_CHECKED) return;

if (m_mainSocket.m_hSocket ≠ INVALID_SOCKET) return;

if (QueryName () == false)

{

AfxMessageBox («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ своС имя для Ρ‡Π°Ρ‚Π°!»);

StopChat ();

return;

}

CString strPort;

m_wndPort.GetWindowText (strPort);

// Класс CAsyncSocket ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ создания сокСта,

// вкладывая Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Create () нСпосрСдствСнноС созданиС

// сокСта ΠΈ ΡΠ²ΡΠ·Ρ‹Π²Π°Π½ΠΈΠ΅ Π΅Π³ΠΎ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· IP адрСсом доступном Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅.

// atoi ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ строку ansi to int

if (m_mainSocket.Create (atoi (strPort)) == FALSE)

{

AfxMessageBox («ΠžΡˆΠΈΠ±ΠΊΠ° создания сСрвСра! nΠ’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚ ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ!»);

StopChat ();

}

else

{

// Π’Π²ΠΎΠ΄ΠΈΠΌ сокСт Π² Ρ€Π΅ΠΆΠΈΠΌ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΡ запросов Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

if (m_mainSocket.Listen () == FALSE)

{

StopChat ();

}

else

{

// Если всС Π² ΠΏΠΎΡ€ΡΠ΄ΠΊΠ΅.

DisabledControl (true);

SetWindowText («Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΆΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ!»);

// Π’ Ρ‡Π°Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сСрвСр.

m_wndCountPeople.SetWindowText («Π’ Ρ‡Π°Ρ‚Π΅ 1 Ρ‡Π΅Π». online»);

}

}

}

// ЗапускаСм ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

void CChatCppDlg: OnBnClickedRadioClient ()

{

// ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ нСсанкционированного запуска ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°:

// Если ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π΅ Π² ΡΠΎΡΡ‚оянии Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ,

// Ссли сокСт Π² Ρ€Π°Π±ΠΎΡ‚Π΅ (Ρ‚.Π΅. Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ сокСтом ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ),

// ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ссли Π² Ρ‡Π°Ρ‚Π΅ всС Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ.

if (m_ButtonStartClient.GetCheck () ≠ BST_CHECKED) return;

if (m_mainSocket.m_hSocket ≠ INVALID_SOCKET) return;

if (QueryName () == false)

{

AfxMessageBox («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ своС имя для Ρ‡Π°Ρ‚Π°!»);

StopChat ();

return;

}

// Класс CAsyncSocket ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ создания сокСта,

// вкладывая Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Create () нСпосрСдствСнноС созданиС

// сокСта ΠΈ ΡΠ²ΡΠ·Ρ‹Π²Π°Π½ΠΈΠ΅ Π΅Π³ΠΎ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· IP адрСсом доступном Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅.

if (m_mainSocket.Create () == TRUE)

{

CString strAddress;

m_wndIPAddress.GetWindowText (strAddress);

CString strPort;

m_wndPort.GetWindowText (strPort);

if (m_mainSocket.Connect (strAddress, atoi (strPort)) == FALSE)

{

// Π’ Π°ΡΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΊΠΎΠ΄ этой ошибки

// считаСтся ΠΊΠ°ΠΊ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ события ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ,

// Ρ‚. Π΅. практичСски ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚.

if (GetLastError () == WSAEWOULDBLOCK)

{

DisabledControl (false);

}

else

{

// ΠΈΠ½Π°Ρ‡Π΅ ΠΏΡ€ΠΈ возникновСния ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ ошибки останавливаСм Ρ‡Π°Ρ‚

StopChat ();

}

}

}

}

// НаТали ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π’Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· Ρ‡Π°Ρ‚Π°» .

void CChatCppDlg: OnBnClickedButtonStopchat ()

{

StopChat ();

}

// Π—Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ доступ ΠΊ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡΠΌ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅

// прилоТСния Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ сСрвСра ΠΈΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

// ЦСль Π·Π°ΠΏΡ€Π΅Ρ‚Π° — ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚

// случайного наТатия «Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ…» ΠΊΠ½ΠΎΠΏΠΎΠΊ.

void CChatCppDlg: DisabledControl (bool server)

{

// Π—Π°ΠΏΡ€Π΅Ρ‚Ρ‹.

m_wndIPAddress.EnableWindow (FALSE);

m_wndPort.EnableWindow (FALSE);

m_ButtonSend.EnableWindow (FALSE);

if (server == true)

{

m_ButtonStopChat.SetWindowText (g_strStopChat);

m_ButtonStartClient.EnableWindow (FALSE);

}

else

{

m_ButtonStopChat.SetWindowText (g_strExitFromChat);

m_ButtonStartServer.EnableWindow (FALSE);

}

// Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

// Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ‡Π°Ρ‚Π°.

m_ButtonStopChat.EnableWindow (TRUE);

}

// Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ доступ ΠΊ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡΠΌ послС закрытия сокСтов.

// ЦСль Π·Π°ΠΏΡ€Π΅Ρ‚Π° — ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚

// случайного наТатия «Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ…» ΠΊΠ½ΠΎΠΏΠΎΠΊ.

void CChatCppDlg: EnabledControl (void)

{

// Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

m_wndIPAddress.EnableWindow (TRUE);

m_wndPort.EnableWindow (TRUE);

m_ButtonStartClient.EnableWindow (TRUE);

m_ButtonStartServer.EnableWindow (TRUE);

// Π—Π°ΠΏΡ€Π΅Ρ‚Ρ‹.

m_ButtonStopChat.EnableWindow (FALSE);

m_ButtonSend.EnableWindow (FALSE);

}

// ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ запросы Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

void CChatCppDlg: OnAccept (void)

{

CSock* pSock = new CSock;

pSock->m_pParent = this;

// Если всС Π² ΠΏΠΎΡ€ΡΠ΄ΠΊΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ сокСт Π² ΡΠΏΠΈΡΠΎΠΊ

// ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… сокСтов.

if (m_mainSocket.Accept (*pSock) == TRUE)

{

m_vecSockets.push_back (pSock);

m_ButtonSend.EnableWindow (TRUE);

SendCountPeople ();

}

else

delete pSock;

SetWindowText («Π‘Π΅Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚!»);

}

// Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ‡Π°Ρ‚Π°,

// Ссли это сработало Π½Π° ΡΡ‚ΠΎΡ€ΠΎΠ½Π΅ сСрвСра,

// Ρ‚ΠΎ ΡΡ‚ΠΎ полная остановка Ρ‡Π°Ρ‚Π°.

void CChatCppDlg: StopChat (void)

{

// ΠžΡ‚ΡΡ‹Π»Π°Π΅ΠΌ сигнал ΠΎΠ± ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΎΡ‚ Ρ‡Π°Ρ‚Π°.

SendDisconnect ();

m_mainSocket.Close ();

for (int i = 0; i < (int)m_vecSockets.size (); i++)

{

m_vecSockets[i]->Close ();

delete m_vecSockets[i];

}

// ΠžΡ‡ΠΈΡΡ‚ΠΈΠΌ Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΎΡ‚ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… элСмСнтов.

m_vecSockets.clear ();

m_ButtonStartServer.SetCheck (BST_UNCHECKED);

m_ButtonStartClient.SetCheck (BST_UNCHECKED);

// Π Π°Π·Ρ€Π΅ΡˆΠΈΠΌ доступ ΠΊ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ для

// ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ.

EnabledControl ();

// Π’ Ρ‡Π°Ρ‚Π΅ Π½Π΅Ρ‚ Π½ΠΈΠΊΠΎΠ³ΠΎ.

m_wndCountPeople.SetWindowText («Π’ Ρ‡Π°Ρ‚Π΅ 0 Ρ‡Π΅Π».»);

SetWindowText («ΠΠ΅Ρ‚ сСти!»);

}

// ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ сообщСния.

void CChatCppDlg: OnBnClickedButtonSend ()

{

CString strChat;

m_wndSend.GetWindowText (strChat);

SendChat (strChat);

}

// Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ сообщСний ΠΈΠ· ΡΠ΅Ρ‚ΠΈ Ρ‡Π°Ρ‚Π°.

void CChatCppDlg: OnReceive (void)

{

SENDBUFFER sb;

if (m_ButtonStartServer.GetCheck () == BST_CHECKED)

{

// Π‘Π΅Ρ€Π²Π΅Ρ€ нСсСт Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ сообщСний.

for (int index = 0; index < (int)m_vecSockets.size (); index++)

{

m_vecSockets[index]->Receive (&sb, sizeof (SENDBUFFER));

// Если ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΡΡ, удаляСм этого ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

// ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° доступных ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².

if (sb.typemessage == m_TypeMessage:tmDisconnect)

{

m_vecSockets[index]->Close ();

delete m_vecSockets[index];

m_vecSockets.erase (m_vecSockets.begin () + index);

SendCountPeople ();

// ΠžΡ‚ΡΡ‹Π»ΠΊΠ° принятого сСвСром сообщСния Π² ΡΠ΅Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ,

// ΠΊΠ°ΠΊ Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ Π²

// сСти Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· сСрвСр.

SendBuffer (sb, false);

break;

}

// РассылаСм сообщСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΠΎ ΡΠ΅Ρ‚ΠΈ Ρ‡Π°Ρ‚Π°.

if (sb.typemessage == m_TypeMessage:tmChat)

{

SendBuffer (sb, false);

break;

}

}

}

else if (m_ButtonStartClient.GetCheck () == BST_CHECKED)

{

m_mainSocket.Receive (&sb, sizeof (SENDBUFFER));

}

// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° принятого сообщСния Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅

// Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°.

switch (sb.typemessage)

{

case m_TypeMessage:tmCountPeople:

{

m_wndCountPeople.SetWindowText («Π’ Ρ‡Π°Ρ‚Π΅ «+

IntToStr (sb.countpeople) + «Ρ‡Π΅Π». online»);

}

break;

case m_TypeMessage:tmChat:

{

CString strChat;

m_wndChat.GetWindowText (strChat);

strChat += «» + CString (sb.name) + «: „+ CString (sb.buffer) + „(“ + IntToStr (sb.d)+ „:“ + IntToStr (sb.e)+“ :» + IntToStr (sb.f)+ «-» +IntToStr (sb.a)+" :" + IntToStr (sb.b)+" :" + IntToStr (sb.c)+")" + «rn» ;

m_wndChat.SetWindowText (strChat);

int number_line = m_wndChat.GetLineCount ();

m_wndChat.LineScroll (number_line);

}

break;

case m_TypeMessage:tmDisconnect:

{

CString strChat;

m_wndChat.GetWindowText (strChat);

// Если принято сообщСниС ΠΎΠ± ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠΈ Ρ‡Π°Ρ‚Π° (ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ сСрвСра),

// ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ содСрТимоС сообщСния.

if (sb.stopchat == true)

{

StopChat ();

strChat += «» + CString (sb.name) + «: Π§Π°Ρ‚ остановлСн!» + «rn» + «==============================» + «rn» ;

}

else

{

strChat += «» + CString (sb.name) + «- ΠΏΠΎΠΊΠΈΠ½ΡƒΠ» (Π°) Ρ‡Π°Ρ‚!» + «rn» ;

}

FILE* fo;

fo = fopen («client.txt» ," ab");

fprintf (fo, strChat);

m_wndChat.SetWindowText (strChat);

int number_line = m_wndChat.GetLineCount ();

m_wndChat.LineScroll (number_line);

}

break;

default:

AfxMessageBox («ΠΠ΅ΠΈΠ·Π²Π΅ΡΡ‚Π½ΠΎΠ΅ сообщСниС!»);

break;

}

}

// ΠŸΡ€ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ прилоТСния ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠΌ Π² Ρ‡Π°Ρ‚

// ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Ρ‡Π°Ρ‚ΡƒΡŽΡ‰Π΅Π³ΠΎ.

void CChatCppDlg: OnClose ()

{

StopChat ();

CDialog:OnClose ();

}

// ΠŸΠΎΡΠ»Π°Ρ‚ΡŒ строку-сообщСниС Π² Ρ‡Π°Ρ‚.

void CChatCppDlg: SendChat (CString strMessage)

{

SENDBUFFER sb;

int len = strMessage. GetLength ();

memcpy (sb.buffer, strMessage. GetBuffer (), sizeof (TCHAR)*len);

m_wndName.GetWindowText (strMessage);

len = strMessage. GetLength ();

memcpy (sb.name, strMessage. GetBuffer (), sizeof (TCHAR)*len);

sb.typemessage = m_TypeMessage:tmChat;

SendBuffer (sb, true);

}

// ΠŸΠΎΡΠ»Π°Ρ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ сообщСния Π² ΡΠ΅Ρ‚ΡŒ.

void CChatCppDlg: SendBuffer (SENDBUFFER sb, bool toserver)

{

// Если сокСт Π½Π΅ ΡΠΎΠ·Π΄Π°Π½, Π½Π΅Ρ‡Π΅Π³ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² ΡΡ‚ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

if (m_mainSocket.m_hSocket == INVALID_SOCKET) return;

if (m_ButtonStartServer.GetCheck () == BST_CHECKED)

{

for (int i = 0; i < (int)m_vecSockets.size (); i++)

{

int send = m_vecSockets[i]->Send (&sb, sizeof (SENDBUFFER));

if (send == sizeof (SENDBUFFER))

{

m_wndSend.SetWindowText (««);

}

}

// Если нСпосрСдствСнно ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ осущСствляСт сСрвСр,

// ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠΌ Π΅Π³ΠΎ сообщСниС Π² Π΅Π³ΠΎ ΠΆΠ΅ ΠΎΠΊΠ½Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ,

// Ρ„Π»Π°Π³ toserver Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ данная функция

// ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π·Π΅Ρ€ΠΊΠ°Π»Π° ΡΠΌ. CChatCppDlg: OnReceive (void).

if (toserver == true)

{

if (sb.typemessage == m_TypeMessage:tmChat)

{

CString strChat;

m_wndChat.GetWindowText (strChat);

strChat += «» + CString (sb.name) + «: „+ CString (sb.buffer) + „(“ + IntToStr (sb.d)+ „:“ + IntToStr (sb.e)+“ :» + IntToStr (sb.f)+ «-» +IntToStr (sb.a)+" :" + IntToStr (sb.b)+" :" + IntToStr (sb.c)+")" + «rn» ;

m_wndChat.SetWindowText (strChat);

int number_line = m_wndChat.GetLineCount ();

m_wndChat.LineScroll (number_line);

}

if (sb.typemessage == m_TypeMessage:tmDisconnect)

{

CString strChat;

m_wndChat.GetWindowText (strChat);

strChat += «» + CString (sb.name) + «: «+ «Π§Π°Ρ‚ остановлСн!» + «rn» + «===============================rn» ;

FILE* fo;

fo = fopen («server.txt» ," ab");

fprintf (fo, strChat);

m_wndChat.SetWindowText (strChat);

int number_line = m_wndChat.GetLineCount ();

m_wndChat.LineScroll (number_line);

}

}

}

else if (m_ButtonStartClient.GetCheck () == BST_CHECKED)

{

int send = m_mainSocket.Send (&sb, sizeof (SENDBUFFER));

if (send == sizeof (SENDBUFFER))

m_wndSend.SetWindowText (««);

}

}

// Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ ΠΈ ΠΎΡ‚правляСм сообщСниС ΠΎΠ± ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΎΡ‚ ΡΠ΅Ρ‚ΠΈ.

void CChatCppDlg: SendDisconnect (void)

{

CString strChat;

m_wndChat.GetWindowText (strChat);

SENDBUFFER sb;

CString s;

m_wndName.GetWindowText (s);

int len = s. GetLength ();

memcpy (sb.name, s. GetBuffer (), sizeof (TCHAR)*len);

sb.typemessage = m_TypeMessage:tmDisconnect;

// ΠžΡ‚ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ сСрвСра останавливаСт Ρ‡Π°Ρ‚.

if (m_ButtonStartServer.GetCheck () == BST_CHECKED)

sb.stopchat = true;

SendBuffer (sb, true);

}

// Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, происходит Π½Π° ΡΡ‚ΠΎΡ€ΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

void CChatCppDlg: OnConnect (BOOL Error)

{

if (Error == TRUE)

{

AfxMessageBox («ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±Ρ‹Π»Π° ΠΎΡ‚Π²Π΅Ρ€Π³Π½ΡƒΡ‚Π°! nΠ’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ сСрвСр Π΅Ρ‰Π΅ Π½Π΅ ΡΠΎΠ·Π΄Π°Π½!»);

StopChat ();

}

else

{

m_ButtonSend.EnableWindow (TRUE);

SetWindowText («Π‘Π΅Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚!»);

}

}

// Π‘Π΅Ρ€Π²Π΅Ρ€ отправляСт ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ количСство людСй Π² Ρ‡Π°Ρ‚Π΅.

void CChatCppDlg: SendCountPeople (void)

{

int countpeople = 1/*сСрвСр*/ + (int)m_vecSockets.size ()/*ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹*/;

m_wndCountPeople.SetWindowText («Π’ Ρ‡Π°Ρ‚Π΅ «+

IntToStr (countpeople) + «Ρ‡Π΅Π». online»);

// ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΠΌ сообщСниС ΠΎ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π°Ρ… людСй Π² Ρ‡Π°Ρ‚Π΅.

SENDBUFFER sb;

sb.typemessage = m_TypeMessage:tmCountPeople;

sb.countpeople = countpeople;

for (int i = 0; i < (int)m_vecSockets.size (); i++)

{

int send = m_vecSockets[i]->Send (&sb, sizeof (SENDBUFFER));

}

}

// Запрос ΠΈΠΌΠ΅Π½ΠΈ Ρ‡Π°Ρ‚ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ созданиСм сокСта.

bool CChatCppDlg: QueryName (void)

CString strName;

m_wndName.GetWindowText (strName);

if (strName == g_EmptyName

void CChatCppDlg: OnEnChangeEditName ()

{

}

void CChatCppDlg: OnEnChangeEditIp (){}

void CChatCppDlg: OnEnChangeEditPort (){}

void CChatCppDlg: OnEnChangeEditSend () {}

void CChatCppDlg: OnBnClickedStaticCountpeople ()

{}

void CAboutDlg: OnBnClickedOk ()

{

OnOK ();

}

void CChatCppDlg: OnEnChangeEditChat () {}

void CChatCppDlg: OnBnClickedButton1()

{

system («C:\\Users\Администратор\Desktop\client_start\ChatCpp\client.txt»);

}

3. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ Ρ‚СстированиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ комплСкса

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ стал ΠΎΠ±ΠΌΠ΅Π½ тСкстовой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°ΠΌΠΈ локальной сСти. Окно ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ запуска ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 2.

Рисунок 2. Окно ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ запуска Окно сСрвСра ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 3.

Рисунок 3. Окно сСрвСра

Окно ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 4.

Рисунок 4. Окно ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈ ΠΏΡ€ΠΈΡ…ΠΎΠ΄Π° сообщСний ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 6.

Рисунок 5. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈ ΠΏΡ€ΠΈΡ…ΠΎΠ΄Π° сообщСний К ΠΏΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°ΠΌ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ отнСсти:

1) Π˜Π½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятный интСрфСйс;

2) Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ пСрСсылки сообщСний Π½Π° Π²Ρ‹ΡΠΎΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅;

3) Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ открытия Π°Ρ€Ρ…ΠΈΠ²Π° всСх сообщСний;

4) Вся нСобходимая информация Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Π° ΠΈ Π½Π°Ρ…одится ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ;

5) ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ) состояния Ρ‡Π°Ρ‚Π°.

НСдостатки:

1) ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ возмоТности ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ сообщСния;

2) Π’ ΡΠ»ΡƒΡ‡Π°Π΅ нСработоспособности сСрвСра, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ ΡΠ΅Ρ‚ΠΈ (для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ сСрвСра).

Для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ использовались ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ систСмы Π·Π°Ρ‰ΠΈΡ‚Ρ‹:

1) ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ сСрвСр (Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π² ΡΠ΅Ρ€Π²Π΅Ρ€Ρƒ), ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ввСсти ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ имя. ЦСль — ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΈΠΌΠ΅Π½ Π² Ρ‡Π°Ρ‚Π΅. Если Π½Π΅ Π²Π²Π΅ΡΡ‚ΠΈ имя, появится ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ ΠΎ Π½Π΅ Π²Π²ΠΎΠ΄Π΅ ΠΈΠΌΠ΅Π½ΠΈ. Данная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π° Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 6.

Рисунок 6. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π²Π²ΠΎΠ΄Π° ΠΈΠΌΠ΅Π½ΠΈ

2) Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (DisabledControl), Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅ΠΌ доступ ΠΊ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡΠΌ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ прилоТСния Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ сСрвСра ΠΈΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ЦСль Π·Π°ΠΏΡ€Π΅Ρ‚Π° — ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚ ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΠΎΠ³ΠΎ наТатия «Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ…» ΠΊΠ½ΠΎΠΏΠΎΠΊ. Π”Π°Π½Π½Ρ‹Π΅ Π·Π°ΠΏΡ€Π΅Ρ‚Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π²ΠΈΠ΄Π½Ρ‹ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ°Ρ… 4,5,6. ΠŸΡ€ΠΈ создании сСрвСра (Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊ ΡΠ΅Ρ€Π²Π΅Ρ€Ρƒ), Π·Π°Ρ‚Π΅ΠΌΠ½ΡΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ IP-адрСса ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΡ€Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

3) ΠŸΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊ ΡΠ΅Ρ€Π²Π΅Ρ€Ρƒ, Ссли сСрвСр Π½Π΅ ΡΠΎΠ·Π΄Π°Π½ — появляСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ сообщСниС (рисунок 7):

Рисунок 7. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊ ΡΠ΅Ρ€Π²Π΅Ρ€Ρƒ ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π°Ρ€Ρ…ΠΈΠ²Π° сообщСний, появляСтся ΠΎΠΊΠ½ΠΎ истории всСх сообщСний ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (сСрвСра), Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (рисунок 8):

Рисунок 8. Архив сообщСний ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

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

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ пСрСсылки тСкстовых сообщСний ΠΏΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ сСти.

Π‘Ρ‹Π»ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ классов CAboutDlg, CSock, ChatCppApp, CChatCppDlg ΠΈ Ρ‚. Π΄. Ознакомились со ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΡΡ‚ΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ, Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ этих ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π½Π° ΡΠΎΠ±Ρ‹Ρ‚ия, Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ эффСктивно ΠΈ ΡΡΡ‚Π΅Ρ‚ΠΈΡ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ пространство Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ ΠΎΡΠ²ΠΎΠΈΠ»ΠΈΡΡŒ со ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. VC++ связываСт с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΌ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΎΠΊΠ½ΠΎΠΌ собствСнный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ Ρ‚Π°ΠΊΠΈΠΌ способом Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ всС свойства ΠΎΠΊΠ½Π° Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅. Выяснили, Ρ‡Ρ‚ΠΎ основная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° вСсьма спСцифична: ΠΎΠ½Π° содСрТит ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ всСх ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ исполняСмых ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… созданиС Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΎΠΊΠΎΠ½ ΠΈ ΡΠ²ΡΠ·ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Windows. Вся основная Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ управляСтся ΠΊΠΎΠ΄ΠΎΠΌ, содСрТащимся Π² ΠΌΠΎΠ΄ΡƒΠ»ΡΡ….

1. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΡΠ΅Ρ‚ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π‘Socket. http://besnog.ru/40 500.shtml.

2. ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрного прилоТСния Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ класса CAsyncSocket (MFC). http://club.shelek.ru/viewart.php?id=325

3. Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΈΠ³Ρ€Ρ‹ Π½Π° WINSOCK. http://insidepro.com/kk/006/006r.shtml

4. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° MFC. http://www.tdoc.ru/c/programming/visual-cpp/visual-cpp-beginners-page6.html

5. Π€Π°Ρ€ΠΎΠ½ΠΎΠ² Π’.Π’. Delphi ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ высокого уровня. — Πœ.: «ΠŸΠ˜Π’Π•Π », 2006. — 639 с.

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

Рисунок 9. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° классов

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

Рисунок 10. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅Ρ†Π΅Π΄Π΅Π½Ρ‚ΠΎΠ²

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

Рисунок 11. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

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

Рисунок 12. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° взаимодСйствий

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

Рисунок 13. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° развёртывания

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

Рисунок 14. ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» тСстирования

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