Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Β«ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΒ»
Π ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ 3 ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-ΡΠ΅ΡΠ²Π΅Ρ ΠΈ 2 ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘++ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±Π°Π·ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Win32 API. Π‘++ — ΡΡΠΎ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΈ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. Win32 API — Π½Π°Π±ΠΎΡ Π±Π°Π·ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ² Microsoft… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Β«ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΒ» (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
Π ΠΠ€ΠΠ ΠΠ’
ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΠ΅ΡΠ²Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅Ρ ΠΠΎΡΡΠ½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π·Π°ΠΏΠΈΡΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ: ΡΡΡΠ°Π½ΠΈΡΡ, ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΉ, ΡΠ°Π±Π»ΠΈΡΡ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π¦Π΅Π»Ρ ΡΠ°Π±ΠΎΡΡ: ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ «ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ» Π΄Π»Ρ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ ΡΠ΅ΡΠ΅Π· ΡΠΎΠΊΠ΅ΡΡ.
Π ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ 3 ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ Win32 Π² ΡΡΠ΅Π΄Π΅ Microsoft Visual Studio, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ Π΄Π»Ρ ΠΌΠ΅ΠΆΠΏΡΠΎΡΠ΅ΡΡΠ½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠΎΠΊΠ΅ΡΡ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-ΡΠ΅ΡΠ²Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ: ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠΎΠ², ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ-ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², Π²ΡΠ²ΠΎΠ΄ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ Π½Π° ΡΠΊΡΠ°Π½. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ-ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ: ΠΎΡΠΊΡΡΡΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠ°, ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ²ΡΠ·ΠΈ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π΄Π°Π½Π½ΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ·ΡΠΊΠ° Π‘++ ΠΈ Π±Π°Π·ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Win32 API.
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ, Π΄ΠΎΡΡΠΎΠΈΠ½ΡΡΠ² ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ «ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ»; ΡΠ΄Π΅Π»Π°Π½ ΠΎΠ±Π·ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΡΠ΅Π΄ΡΡΠ² ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ².
WIN32 API, Π‘ΠΠΠΠ’, ΠΠ ΠΠ¦ΠΠ‘Π‘Π«, Π‘ΠΠΠ«Π’ΠΠ―, ΠΠΠ Π’, Π‘ΠΠΠ₯Π ΠΠΠΠΠΠ¦ΠΠ― ΠΠ ΠΠ¦ΠΠ‘Π‘ΠΠ, ΠΠΠΠΠ ΠΠ’Π, ΠΠ ΠΠΠ ΠΠΠΠ.
ΠΠ»ΠΈΠ΅Π½Ρ — ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ — ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π° ΡΠ΅ΡΠ΅Π²ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΎΠΉ ΡΠ²ΡΠ·Π½ΠΎΡΡΠΈ, ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡΡΠ΅ΠΉ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΡΡ Π·Π°Π΄Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΡΡΡΡΠΎΠΉΡΡΠ² ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠΎΠ»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π»ΠΈΠ±ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π² Π±ΠΈΠ·Π½Π΅ΡΠ΅, Π½Π° ΠΏΡΠ΅Π΄ΠΏΡΠΈΡΡΠΈΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΡ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π½Π°Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ² ΡΠ΄ΠΎΠ±Π½ΡΠΌΠΈ ΡΠ°Π±ΠΎΡΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, ΠΈ, ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅, ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΎΡΠ΄Π°ΡΠΈ ΠΎΡ ΡΡΡΠ΄Π°.
Π Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΡΡΠΏΠΈΡΡ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΊΠΎΠ³Π΄Π° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΠΏΡΠΈΡΡΠΈΠ΅ΠΌ ΡΡΠ°Π½Π΅Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ. ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠΉ, ΠΊΠΎΠ³Π΄Π° ΡΠΈΡΠ»ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΡΡ ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ Π΄Π°Π½Π½ΡΠΌ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ 10−15 ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ. ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΡΠ΅Π΄ΠΏΡΠΈΡΡΠΈΠ΅ΠΌ Π²ΡΡΠ°Π΅Ρ Π·Π°Π΄Π°ΡΠ° ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ, Π² ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΡΠ»ΠΎ ΠΌΠ΅ΡΡ, ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ, ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ 20, ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ.
Π ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ 3 ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-ΡΠ΅ΡΠ²Π΅Ρ ΠΈ 2 ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘++ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±Π°Π·ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Win32 API. Π‘++ - ΡΡΠΎ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΈ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. Win32 API — Π½Π°Π±ΠΎΡ Π±Π°Π·ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ² Microsoft Windows ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠΈ «ΠΠ°ΠΉΠΊΡΠΎΡΠΎΡΡ». ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ·Π΄Π°Π½Ρ Π² Microsoft Visual Studio 2010 Professional. Microsoft Visual Studio — Π»ΠΈΠ½Π΅ΠΉΠΊΠ° ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΠ°ΠΉΠΊΡΠΎΡΠΎΡΡ, Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΡ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΈ ΡΡΠ΄ Π΄ΡΡΠ³ΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ΅Π΄ΡΡΠ².
1. ΠΠ‘ΠΠΠΠΠΠ― Π§ΠΠ‘Π’Π¬
1.1 ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ 3 ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-ΡΠ΅ΡΠ²Π΅Ρ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ: ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠΎΠ², ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ-ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², Π²ΡΠ²ΠΎΠ΄ Π½Π° ΡΠΊΡΠ°Π½ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ . ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-ΠΊΠ»ΠΈΠ΅Π½Ρ 1 Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ: ΠΎΡΠΊΡΡΡΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠ°, ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ²ΡΠ·ΠΈ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠ΅ΡΠ²Π΅ΡΡ ΡΠ°ΠΊΠΈΡ Π΄Π°Π½Π½ΡΡ : ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΠ²Π΅ΡΠ° 2-Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΠ΄ ΡΠ°ΡΠΊΠ»Π°Π΄ΠΊΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-ΠΊΠ»ΠΈΠ΅Π½Ρ 1 Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡΠΊΡΡΡΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠ°, ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ²ΡΠ·ΠΈ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠ΅ΡΠ²Π΅ΡΡ ΡΠ°ΠΊΠΈΡ Π΄Π°Π½Π½ΡΡ : ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Ρ ΠΏΠΎ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ «ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ». ΠΠ΅ΡΠΎΠ΄ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ — ΡΠΎΠΊΠ΅ΡΡ.
1.2 ΠΡΠ°ΡΠΊΠΈΠ΅ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Ρ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠΉ ΡΠ΅ΠΌΡ ΠΠΎΠ΄Π΅Π»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ — ΡΡΠΎ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Π² ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠ΅ΡΠΈ. Π‘Π΅ΡΠ²Π΅Ρ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΠΏΡΠ°Π²ΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠΌ ΡΠ΅ΡΡΡΡΠΎΠΌ, Π° ΠΊΠ»ΠΈΠ΅Π½Ρ — ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌ. ΠΠΎΠ½ΡΡΠΈΡ «ΠΊΠ»ΠΈΠ΅Π½Ρ» ΠΈ «ΡΠ΅ΡΠ²Π΅Ρ» ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π»ΠΈΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ»Π΅ΠΉ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ, Π½ΠΎ Π½Π΅ ΠΊΠ°ΠΊΠΈΠ΅ Π»ΠΈΠ±ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π²ΠΈΠ΄Ρ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠ° ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠ΅ ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅, ΡΠ°ΠΊ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π²ΠΈΠ΄ΠΎΠΌ ΡΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΠ½ Π²Π»Π°Π΄Π΅Π΅Ρ. ΠΡΠΎΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΈ Π½Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠ°Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π½Π°Π±ΠΎΡΠ° ΡΡΠ»ΡΠ³, ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ΡΡ ΡΡΠΈΠΌΠΈ ΡΡΠ»ΡΠ³Π°ΠΌΠΈ, ΠΏΡΠΈΠ½ΡΡΠΎ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌΠΈ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠΌΠ΅ΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Ρ Π°ΡΠ°ΠΊΡΠ΅Ρ, Ρ. Π΅. ΠΎΠ΄Π½Π° ΡΠ°ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅-ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅, Π° Π΄ΡΡΠ³Π°Ρ — Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅-ΡΠ΅ΡΠ²Π΅ΡΠ΅, Π° Π΄Π»Ρ ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ». ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ», ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ. ΠΠ»ΠΈΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΊΠ°ΠΊΠΈΠ΅ Π»ΠΈΠ±ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ, ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠΌΠΈ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅, Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π½Π° Π½Π΅ΠΌ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Ρ. ΠΏ. ΠΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ° Π΄Π°Π½Π½ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΠ»ΠΈ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π΅ Π½ΠΎΠ²ΡΠΉ Π·Π°ΠΏΡΠΎΡ. ΠΠ»ΠΈΠ΅Π½Ρ ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠ°ΠΊ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅, ΡΠ°ΠΊ ΠΈ Π½Π° ΡΠ°Π·Π½ΡΡ . ΠΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π²ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅.
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ Π΄Π²ΡΡ ΡΡΠΎΠ²Π½Π΅Π²ΡΠΌΠΈ. ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠ΅ Π·Π° ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ ΠΈ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ, ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ ΠΈ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΎΠ±ΡΠ΅ΠΌΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΡ Π΄Π°Π½Π½ΡΡ ΠΏΠΎ ΡΠ΅ΡΠΈ. Π ΡΠ°ΠΊΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΎΠ±ΡΠ°Π·ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΡΠΎΠ²Π΅Π½Ρ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅, Π° ΡΠ΅ΡΠ²ΠΈΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ. ΠΠ²ΡΡ ΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΠΌΠ°ΡΡΡΠ°Π±Π°Ρ ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΡΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ (Π΄ΠΎ 100) ΠΈ Π±ΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡΠ΅ΠΉ Π·Π°ΡΠΈΡΠ΅Π½Π½ΠΎΠΉ ΡΠ΅ΡΠΈ. ΠΡΠ»Π°Π΄ΠΊΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ:
Ρ Π΄Π΅Π»Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ, Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π², ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°ΠΌΠΈ Π² ΡΠ΅ΡΠΈ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π·Π°ΠΌΠ΅Π½Π°, ΡΠ΅ΠΌΠΎΠ½Ρ, ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π΅ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ²;
Ρ Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ°Π½ΡΡΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π·Π°ΡΠΈΡΡΠ½ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π»ΡΡΡΠ΅ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ². ΠΠ° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΏΡΠΎΡΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡΠΈΠΉ, ΡΡΠΎΠ±Ρ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΄Π°Π½Π½ΡΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΠΏΡΠ°Π²Π°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ°;
Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΡΡΡΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠ°ΡΡΠΎ ΠΌΠΎΠ³ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΌΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΠΌΠΈ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ ΠΈ Ρ. ΠΏ.
ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ:
Ρ Π½Π΅ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΠΉ Π²ΡΡ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅ΡΡ;
Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°Π±ΠΎΡΡ Π΄Π°Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠ° — ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°;
Ρ Π²ΡΡΠΎΠΊΠ°Ρ ΡΡΠΎΠΈΠΌΠΎΡΡΡ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΡ.
1.2.1ΠΠ΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½Π°Ρ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΡΠΈ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΈ (direct communication) ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½ΡΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π° ΡΠ²Π½ΠΎ — ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ ΠΈΠ»ΠΈ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΠ°ΠΌ (ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌ), ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π² Π²ΡΠ·ΠΎΠ²Π°Ρ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
Ρ send (P, message) — ΠΏΠΎΡΠ»Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ P;
Ρ receive (Q, message) — ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° Q.
ΠΡΠΈ Π΄Π°Π½Π½ΠΎΠΌ ΡΠΏΠΎΡΠΎΠ±Π΅ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π»ΠΈΠ½ΠΈΠΈ ΡΠ²ΡΠ·ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅:
Ρ ΡΠ²ΡΠ·Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ (Π΅Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈΠ»ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ);
Ρ ΡΠ²ΡΠ·Ρ Π°ΡΡΠΎΡΠΈΠΈΡΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°ΡΠΎΠΉ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²;
Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°ΡΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π²ΡΠ΅Π³Π΄Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° ΡΠ²ΡΠ·Ρ;
Ρ ΡΠ²ΡΠ·Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΎΠ½Π° Π΄Π²ΡΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½Π°Ρ (ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠ²Π½ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈ ΠΏΡΠΈΠ½ΡΡΡ ΠΎΡ Π½Π΅Π³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅).
1.2.2 ΠΠΎΡΠ²Π΅Π½Π½Π°Ρ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΡΠΈ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΈ (indirect communication) ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΡΡΠΎΠ²ΡΠ΅ ΡΡΠΈΠΊΠΈ (mailboxes), ΠΈΠ»ΠΈ ΠΏΠΎΡΡΡ (ports) — ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΏΡΠΈΠ΅ΠΌΠ°, Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. ΠΠ»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡΠΈ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠΌΠΈΠ½ ΠΏΠΎΡΡΠΎΠ²ΡΠΉ ΡΡΠΈΠΊ.
ΠΡΠΈ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎΠΌ ΡΠΏΠΎΡΠΎΠ±Π΅ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π½Π°Π±ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²ΠΈΠ΄Π°:
Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΡΠΎΠ²ΡΠΉ ΡΡΠΈΠΊ;
Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ (ΠΏΡΠΈΠ½ΡΡΡ) ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΡΡΠΎΠ²ΡΠΉ ΡΡΠΈΠΊ;
Ρ ΡΠ΄Π°Π»ΠΈΡΡ ΠΏΠΎΡΡΠΎΠ²ΡΠΉ ΡΡΠΈΠΊ
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π²ΠΈΠ΄:
Ρ send (A, message) — ΠΏΠΎΡΠ»Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΠΎΡΡΠΎΠ²ΡΠΉ ΡΡΠΈΠΊ A;
Ρ receive (A, message) — ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠΎΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠΈΠΊΠ° A.
1.2.3 ΠΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π‘ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠ΅ΠΉ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Π°Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ²:
Ρ Π½ΡΠ»Π΅Π²Π°Ρ Π΅ΠΌΠΊΠΎΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½Π΅ ΠΌΠΎΠ³ΡΡ Ρ ΡΠ°Π½ΠΈΡΡΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΆΠ΄Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ;
Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½Π°Ρ Π΅ΠΌΠΊΠΎΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ — ΠΊΠΎΠ½Π΅ΡΠ½Π°Ρ Π΄Π»ΠΈΠ½Π° ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ Ρ ΡΠ°Π½ΠΈΡΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ n ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. ΠΠ°Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΡΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊΠ°ΠΊ ΡΠΆΠ΅ ΠΎΡΠΌΠ΅ΡΠ°Π»ΠΎΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ Π°ΡΠ°ΠΊΠΈ «buffer overrun», Ρ. Π΅. Π² Π»ΡΠ±ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π΄Π»ΠΈΠ½Ρ Π±ΡΡΠ΅ΡΠ° (ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ). ΠΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΆΠ΄Π°ΡΡ, Π΅ΡΠ»ΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π°;
Ρ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½Π°Ρ Π΅ΠΌΠΊΠΎΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ — ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΡ Π΄Π»ΠΈΠ½Ρ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΆΠ΄Π΅Ρ.
1.2.4 Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΠΠ‘ ΠΠΎΠ»Π΅Π΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΠ‘. Π ΠΠ‘ Windows ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Ρ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, cΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ:
Ρ ΡΠΎΠ±ΡΡΠΈΡ ;
Ρ ΠΌΡΡΡΠ΅ΠΊΡΡ ;
Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ .
ΠΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π½Π°Π·ΡΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΈΠ΄Π½Ρ Π²ΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ. Π² ΡΠΎΠ³Π° ΡΠΈΡΠ»Π΅ ΠΈ ΡΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΡΠ°Π·Π½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ. ΠΠ±ΡΠ΅ΠΊΡΡ ΠΌΠΎΠ³ΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² Π΄Π²ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡΡ : ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΌ ΠΈ Π·Π°Π½ΡΡΠΎΠΌ. Π‘ΠΌΡΡΠ» «ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅» Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΠΎΠΊ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ. Π€Π°ΠΉΠ» ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ. Π‘Π΅ΠΌΠ°ΡΠΎΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, Π΅ΡΠ»ΠΈ Π΅Π³ΠΎ ΡΡΠ΅ΡΡΠΈΠΊ Π±ΠΎΠ»ΡΡΠ΅ Π½ΡΠ»Ρ, ΠΌΡΡΡΠ΅ΠΊΡ — Π΅ΡΠ»ΠΈ ΠΎΠ½ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½. Π‘ΠΎΠ±ΡΡΠΈΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, Π΅ΡΠ»ΠΈ Π΅Π³ΠΎ ΡΠ»Π°Π³ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ (ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ) ΠΠ±ΡΠ΅ΠΊΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ. CreateMutex Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠ°). ΠΡΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΡΡΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΠΈ Π΅Π³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ°ΠΌΠΈ, ΡΠΎ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΈΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΡΠΊΡΡΡΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΎΡΠΊΡΡΡΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠpenMutex). ΠΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΡΠΈΠΏΠ° ReleaseMutex. ΠΠ»Ρ Π΄ΡΡΠ³ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π‘Π»Π΅Π΄ΠΈΡΡ Π·Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ². Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ WaitForSingleObject (). Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ. ΠΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ΡΠΎ ΠΎΠ½Π° ΡΡΡ ΠΆΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ·Π²Π°Π²ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΈ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ Π΅ΠΉ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
1.2.5 ΠΡΠΈΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ΅ΠΊΡΠΈΡ ΠΠ°ΠΆΠ½ΡΠΌ ΠΏΠΎΠ½ΡΡΠΈΠ΅ΠΌ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ½ΡΡΠΈΠ΅ «ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠΈΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ΅ΠΊΡΠΈΡ — ΡΡΠΎ ΡΠ°ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎ ΠΌΠ΅Π½ΡΡΡΡΡ, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΎΡΠ½ΠΎΡΡΡΠΈΠ΅ΡΡ ΠΊ ΡΡΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΡΠ°ΡΡΠΈ Π΅ΡΠ΅ Π½Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΎ. ΠΡΠΈΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ΅ΠΊΡΠΈΡ Π²ΡΠ΅Π³Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π΄Π°Π½Π½ΡΠΌ, ΠΏΡΠΈ Π½Π΅ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ. Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ ΡΠ²Π»ΡΠ»ΠΈΡΡ Π·Π°ΠΏΠΈΡΠΈ ΡΠ°ΠΉΠ»Π° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΠΎ Π²ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠ°Ρ , ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Ρ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ, Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ΅ΠΊΡΠΈΡ. ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ Π² ΡΠ°Π·Π½ΡΡ ΠΏΠΎΡΠΎΠΊΠ°Ρ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ΅ΠΊΡΠΈΡ ΡΠΎΡΡΠΎΠΈΡ Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΠ· ΡΠ°Π·Π½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄.
Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ Π² ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ ΡΠ°ΠΌΡΠΉ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΡ Π·Π°ΠΏΡΠ΅ΡΠ°ΡΡ Π»ΡΠ±ΡΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π½Π° Π²ΡΠ΅ΠΌΡ Π΅Π³ΠΎ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎΡ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠΏΠ°ΡΠ½ΠΎ Π΄ΠΎΠ²Π΅ΡΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ — ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π½Π°Π΄ΠΎΠ»Π³ΠΎ Π·Π°Π½ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ, Π° ΠΏΡΠΈ ΠΊΡΠ°Ρ Π΅ ΠΏΠΎΡΠΎΠΊΠ° Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ ΠΊΡΠ°Ρ ΠΏΠΎΡΠ΅ΡΠΏΠΈΡ Π²ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ΄ΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ.
1.2.6 ΠΠ·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΠ±ΡΠ΅ΠΊΡΡ-Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ (ΠΌΡΡΡΠ΅ΠΊΡΡ) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΌΡ ΡΠ΅ΡΡΡΡΡ. Π‘ΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (Ρ.Π΅. ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ «ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½») ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΌΠΎΠΌΠ΅Π½ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ «Π·Π°Ρ Π²Π°ΡΠΈΡΡ». Π Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ «ΡΠ±ΡΠΎΡΠ΅Π½» (Π½Π΅ ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅) ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΌΠΎΠΌΠ΅Π½ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΡΠΎΠΊ ΡΠΆΠ΅ Π²Π»Π°Π΄Π΅Π΅Ρ ΡΡΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ. ΠΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠΎΠΊ, Π²Π»Π°Π΄Π΅ΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ Π΅Π³ΠΎ.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΡΠ²ΠΈΡΡ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΠΌ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ ΠΏΠΎΡΠΎΠΊΡ, Π½Π°Π΄ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ· ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠΎΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΌΠΎΠΆΠ΅Ρ Π΅Π³ΠΎ «Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ» ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ ΡΠ°Π· (ΡΡΠΎ Π½Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΠ°ΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ΅), Π½ΠΎ ΡΡΠΎΠ»ΡΠΊΠΎ ΠΆΠ΅ ΡΠ°Π· ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ΄Π΅Ρ Π΅Π³ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ReleaseMutex.
1.2.7 Π‘ΠΎΠ±ΡΡΠΈΡ ΠΠ±ΡΠ΅ΠΊΡΡ-ΡΠΎΠ±ΡΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΎ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΡΠΎΠ±ΡΡΠΈΡ. Π Π°Π·Π»ΠΈΡΠ°ΡΡ Π΄Π²Π° Π²ΠΈΠ΄Π° ΡΠΎΠ±ΡΡΠΈΠΉ — Ρ ΡΡΡΠ½ΡΠΌ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ±ΡΠΎΡΠΎΠΌ. Π ΡΡΠ½ΠΎΠΉ ΡΠ±ΡΠΎΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ResetEvent. Π‘ΠΎΠ±ΡΡΠΈΡ Ρ ΡΡΡΠ½ΡΠΌ ΡΠ±ΡΠΎΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΡΡΠ°Π·Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΡ Ρ Π°Π²ΡΠΎΡΠ±ΡΠΎΡΠΎΠΌ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ ΡΠ²ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ, ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ Π±ΡΠ΄ΡΡ ΠΎΠΆΠΈΠ΄Π°ΡΡ Π΄Π°Π»ΡΡΠ΅.
Π€ΡΠ½ΠΊΡΠΈΡ CreateEvent ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ-ΡΠΎΠ±ΡΡΠΈΠ΅, SetEvent — ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ResetEvent-ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅. Π€ΡΠ½ΠΊΡΠΈΡ PulseEvent ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅, Π° ΠΏΠΎΡΠ»Π΅ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² (Π²ΡΠ΅Ρ ΠΏΡΠΈ ΡΡΡΠ½ΠΎΠΌ ΡΠ±ΡΠΎΡΠ΅ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ), ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ Π΅Π³ΠΎ. ΠΡΠ»ΠΈ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π½Π΅Ρ, PulseEvent ΠΏΡΠΎΡΡΠΎ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅.
1.2.8 Π‘Π΅ΠΌΠ°ΡΠΎΡΡ ΠΠ±ΡΠ΅ΠΊΡ-ΡΠ΅ΠΌΠ°ΡΠΎΡ — ΡΡΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ-Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎ ΡΡΠ΅ΡΡΠΈΠΊΠΎΠΌ. ΠΠ°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ «Π·Π°Ρ Π²Π°ΡΠΈΡΡ» ΡΠ΅Π±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ «Π·Π°Ρ Π²Π°Ρ» Π±ΡΠ΄Π΅Ρ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½, ΠΏΠΎΠΊΠ° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°Π½Π΅Π΅ «Π·Π°Ρ Π²Π°ΡΠΈΠ²ΡΠΈΡ » ΡΠ΅ΠΌΠ°ΡΠΎΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ Π΅Π³ΠΎ. Π‘Π΅ΠΌΠ°ΡΠΎΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Ρ ΡΠ΅ΡΡΡΡΠΎΠΌ.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΊΡΡΡΡ (ΡΠΎΠ·Π΄Π°ΡΡ) ΡΠ΅ΠΌΠ°ΡΠΎΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ OpenSemaphore (), ΡΠΊΠ°Π·Π°Π² Π΅Π³ΠΎ ΠΈΠΌΡ. Π€ΡΠ½ΠΊΡΠΈΡ, ΠΎΡΠΊΡΡΠ²Π°ΡΡΠ°Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π½Π°Π΄ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠΌ.
Π‘ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠΌ ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ -127 Π΄ΠΎ 127. ΠΡΠΎ ΡΠΈΡΠ»ΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΡΠ΅ΡΡΠΈΠΊ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΠΎΡΠΊΡΡΠ²ΡΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡ. ΠΡΠΎΡ ΡΡΠ΅ΡΡΠΈΠΊ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° 1, ΠΊΠΎΠ³Π΄Π° ΠΎΡΠ΅ΡΠ΅Π΄Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ OpenSemaphore (), ΠΈ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ CloseSemaphore (). ΠΠΎΠ³Π΄Π° ΡΡΠ΅ΡΡΠΈΠΊ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠ΅ΠΌΠ°ΡΠΎΡ ΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅ΡΡΡ.
ΠΠ΅ΡΠ΅Π΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠ°, Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ²ΡΠ·Π°Π½ ΡΠ΅ΠΌΠ°ΡΠΎΡ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΌΠ΅Π½ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°, Π²ΡΠ·Π²Π°Π² ΡΡΠ½ΠΊΡΠΈΡ WaitOnSemaphore (). ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½ΡΠ»Ρ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΡΡΡΡ. ΠΡΠ»ΠΈ ΠΆΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡ ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΡΠ½ΠΊΡΠΈΡ WaitOnSemaphore () ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π΅ΠΉ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ΅ΡΡΡΡΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°, Π²ΡΠ·Π²Π°Π² ΡΡΠ½ΠΊΡΠΈΡ SignalSemaphore ().
ΠΠ°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° Π·Π°Π΄Π°Π΅ΡΡΡ ΠΏΡΠΈ Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΈ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ°Π²Π½ΠΎ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅.
1.2.9 Π‘ΠΎΠΊΠ΅ΡΡ Windows
Windows Sockets API (WSA), Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ»ΠΎ ΡΠΊΠΎΡΠΎΡΠ΅Π½ΠΎ Π΄ΠΎ Winsock. ΠΡΠΎ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΊΠ°ΠΊ ΡΠ΅ΡΠ΅Π²ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ Windows Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΡΠ΅Π²ΡΠΌ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅, TCP/IP. ΠΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ (ΡΠ°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ FTP-ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈΠ»ΠΈ Π²Π΅Π±-Π±ΡΠ°ΡΠ·Π΅Ρ) ΠΈ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΡΡΠ΅ΠΊΠΎΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ² TCP/IP. ΠΠ½ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π½Π° API ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠΎΠΊΠ΅ΡΠΎΠ² ΠΠ΅ΡΠΊΠ»ΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅ΠΉΡΡ Π² BSD Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ.
ΠΡΡΡ Π΄Π²Π΅ Π²Π΅ΡΡΠΈΠΈ WinSock
Ρ WinSock 1.1 — ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΎΠ»ΡΠΊΠΎ TCP/IP
Ρ WinSock 2.0 — ΠΠΎΠ΄Π΄Π΅ΡΠΊΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ WinSock ΡΠ°Π·Π΄Π΅Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° ΡΡΠΈ ΡΠΈΠΏΠ°:
Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΠ΅ΡΠΊΠ»ΠΈ;
Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ (ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ Π΄ΠΎΠΌΠ΅Π½ΠΎΠ², ΡΠ»ΡΠΆΠ±Π°Ρ , ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°Ρ Internet);
Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Windows Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΠ΅ΡΠΊΠ»ΠΈ;
ΠΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠ΅ ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠ΅. ΠΠ±ΡΡΠ½ΠΎ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠ΅ ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΠ΅ΡΠΊΠ»ΠΈ. Π’ΠΎ Π΅ΡΡΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΡΠ°ΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅Π»ΡΠ·Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ WinSock.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ°ΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ. Π‘Π½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊ Π°Π΄ΡΠ΅ΡΡ IP Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ ΡΠΎΠΊΠ΅ΡΠ°. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ΄Π΅Ρ ΠΆΠ΄Π°ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΠ»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΠΎΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠΎΠΊΠ΅Ρ ΠΈ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΊ ΡΠΎΠΊΠ΅ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°. Π’ΠΎΠ»ΡΠΊΠΎ ΠΎΠ½ ΡΠ²ΠΈΠ΄ΠΈΡ ΠΏΠΎΠΏΡΡΠΊΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠ½ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠΎΠΊΠ΅Ρ. Π ΡΡΠΎΡ Π½ΠΎΠ²ΡΠΉ ΡΠΎΠΊΠ΅Ρ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ. Π ΡΠΎΡ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ»Π° ΠΏΠΎΠΏΡΡΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΆΠ΄Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ. ΠΠ° ΡΡΠΎΠΉ ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ.
Π‘Π°ΠΌ ΡΠΎΠΊΠ΅Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅:
Ρ TCP (transport control protocol) — Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅;
Ρ UDP (user datagram protocol) — Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ.
1.3 Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΡΠ°Π±ΠΎΡΡ
1.3.1 Π‘ΠΎΡΡΠ°Π² ΠΈ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π ΡΠΎΡΡΠ°Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠ³ΠΎ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ Π²Ρ ΠΎΠ΄ΡΡ:
Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°;
Ρ Π΄Π²Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ².
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° — ΡΠ΅ΡΠ²Π΅Ρ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:
Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠ°;
Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ — ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ²;
Ρ ΠΏΠΎΡΡΠ»Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ;
Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π² Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ-ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ Π΅Π΅ Π² ΡΠ°Π±ΠΎΡΠ΅Π΅ ΠΎΠΊΠ½ΠΎ;
Ρ ΠΎΡΠΊΠ»ΡΡΠ°ΡΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°-ΠΊΠ»ΠΈΠ΅Π½Ρ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:
Ρ ΠΎΡΠΊΡΡΡΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠ°;
Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ-ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ;
Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅-ΡΠ΅ΡΠ²Π΅ΡΡ;
Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ Π² ΡΠ°Π±ΠΎΡΠ΅Π΅ ΠΎΠΊΠ½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ-ΡΠ΅ΡΠ²Π΅ΡΠ°;
Ρ ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΠ± ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°.
1.3.2 ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ-ΡΠ΅ΡΠ²Π΅ΡΠ°
1.3.2.1 ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π΄Π°Π½ΠΎ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ 1.3.
Π’Π°Π±Π»ΠΈΡΠ° 1.3- ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ-ΡΠ΅ΡΠ²Π΅Ρ
ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ΅ΠΊΡΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | |
char szBuf[512]; | ΠΡΡΠ΅Ρ Π΄Π»Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½ΡΡ | |
DWORD cbWritten; | ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ | |
static HWND hwndEdit; | ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΠΎΠ»Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ° | |
TCHAR mess[2048]; | ΠΡΡΠ΅Ρ Π΄Π»Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ | |
TCHAR* m_mess = mess; | Π‘ΡΡΠ»ΠΊΠ° Π½Π° Π±ΡΡΠ΅Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ | |
#define SERV_PORT 5000 | ΠΠΎΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ° | |
#define WSA_ACCEPT (WM_USER+0) | ΠΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° | |
#define WSA_NETEVENT (WM_USER+1) | ΠΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ ΡΠ΅ΡΠ΅Π²ΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΈ | |
WSADATA wsaData; | Π‘Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΊΠΎΠ½ΠΊΡ. ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Windows Sockets | |
WORD wVersionRequested = MAKEWORD (1, 1); | ΠΠΎΠΌΠ΅Ρ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Windows Sockets (Π½Π΅ Π½ΠΈΠΆΠ΅) | |
int err=0; | ΠΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ | |
SOCKET srv_socket=INVALID_SOCKET; | Π‘ΠΎΠΊΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° | |
int ClientNum = -1; | ΠΠΎΠΌΠ΅Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° | |
SOCKET sock[2]; | Π‘ΠΎΠΊΠ΅ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² | |
SOCKADDR_IN sockaddr[2]; | ΠΠ΄ΡΠ΅ΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² | |
1.3.2.2 ΠΡΠΎΡΠ΅Π΄ΡΡΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΠΊΠ΅ΡΠ° ΠΡΠΎΡΠ΅Π΄ΡΡΠΎΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:
Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΡΡΡ Π·Π°Π΄Π°Π½ΠΈΡ ΡΠΎΠΊΠ΅ΡΠ°;
Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΡΠΎΠΊΠ΅ΡΠ° ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠΎΠΊΠ΅ΡΠ°;
Ρ Π·Π°Π΄Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠ° ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠ° ΠΈ Π½ΠΎΠΌΠ΅ΡΠ° ΠΏΠΎΡΡΠ° Π΄Π»Ρ ΡΠΎΠΊΠ΅ΡΠ°;
Ρ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠ° Ρ Π°Π΄ΡΠ΅ΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ;
Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ΅ΠΆΠΈΠΌΠ° ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠΈ Π΄Π»Ρ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠΏΡΡΠΎΠΊ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΡΠΎΠΊΠ΅ΡΠΎΠΌ;
Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ΅ΠΆΠΈΠΌΠ° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΡΠΎΠΊΠ΅ΡΠΎΠΌ.
Π‘Ρ Π΅ΠΌΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.1.
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΡΡΡ Π·Π°Π΄Π°Π½ΠΈΡ ΡΠΎΠΊΠ΅ΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ 2,3 (ΡΠΈΡΡΠ½ΠΎΠΊ 1.1) .
Π ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠΉ ΡΠΎΠΊΠ΅Ρ ΠΈ Π·Π°Π΄Π°Π΅ΡΡΡ ΡΡΡΡΠΊΡΡΡΠ° Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ (Π±Π»ΠΎΠΊΠΈ 5−7, ΡΠΈΡΡΠ½ΠΎΠΊ 1.1).
ΠΠ»Ρ ΡΠΎΠΊΠ΅ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎ Π°Π΄ΡΠ΅ΡΠΎΠ². IP Π°Π΄ΡΠ΅Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ — ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Ρ ΠΎΡΡΠ° 127.0.0.1. ΠΠΎΠΌΠ΅Ρ ΠΏΠΎΡΡΠ° Π²ΡΠ±ΡΠ°Π½ ΠΈΠ· ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈ ΡΠ°Π²Π΅Π½ 5000. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ htons ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π±Π°ΠΉΡΠΎΠ² ΡΡΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π±Π°ΠΉΡΠΎΠ² — ΠΏΠ΅ΡΠ²ΡΠΌ ΠΈΠ΄Π΅Ρ ΡΡΠ°ΡΡΠΈΠΉ Π±Π°ΠΉΡ. ΠΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ 9−10 Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.1.
Π ΠΈΡΡΠ½ΠΎΠΊ 1.1 — Π‘Ρ Π΅ΠΌΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠ° Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° Π‘Π²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠ° Ρ Π°Π΄ΡΠ΅ΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ 11−14 Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.1.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ΅ΠΆΠΈΠΌΠ° ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠΈ Π΄Π»Ρ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠΏΡΡΠΎΠΊ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΡΠΎΠΊΠ΅ΡΠΎΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ 15−17 Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.1.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ΅ΠΆΠΈΠΌΠ° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΡΠΎΠΊΠ΅ΡΠΎΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ 18−21 Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.1.
1.3.2.3 ΠΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° Π‘Ρ Π΅ΠΌΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.2. ΠΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² Π΄Π²Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ: ΡΠ½Π°ΡΠ°Π»Π° ΠΎΡΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ΅Π°ΠΊΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ΅ΡΠ΅Π²ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΡΠΎΠΊΠ΅ΡΠ° (Π±Π»ΠΎΠΊ 2, ΡΠΈΡΡΠ½ΠΎΠΊ 1.2), Π° Π·Π°ΡΠ΅ΠΌ, Π΅ΡΠ»ΠΈ ΡΠΎΠΊΠ΅Ρ Π±ΡΠ» ΡΠΎΠ·Π΄Π°Π½, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π·Π°ΠΊΡΡΡΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠ° (Π±Π»ΠΎΠΊΠΈ 3 -6, ΡΠΈΡΡΠ½ΠΎΠΊ 1.2).
Π ΠΈΡΡΠ½ΠΎΠΊ 1.2 — Π‘Ρ Π΅ΠΌΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°
1.3.2.4 ΠΡΠΎΡΠ΅Π΄ΡΡΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π‘Ρ Π΅ΠΌΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.3. ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ SOCKADDR (Π±Π»ΠΎΠΊ 2, ΡΠΈΡΡΠ½ΠΎΠΊ 1.3), ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ accept, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ ΡΠΎΠΊΠ΅Ρ Ρ Π½ΠΎΠ²ΡΠΌ Π°Π΄ΡΠ΅ΡΠΎΠΌ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΅Π³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ (Π±Π»ΠΎΠΊ 3, ΡΠΈΡΡΠ½ΠΎΠΊ 1.3). ΠΡΠ»ΠΈ ΡΠΎΠΊΠ΅Ρ Π±ΡΠ» ΡΠΎΠ·Π΄Π°Π½, ΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ Π² ΠΏΡΠΈΡΠ΅Π΄ΡΠ΅ΠΌ Π·Π°ΠΏΡΠΎΡΠ΅ Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΡΠΎΠΊΠ΅ΡΠ° ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ TRUE, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ FALSE (Π±Π»ΠΎΠΊΠΈ 4 — 9, ΡΠΈΡΡΠ½ΠΎΠΊ 1.3).
Π ΠΈΡΡΠ½ΠΎΠΊ 1.3 — Π‘Ρ Π΅ΠΌΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ
1.3.2.5 «ΠΠΊΠΎΠ½Π½Π°Ρ» ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ-ΡΠ΅ΡΠ²Π΅ΡΠ° Π‘Ρ Π΅ΠΌΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.4. Π ΡΡ Π΅ΠΌΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΎΡΡΠ°ΠΆΠ΅Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΡΠΎΠΊΠ΅ΡΠ°ΠΌΠΈ.
ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ-ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°, ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ°, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΎΠΊΠ΅ΡΠ°ΠΌΠΈ ΠΈ ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ 4 — 9 Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.4, Π»ΠΈΡΡ1.
ΠΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ WSA_NETEVENT — ΠΎ ΡΠ΅ΡΠ΅Π²ΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΈ ΠΎΡ ΡΠΎΠΊΠ΅ΡΠ°, WSA_ACCEPT — ΠΎ Π·Π°ΠΏΡΠΎΡΠ΅ Π½Π° ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ WM_DESTROY ΠΎ Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ-ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π°Π΄ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΎΠΊΠ΅ΡΠ°ΠΌΠΈ. ΠΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ 3,10, 11 — 13 Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.4, Π»ΠΈΡΡ1.
ΠΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ WM_COMMAND ΠΎ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π΅Π΅ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ. ΠΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ 1 — 8 Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.4, Π»ΠΈΡΡ 2.
Π ΠΈΡΡΠ½ΠΎΠΊ 1.4, Π»ΠΈΡΡ 1 — Π‘Ρ Π΅ΠΌΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° «ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ» ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ-ΡΠ΅ΡΠ²Π΅ΡΠ° Π ΠΈΡΡΠ½ΠΎΠΊ 1.4, Π»ΠΈΡΡ 2.
1.3.3ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
1.3.3.1ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π΄Π°Π½ΠΎ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ 1.2.
Π’Π°Π±Π»ΠΈΡΠ° 1.2- ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ΅ΠΊΡΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | |
char szBuf[512]; | ΠΡΡΠ΅Ρ Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½ΠΎΠ² ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ | |
DWORD cbWritten; | ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±Π°ΠΉΡΠΎΠ², Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π² Π±ΡΡΠ΅Ρ | |
static HWND hwndEdit; | ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΠΎΠ»Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ | |
TCHAR mess[2048]; | ΠΡΡΠ΅Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π½Π° ΡΠΊΡΠ°Π½ | |
TCHAR* m_mess = mess; | Π‘ΡΡΠ»ΠΊΠ° Π½Π° Π±ΡΡΠ΅Ρ | |
#define SERV_PORT 5000 | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° ΠΏΠΎΡΡΠ° ΡΠΎΠΊΠ΅ΡΠ° | |
#define WSA_NETEVENT (WM_USER+1) | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ ΡΠ΅ΡΠ΅Π²ΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΈ | |
WSADATA wsaData; | ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Windows Sockets | |
WORD wVersionRequested = MAKEWORD (1, 1); | ΠΠΎΠΌΠ΅Ρ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Windows Sockets | |
int err=0; | ΠΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ | |
SOCKET cln_socket=INVALID_SOCKET; | Π‘ΠΎΠΊΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° | |
static PHOSTENT phe; | ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π·Π°ΠΏΡΡΠ΅Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°-ΡΠ΅ΡΠ²Π΅Ρ | |
SOCKADDR_IN dest_sin; | ΠΠ΄ΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° | |
char szHostName[128] = «localhost» ; | ΠΈΠΌΡ Ρ ΠΎΡΡΠ° | |
1.3.3.2ΠΡΠΎΡΠ΅Π΄ΡΡΠ° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Π‘Ρ Π΅ΠΌΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.5. ΠΡΠΎΡΠ΅Π΄ΡΡΠΎΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:
Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΡΠΎΠΊΠ΅ΡΠ° ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠΎΠΊΠ΅ΡΠ°;
Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ° Ρ ΠΎΡΡΠ°;
Ρ Π·Π°Π΄Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠ° ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠ° ΠΈ Π½ΠΎΠΌΠ΅ΡΠ° ΠΏΠΎΡΡΠ° Π΄Π»Ρ ΡΠΎΠΊΠ΅ΡΠ°;
Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ;
Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ΅ΠΆΠΈΠΌΠ° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΡΠΎΠΊΠ΅ΡΠΎΠΌ.
Π ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠΉ ΡΠΎΠΊΠ΅Ρ ΠΈ Π·Π°Π΄Π°Π΅ΡΡΡ ΡΡΡΡΠΊΡΡΡΠ° Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ (Π±Π»ΠΎΠΊΠΈ 1−5, ΡΠΈΡΡΠ½ΠΎΠΊ 1.5.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ gethostbyname ΠΏΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠΌΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° Π² ΡΠ΅ΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π΅Π³ΠΎ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ Π°Π΄ΡΠ΅Ρ. ΠΠ»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ, ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π°Π΄Π°Π΅ΡΡΡ ΠΈΠΌΡ «localhost». ΠΡΠ»ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½Π°Ρ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ Π½Π° ΡΠ°Π·Π½ΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°Ρ ΡΠ΅ΡΠΈ, ΡΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΈ Ρ ΠΎΡΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΡΡΠ°Π·Ρ IP Π°Π΄ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°-Ρ ΠΎΡΡΠ°. ΠΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ 6 — 9 Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.5 .
ΠΠ»Ρ ΡΠΎΠΊΠ΅ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎ Π°Π΄ΡΠ΅ΡΠΎΠ². ΠΠΎΠΌΠ΅Ρ ΠΏΠΎΡΡΠ° Π²ΡΠ±ΡΠ°Π½ ΠΈΠ· ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈ ΡΠ°Π²Π΅Π½ 5000. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ htons ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π±Π°ΠΉΡΠΎΠ² ΡΡΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π±Π°ΠΉΡΠΎΠ² — ΠΏΠ΅ΡΠ²ΡΠΌ ΠΈΠ΄Π΅Ρ ΡΡΠ°ΡΡΠΈΠΉ Π±Π°ΠΉΡ. ΠΠ΄ΡΠ΅Ρ Ρ ΠΎΡΡΠ° ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ Π² ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΡΠΎΠΊΠ΅ΡΠ°. ΠΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ 10−11 Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.5 .
Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠ° Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ 12−15 Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.5. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ΅ΠΆΠΈΠΌΠ° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΡΠΎΠΊΠ΅ΡΠΎΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ 16−21 Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.5 .
Π ΠΈΡΡΠ½ΠΎΠΊ 1.5 — Π‘Ρ Π΅ΠΌΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ
1.3.3.3ΠΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΏΠΎΡΡΠ»ΠΊΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠ΅ΡΠ²Π΅ΡΡ Π‘Ρ Π΅ΠΌΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.6. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ SendMessage ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π΄Π»ΠΈΠ½Π° Π±Π»ΠΎΠΊΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΠ° ΡΡΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π² Π±ΡΡΠ΅Ρ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ send Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΊΡΠ°Π½. ΠΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ 1−8 Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.6.
Π ΠΈΡΡΠ½ΠΎΠΊ 1.6 — Π‘Ρ Π΅ΠΌΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΏΠΎΡΡΠ»ΠΊΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠ΅ΡΠ²Π΅ΡΡ
1.3.3.4"ΠΠΊΠΎΠ½Π½Π°Ρ" ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ-ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π‘Ρ Π΅ΠΌΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.7. Π ΡΡ Π΅ΠΌΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΎΡΡΠ°ΠΆΠ΅Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΡΠΎΠΊΠ΅ΡΠ°ΠΌΠΈ.
ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ-ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°, ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ°, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΎΠΊΠ΅ΡΠ°ΠΌΠΈ ΠΈ ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ 3 — 7 Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.7.
ΠΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ WSA_NETEVENT — ΠΎ ΡΠ΅ΡΠ΅Π²ΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΈ ΠΎΡ ΡΠΎΠΊΠ΅ΡΠ°. ΠΠ½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈΠ½ΡΡΡΠΉ ΠΊΠΎΠ΄ ΡΠΎΠ±ΡΡΠΈΡ. ΠΡΠ»ΠΈ ΡΡΠΎ ΠΊΠΎΠ΄ ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ , ΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ recv ΠΏΡΠΈΠ΅ΠΌΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΈΠ· ΡΠΎΠΊΠ΅ΡΠ° Π² Π±ΡΡΠ΅Ρ. ΠΡΠ»ΠΈ ΡΡΠΎ ΠΊΠΎΠ΄ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΊΡΠ°Π½. ΠΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ 10 — 14 Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.7.
ΠΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ WM_DESTROY ΠΎ Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ-ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π°Π΄ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΎΠΊΠ΅ΡΠ°ΠΌΠΈ. ΠΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ 15 — 17 Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.7. ΠΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ WM_COMMAND ΠΎ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π΅Π΅ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ. ΠΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ 18 — 22 Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.7.
Π ΠΈΡΡΠ½ΠΎΠΊ 1.7 — Π‘Ρ Π΅ΠΌΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° «ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ» ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
1.4 Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡ Π² ΡΡΠ΅Π΄Π΅ Microsoft Visual Studio. Π Π°Π·ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ ΠΎΠ΄Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-ΡΠ΅ΡΠ²Π΅Ρ ΠΈ Π΄Π²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΠ»ΠΈ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ. ΠΠΎΠΏΠΈΠΈ ΡΠΊΡΠ°Π½ΠΎΠ² ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1.8.
Π ΠΈΡΡΠ½ΠΎΠΊ 1.8 — ΠΠΎΠΏΠΈΠΈ ΡΠΊΡΠ°Π½ΠΎΠ² ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
ΠΠ«ΠΠΠΠ«
Π Ρ ΠΎΠ΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠΎΠ±ΠΎΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Ρ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ. Π Π°Π·ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ ΠΈ ΠΎΡΠ»Π°ΠΆΠ΅Π½ΠΎ 3 ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ — ΡΠ΅ΡΠ²Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:
Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠΎΠ²;
Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ — ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ²;
Ρ Π²ΡΠ²ΠΎΠ΄ Π½Π° ΡΠΊΡΠ°Π½ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ².
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ — ΠΊΠ»ΠΈΠ΅Π½Ρ 1 Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:
Ρ ΠΎΡΠΊΡΡΡΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠ°;
Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ;
Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠ°ΠΊΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ:
a) ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΠ²Π΅ΡΠ° 2-Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ;
b) ΠΊΠΎΠ΄ ΡΠ°ΡΠΊΠ»Π°Π΄ΠΊΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ — ΠΊΠ»ΠΈΠ΅Π½Ρ 1 Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:
Ρ ΠΎΡΠΊΡΡΡΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠ°;
Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ;
Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠ°ΠΊΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ:
a)ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°;
b)Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
ΠΠΠ ΠΠ§ΠΠΠ¬ Π‘Π‘Π«ΠΠΠ
1. http://www.rsdn.ru/article/baseserv/mt.xml
2. http://vunivere.ru/work11218
3. ΠΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΊ ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΠΏΠΎ Π΄ΠΈΡΡΠΈΠΏΠ»ΠΈΠ½Π΅ «Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅» (Π΄Π»Ρ ΡΡΡΠ΄Π΅Π½ΡΠΎΠ² Π΄Π½Π΅Π²Π½ΠΎΠΉ ΠΈ Π·Π°ΠΎΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ, ΠΎΠ±ΡΡΠ°ΡΡΠΈΡ ΡΡ ΠΏΠΎ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ 6.50 102 «ΠΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½Π°Ρ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈΡ» / Π‘ΠΎΡΡ.: ΠΡΠ΅ΠΆΠ½Π΅Π² Π. Π. — Π‘Π΅Π²Π΅ΡΠΎΠ΄ΠΎΠ½Π΅ΡΠΊ: 2013. — 71 Ρ.
4. http://frolov-lib.ru/books/bsp/v23/ch53.html
5. http://gendocs.ru/v31765/?cc=32
6. http://life-prog.ru/view_linux.php?id=23
ΠΠ ΠΠΠΠΠΠΠΠ―
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π
Π Π°ΡΠΏΠ΅ΡΠ°ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΠ°
1. // Π‘Π΅ΡΠ²Π΅Ρ. cpp: ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΎΡΠΊΡ Π²Ρ ΠΎΠ΄Π° Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
2. //
3. #include «stdafx.h»
4. #include «Π‘Π΅ΡΠ²Π΅Ρ.h»
5. #include
6. #include
7. #include
8. #include
9. #include
10. #include
11. char szBuf[512];
12. DWORD cbWritten;
13. static HWND hwndEdit;
14. TCHAR mess[2048];
15. TCHAR* m_mess = mess;
16. #define SERV_PORT 5000// ΠΠΎΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°
17. #define WSA_ACCEPT (WM_USER+0)
18. #define WSA_NETEVENT (WM_USER+1)
19. #define MAX_LOADSTRING 100
20. WSADATA wsaData; //ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΊΠΎΠ½ΠΊΡ. ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Windows Sockets
21. WORD wVersionRequested = MAKEWORD (1, 1); //ΠΠΎΠΌΠ΅Ρ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Windows Sockets
22. int err=0;
23. SOCKET srv_socket=INVALID_SOCKET; // Π‘ΠΎΠΊΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°
24. int ClientNum = -1;// ΠΠΎΠΌΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
25. SOCKET sock[2]; // Π‘ΠΎΠΊΠ΅ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ²
26. SOCKADDR_IN sockaddr[2]; // ΠΠ΄ΡΠ΅ΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ²
27. // ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅:
28. HINSTANCE hInst;// ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ
29. TCHAR szTitle[MAX_LOADSTRING]; // Π’Π΅ΠΊΡΡ ΡΡΡΠΎΠΊΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°
30. TCHAR szWindowClass[MAX_LOADSTRING]; // ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ° Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°
31. HWND hWindow;
32. // ΠΡΠΏΡΠ°Π²ΠΈΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΡ Π² ΡΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΊΠΎΠ΄Π°:
33. ATOMMyRegisterClass (HINSTANCE hInstance);
34. BOOLInitInstance (HINSTANCE, int);
35. LRESULT CALLBACKWndProc (HWND, UINT, WPARAM, LPARAM);
36. INT_PTR CALLBACKAbout (HWND, UINT, WPARAM, LPARAM);
37. int APIENTRY _tWinMain (HINSTANCE hInstance,
38. HINSTANCE hPrevInstance,
39. LPTSTR lpCmdLine,
40. int nCmdShow)
41. {
42. UNREFERENCED_PARAMETER (hPrevInstance);
43. UNREFERENCED_PARAMETER (lpCmdLine);
44. // TODO: ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΠ΅ ΠΊΠΎΠ΄ Π·Π΄Π΅ΡΡ.
45. MSG msg;
46. HACCEL hAccelTable;
47. // ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΡΡΡΠΎΠΊ
48. LoadString (hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
49. LoadString (hInstance, IDC_MY, szWindowClass, MAX_LOADSTRING);
50. MyRegisterClass (hInstance);
51. // ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
52. if (!InitInstance (hInstance, nCmdShow))
53. {
54. return FALSE;
55. }
56. hAccelTable = LoadAccelerators (hInstance, MAKEINTRESOURCE (IDC_MY));
57. // Π¦ΠΈΠΊΠ» ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ:
58. while (GetMessage (&msg, NULL, 0, 0))
59. {
60. if (!TranslateAccelerator (msg.hwnd, hAccelTable, &msg))
61. {
62. TranslateMessage (&msg);
63. DispatchMessage (&msg);
64. }
65. }
66. return (int) msg. wParam;
67. }
68. //
69. // Π€Π£ΠΠΠ¦ΠΠ―: MyRegisterClass ()
70. //
71. // ΠΠΠΠΠΠ§ΠΠΠΠ: ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ ΠΊΠ»Π°ΡΡ ΠΎΠΊΠ½Π°.
72. //
73. // ΠΠΠΠΠΠΠ’ΠΠ ΠΠ:
74. //
75. // ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΈ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π΄Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄
76. // Π±ΡΠ» ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ Win32, Π½Π΅ ΠΈΠΌΠ΅ΡΡΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ RegisterClassEx'
77. // ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² Windows 95. ΠΡΠ·ΠΎΠ² ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π²Π°ΠΆΠ΅Π½ Π΄Π»Ρ ΡΠΎΠ³ΠΎ,
78. // ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎ «ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅» ΠΌΠ΅Π»ΠΊΠΈΠ΅ Π·Π½Π°ΡΠΊΠΈ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΎ ΡΠ²ΡΠ·Ρ
79. // Ρ Π½ΠΈΠΌΠΈ.
80. //
81. ATOM MyRegisterClass (HINSTANCE hInstance)
82. CS_VREDRAW;
86. wcex. lpfnWndProc= WndProc;
87. wcex. cbClsExtra= 0;
88. wcex. cbWndExtra= 0;
89. wcex. hInstance= hInstance;
90. wcex. hIcon= LoadIcon (hInstance, MAKEINTRESOURCE (IDI_MY));
91. wcex. hCursor= LoadCursor (NULL, IDC_ARROW);
92. wcex. hbrBackground= (HBRUSH)(COLOR_WINDOW+1);
93. wcex. lpszMenuName= MAKEINTRESOURCE (IDC_MY);
94. wcex. lpszClassName= szWindowClass;
95. wcex. hIconSm= LoadIcon (wcex.hInstance, MAKEINTRESOURCE (IDI_SMALL));
96. return RegisterClassEx (&wcex);
97.
98. //
99. // Π€Π£ΠΠΠ¦ΠΠ―: InitInstance (HINSTANCE, int)
100. //
101. // ΠΠΠΠΠΠ§ΠΠΠΠ: ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ.
102. //
103. // ΠΠΠΠΠΠΠ’ΠΠ ΠΠ:
104. //
105. Π Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅
106. // ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΡΠΊΡΠ°Π½ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
107. BOOL InitInstance (HINSTANCE hInstance, int nCmdShow)
108. {
109. HWND hWnd;
110. hInst = hInstance; // Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ
111. hWnd = CreateWindow (szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
112. CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
113. if (!hWnd)
114. {
115. return FALSE;
116. }
117. hWindow=hWnd;
118. ShowWindow (hWnd, nCmdShow);
119. UpdateWindow (hWnd);
120. return TRUE;
121. }
122. void ServerStart (HWND hWnd)
123. {
124. if (srv_socket ≠ INVALID_SOCKET)
125.
126. MessageBox (hWnd, «Socket ΡΠΆΠ΅ Π΅ΡΡΡ», «Info», MB_OK
129. // ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΎΠΊΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π΄Π°Π½Π½ΡΡ
130. srv_socket = socket (AF_INET, SOCK_STREAM, 0);
131. if (srv_socket == INVALID_SOCKET)
132.
133. MessageBox (hWnd, «ΠΡΠΈΠ±ΠΊΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΠΊΠ΅ΡΠ°!!!», «Error», MB_OK
136. // Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π°Π΄ΡΠ΅Ρ IP ΠΈ Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΡΡΠ°
137. SOCKADDR_IN srv_address;
138. srv_address.sin_family = AF_INET;
139. srv_address.sin_port = htons (SERV_PORT);
140. srv_address.sin_addr.s_addr = INADDR_ANY; // ΠΈΡΠΏ. Π°Π΄ΡΠ΅Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (Ρ.Π΅. Π»ΡΠ±ΠΎΠΉ)
141. // Π‘Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ Π°Π΄ΡΠ΅Ρ IP Ρ ΡΠΎΠΊΠ΅ΡΠΎΠΌ
142. if (SOCKET_ERROR ==bind (srv_socket,(LPSOCKADDR) &srv_address, sizeof (srv_address)))
143. MB_ICONSTOP);
146. return;
147.
148. // ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ²ΡΠ·ΠΈ
149. if (listen (srv_socket, 4) == SOCKET_ERROR)
150. {
151. closesocket (srv_socket);
152. MessageBox (hWnd, «ΠΡΠΈΠ±ΠΊΠ° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ²ΡΠ·ΠΈ» ," Error", MB_OK);
153. return;
154. }
155. // ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ WSA_ACCEPT
156. int rc = WSAAsyncSelect (srv_socket, hWnd, WSA_ACCEPT, FD_ACCEPT);
157. if (rc)
158. {
159. closesocket (srv_socket);
160. MessageBox (hWnd, «WSAAsyncSelect error» ," Error", MB_OK);
161. return;
162. }
163. // ΠΡΠ²ΠΎΠ΄ΠΈΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ°
164. SendMessage (hwndEdit, WM_SETTEXT, 0, (LPARAM) «Π‘Π΅ΡΠ²Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½»);
165. }
166. void ServerStop (HWND hWnd)
167. {
168. // ΠΎΡΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² Π³Π»Π°Π²Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠΊΠ½Π° ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ
169. // Π»ΡΠ±ΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Windows Sockets
170. WSAAsyncSelect (srv_socket, hWnd, 0, 0);
171. if (srv_socket ≠ INVALID_SOCKET) // Π΅ΡΠ»ΠΈ ΡΠΎΠΊΠ΅Ρ Π±ΡΠ» ΡΠΎΠ·Π΄Π°Π½, Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ
172. {
173. closesocket (srv_socket);
174. srv_socket = INVALID_SOCKET;
175. }
176. // Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΡΠ°Π½ΠΎΠ²Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ°
177. SendMessage (hwndEdit, WM_SETTEXT, 0, (LPARAM) «Π‘Π΅ΡΠ²Π΅Ρ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½»);
178. }
179. BOOL AcceptClient (int j)// ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
180. FD_CLOSE))
185. return TRUE;
186. closesocket (sock[j]);
187. return FALSE;
188.
189. void DisconnectClient (int j)// ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
190. {
191. WSAAsyncSelect (sock[j], hWindow, 0, 0);
192. closesocket (sock[j]);
193. }
194. void WndProc_OnWSAAccept (HWND hWnd, LPARAM lParam)
195. {
196. // ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΎΡΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
197. if (WSAGETSELECTERROR (lParam)){
198. MessageBox (hWnd, «accept error», «Error», MB_OK);
199. WSAAsyncSelect (srv_socket, hWnd, 0, 0);
200. return;
201. }
202. if (ClientNum == 1){
203. MessageBox (hWnd," ΡΠΈΡΠ»ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² >2rn", «Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ!», MB_OK);
204. return;
205. }
206. ClientNum++;
207. if (!AcceptClient (ClientNum)){
208. MessageBox (hWnd, «ΠΡΠΈΠ±ΠΊΠ° ΡΠΎΠ΅Π΄ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ», «Error», MB_OK);
209. return;
210. }
211. // Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
212. sprintf (szBuf, «ΠΠΎΠ±Π°Π²Π»Π΅Π½ ΠΊΠ»ΠΈΠ΅Π½Ρ %irnΠΠ΄ΡΠ΅Ρ: IP=%s Port=%urn «, ClientNum+1,
213. inet_ntoa (sockaddr[ClientNum]. sin_addr), htons (sockaddr[ClientNum]. sin_port));
214. SendMessage (hwndEdit, WM_SETTEXT, 0, (LPARAM)szBuf);
215. }
216. void WndProc_OnWSANetEvent (HWND hWnd, WPARAM wParam, LPARAM lParam)
217. {
218. char szTemp[256], szMess[256];
219. int Number;
220. // ΡΠ·Π½Π°Π΅ΠΌ ΠΎΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΏΡΠΈΡΠ»ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, => Number
221. if (sock[0]==(SOCKET) wParam) Number=0;
222. else if (sock[1]==(SOCKET) wParam) Number=1;
223. // Π΅ΡΠ»ΠΈ Π½Π° ΡΠΎΠΊΠ΅ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π΄Π°Π½Π½ΡΡ , ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ ΠΈΡ
224. if (WSAGETSELECTEVENT (lParam) == FD_READ)
225. {
226. int rc = recv ((SOCKET) wParam, szTemp, 256, 0);
227. if (rc){
228. szTemp[rc]='';
229. sprintf (m_mess, «%s rn ΠΠ°Π½Π½ΡΠ΅ ΠΎΡ ΠΠ»ΠΈΠ΅Π½ΡΠ° %i:rn%s», m_mess, Number+1,szTemp);
230. SendMessage (hwndEdit, WM_SETTEXT, 0, (LPARAM)m_mess);
231. }
232. }
233. // Π΅ΡΠ»ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΎ, Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΡΡΠΎΠΌ
234. if (WSAGETSELECTEVENT (lParam) == FD_CLOSE)
235. {
236. WSAAsyncSelect (sock[Number], hWindow, 0, 0);
237. closesocket (sock[Number]);
238. sprintf (szTemp, «ΠΠ»ΠΈΠ΅Π½Ρ %i Π·Π°Π²Π΅ΡΡΠΈΠ» ΡΠ°Π±ΠΎΡΡ», Number+1);
239. SendMessage (hwndEdit, WM_SETTEXT, 0, (LPARAM)szTemp);
240. }
241. }
242. void SendToClient (int j)
243. {
244. if (j>ClientNum) return;
245. cbWritten = SendMessage (hwndEdit, WM_GETTEXTLENGTH, 0,0);
246. SendMessage (hwndEdit, WM_GETTEXT, (WPARAM) cbWritten, (LPARAM) szBuf);
247. szBuf[cbWritten]='';
248. if (send (sock[j], szBuf, lstrlen (szBuf), 0) ≠ SOCKET_ERROR)
249. {
250. sprintf (szBuf, «ΠΠ°Π½Π½ΡΠ΅ ΠΎΡΠΎΡΠ»Π°Π½Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡ %drn %s», j+1,szBuf);
251. SendMessage (hwndEdit, WM_SETTEXT, 0, (LPARAM)szBuf);
252. }
253. else
254. SendMessage (hwndEdit, WM_SETTEXT, 0, (LPARAM)" ΠΡΠΈΠ±ΠΊΠ° ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ rn");
255. }
256. void ClientOff (HWND hWnd, int j)
257.
258. if (j>ClientNum) return;
259. sprintf (szBuf, «ΠΡΠΊΠ»ΡΡΠΈΡΡ ΠΠ»ΠΈΠ΅Π½ΡΠ° %i?», j+1);
260. if (IDYES == MessageBox (hWnd, szBuf, «Question», MB_YESNO
264. //
265. // Π€Π£ΠΠΠ¦ΠΠ―: WndProc (HWND, UINT, WPARAM, LPARAM)
266. //
267. // ΠΠΠΠΠΠ§ΠΠΠΠ: ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅.
268. //
269. // WM_COMMANDΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΌΠ΅Π½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
270. // WM_PAINT-ΠΠ°ΠΊΡΠ°ΡΠΈΡΡ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ
271. // WM_DESTROY — Π²Π²Π΅ΡΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ Π²ΡΡ ΠΎΠ΄Π΅ ΠΈ Π²Π΅ΡΠ½ΡΡΡΡΡ.
272. //
273. //
274. LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
275. {
276. int wmId, wmEvent;
277. PAINTSTRUCT ps;
278. HDC hdc;
279. switch (message)
280. {
281. case WM_CREATE:
282. hwndEdit = CreateWindow (// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π΄ΠΎΡ. ΠΎΠΊΠ½ΠΎ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π΄Π°Π½Π½ΡΡ ΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²
283. TEXT («EDIT»), NULL,
284. WS_CHILD | WS_VISIBLE | WS_VSCROLL |
285. ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL,
286. 0, 0, 400, 200, hWnd, NULL, hInst, NULL);
287. err = WSAStartup (wVersionRequested, &wsaData);
288. if (err) MB_ICONSTOP);
290. return FALSE;
291.
292. sprintf (m_mess, «ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ %s rnΠ‘ΡΠ°ΡΡΡ: %srn» ,
293. wsaData. szDescription, wsaData. szSystemStatus);
294. SendMessage (hwndEdit, WM_SETTEXT, 0, (LPARAM)m_mess);
295. break;
296. case WM_COMMAND:
297. wmId = LOWORD (wParam);
298. wmEvent = HIWORD (wParam);
299. // Π Π°Π·ΠΎΠ±ΡΠ°ΡΡ Π²ΡΠ±ΠΎΡ Π² ΠΌΠ΅Π½Ρ:
300. switch (wmId)
301. {
302. case ID_32 771:
303. ServerStart (hWnd);
304. break;
305. case ID_32 772:
306. ServerStop (hWnd);
307. break;
308. case ID_32 773:
309. SendToClient (0);
310. break;
311. case ID_32 774:
312. SendToClient (1);
313. break;
314. case ID_32 775:
315. ClientOff (hWnd, 0);
316. break;
317. case ID_32 776:
318. ClientOff (hWnd, 1);
319. break;
320. case IDM_ABOUT:
321. DialogBox (hInst, MAKEINTRESOURCE (IDD_ABOUTBOX), hWnd, About);
322. break;
323. case IDM_EXIT:
324. DestroyWindow (hWnd);
325. break;
326. default:
327. return DefWindowProc (hWnd, message, wParam, lParam);
328. }
329. break;
330. case WM_PAINT:
331. hdc = BeginPaint (hWnd, &ps);
332. // TODO: Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠ΄ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ…
333. EndPaint (hWnd, &ps);
334. break;
335. case WM_DESTROY:
336. WSACleanup ();
337. PostQuitMessage (0);
338. break;
339. case WSA_ACCEPT:
340. WndProc_OnWSAAccept (hWnd, lParam);
341. break;
342. case WSA_NETEVENT:
343. WndProc_OnWSANetEvent (hWnd, wParam, lParam);
344. break;
345. default:
346. return DefWindowProc (hWnd, message, wParam, lParam);
347. }
348. return 0;
349. }
350. // ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΎΠΊΠ½Π° «Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅» .
351. INT_PTR CALLBACK About (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
352. {
353. UNREFERENCED_PARAMETER (lParam);
354. switch (message)
355. {
356. case WM_INITDIALOG:
357. return (INT_PTR)TRUE;
358. case WM_COMMAND:
359. if (LOWORD (wParam) == IDOK || LOWORD (wParam) == IDCANCEL)
360. {
361. EndDialog (hDlg, LOWORD (wParam));
362. return (INT_PTR)TRUE;
363. }
364. break;
365. }
366. return (INT_PTR)FALSE;
367. }
368.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π Π Π°ΡΠΏΠ΅ΡΠ°ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° 1
369. // ΠΠ»ΠΈΠ΅Π½Ρ1. cpp: ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΎΡΠΊΡ Π²Ρ ΠΎΠ΄Π° Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
370. //
371. #include «stdafx.h»
372. #include «ΠΠ»ΠΈΠ΅Π½Ρ1.h»
373. #include
374. #include
375. #include
376. #include
377. #include
378. #include
379. #include
380. char szBuf[512];
381. DWORD cbWritten;
382. int flag = 0;
383. static HWND hwndEdit;
384. TCHAR mess[2048];
385. TCHAR* m_mess = mess;
386. int wmId, wmEvent;
387. PAINTSTRUCT ps;
388. HDC hdc;
389. HWND hwnd;
390. RECT rt;
391. #define SERV_PORT 5000// ΠΠΎΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°
392. #define WSA_NETEVENT (WM_USER+1)
393. WSADATA wsaData; //ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Windows Sockets
394. WORD wVersionRequested = MAKEWORD (1, 1); //ΠΠΎΠΌΠ΅Ρ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Windows Sockets
395. int err=0;
396. SOCKET cln_socket=INVALID_SOCKET; // Π‘ΠΎΠΊΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°
397. static PHOSTENT phe;
398. SOCKADDR_IN dest_sin; // ΠΠ΄ΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°
399. char szHostName[128] = «localhost»; //ΠΈΠΌΡ Ρ ΠΎΡΡΠ°
400. #define MAX_LOADSTRING 100
401. // ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅:
402. HINSTANCE hInst;// ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ
403. TCHAR szTitle[MAX_LOADSTRING]; // Π’Π΅ΠΊΡΡ ΡΡΡΠΎΠΊΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°
404. TCHAR szWindowClass[MAX_LOADSTRING]; // ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ° Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°
405. // ΠΡΠΏΡΠ°Π²ΠΈΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΡ Π² ΡΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΊΠΎΠ΄Π°:
406. ATOMMyRegisterClass (HINSTANCE hInstance);
407. BOOLInitInstance (HINSTANCE, int);
408. LRESULT CALLBACKWndProc (HWND, UINT, WPARAM, LPARAM);
409. INT_PTR CALLBACKAbout (HWND, UINT, WPARAM, LPARAM);
410. int APIENTRY _tWinMain (HINSTANCE hInstance,
411. HINSTANCE hPrevInstance,
412. LPTSTR lpCmdLine,
413. int nCmdShow)
414. {
415. UNREFERENCED_PARAMETER (hPrevInstance);
416. UNREFERENCED_PARAMETER (lpCmdLine);
417. // TODO: ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΠ΅ ΠΊΠΎΠ΄ Π·Π΄Π΅ΡΡ.
418. MSG msg;
419. HACCEL hAccelTable;
420. // ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΡΡΡΠΎΠΊ
421. LoadString (hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
422. LoadString (hInstance, IDC_MY1, szWindowClass, MAX_LOADSTRING);
423. MyRegisterClass (hInstance);
424. // ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
425. if (!InitInstance (hInstance, nCmdShow))
426. {
427. return FALSE;
428. }
429. hAccelTable = LoadAccelerators (hInstance, MAKEINTRESOURCE (IDC_MY1));
430. // Π¦ΠΈΠΊΠ» ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ:
431. while (GetMessage (&msg, NULL, 0, 0))
432. {
433. if (!TranslateAccelerator (msg.hwnd, hAccelTable, &msg))
434. {
435. TranslateMessage (&msg);
436. DispatchMessage (&msg);
437. }
438. }
439. return (int) msg. wParam;
440. }
441. //
442. // Π€Π£ΠΠΠ¦ΠΠ―: MyRegisterClass ()
443. //
444. // ΠΠΠΠΠΠ§ΠΠΠΠ: ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ ΠΊΠ»Π°ΡΡ ΠΎΠΊΠ½Π°.
445. //
446. // ΠΠΠΠΠΠΠ’ΠΠ ΠΠ:
447. //
448. // ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΈ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π΄Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄
449. // Π±ΡΠ» ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ Win32, Π½Π΅ ΠΈΠΌΠ΅ΡΡΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ RegisterClassEx'
450. // ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² Windows 95. ΠΡΠ·ΠΎΠ² ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π²Π°ΠΆΠ΅Π½ Π΄Π»Ρ ΡΠΎΠ³ΠΎ,
451. // ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎ «ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅» ΠΌΠ΅Π»ΠΊΠΈΠ΅ Π·Π½Π°ΡΠΊΠΈ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΎ ΡΠ²ΡΠ·Ρ
452. // Ρ Π½ΠΈΠΌΠΈ.
453. //
454. ATOM MyRegisterClass (HINSTANCE hInstance)
455. CS_VREDRAW;
459. wcex. lpfnWndProc= WndProc;
460. wcex. cbClsExtra= 0;
461. wcex. cbWndExtra= 0;
462. wcex. hInstance= hInstance;
463. wcex. hIcon= LoadIcon (hInstance, MAKEINTRESOURCE (IDI_MY1));
464. wcex. hCursor= LoadCursor (NULL, IDC_ARROW);
465. wcex. hbrBackground= (HBRUSH)(COLOR_WINDOW+1);
466. wcex. lpszMenuName= MAKEINTRESOURCE (IDC_MY1);
467. wcex. lpszClassName= szWindowClass;
468. wcex. hIconSm= LoadIcon (wcex.hInstance, MAKEINTRESOURCE (IDI_SMALL));
469. return RegisterClassEx (&wcex);
470.
471. //
472. // Π€Π£ΠΠΠ¦ΠΠ―: InitInstance (HINSTANCE, int)
473. //
474. // ΠΠΠΠΠΠ§ΠΠΠΠ: ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ.
475. //
476. // ΠΠΠΠΠΠΠ’ΠΠ ΠΠ:
477. //
478. //Π Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅
479. // ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΡΠΊΡΠ°Π½ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
480. //
481. BOOL InitInstance (HINSTANCE hInstance, int nCmdShow)
482. {
483. HWND hWnd;
484. hInst = hInstance; // Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ
485.
486. hWnd = CreateWindow (szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
487. CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
488.
489. if (!hWnd)
490. {
491. return FALSE;
492. }
493.
494. ShowWindow (hWnd, nCmdShow);
495. UpdateWindow (hWnd);
496.
497. return TRUE;
498. }
499. void Task1()
500. {
501. HKL layot = GetKeyboardLayout (0);
502. DWORD wn = GetSysColor (COLOR_WINDOW);
503. DWORD frame = GetSysColor (COLOR_WINDOWFRAME);
504. char str[256];
505. sprintf (str, «ΠΠΎΠ΄ ΡΠ°ΡΠΊΠ»Π°Π΄ΠΊΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ: %drn», layot);
506. strcat_s (szBuf, str);
507. sprintf (str, «Π¦Π²Π΅Ρ ΡΠΎΠ½Π° ΠΎΠΊΠ½Π°: %drn», wn);
508. strcat_s (szBuf, str);
509. sprintf (str, «Π¦Π²Π΅Ρ ΡΠΎΠ½Π° ΡΠ°ΠΌΠΊΠΈ: %drn», frame);
510. strcat_s (szBuf, str);
511. }
512. BOOL SetConnection (HWND hWnd)
513. {
514. cln_socket = socket (AF_INET, SOCK_STREAM, 0); // ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΎΠΊΠ΅Ρ
515. if (cln_socket == INVALID_SOCKET)
516. MB_ICONSTOP);
518. return FALSE;
519.
520. phe = gethostbyname (szHostName); // ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π°Π΄ΡΠ΅Ρ ΡΠ·Π»Π°
521. if (phe == NULL)
522. MB_ICONSTOP);
525. return FALSE;
526.
527. dest_sin.sin_family = AF_INET;// ΠΠ°Π΄Π°Π΅ΠΌ ΡΠΈΠΏ Π°Π΄ΡΠ΅ΡΠ°
528. dest_sin.sin_port = htons (SERV_PORT);// Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΡΡΠ°
529. memcpy ((char FAR*) &(dest_sin.sin_addr), phe->h_addr, phe->h_length);// ΠΠΎΠΏΠΈΡΡΠ΅ΠΌ Π°Π΄ΡΠ΅Ρ ΡΠ·Π»Π°
530. // Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅
531. if (connect (cln_socket, (PSOCKADDR) &dest_sin, sizeof (dest_sin)) == SOCKET_ERROR)
532. MB_ICONSTOP);
535. return FALSE;
536.
537. // ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ WSA_ACCEPT
538. if (WSAAsyncSelect (cln_socket, hWnd, WSA_NETEVENT, FD_READ | FD_CLOSE))
539. {
540. MessageBox (hWnd, «WSAAsyncSelect error», «Error», MB_OK);
541. return FALSE;
542. }
543. // ΠΡΠ²ΠΎΠ΄ΠΈΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΡΠ·Π»ΠΎΠΌ
544. SendMessage (hwndEdit, WM_SETTEXT, 0, (LPARAM) «Π‘Π²ΡΠ·Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°!»);
545. return TRUE;
546. }
547.
548. void SendMsg (HWND hWnd)
549. {
550. cbWritten = SendMessage (hwndEdit, WM_GETTEXTLENGTH, 0,0);
551. SendMessage (hwndEdit, WM_GETTEXT, (WPARAM) cbWritten, (LPARAM) szBuf);
552. if (send (cln_socket, szBuf, lstrlen (szBuf), 0) ≠ SOCKET_ERROR)
553. {
554. sprintf (m_mess, «rn ΠΠ°Π½Π½ΡΠ΅ ΠΎΡΠΎΡΠ»Π°Π½Ρ ΡΠ΅ΡΠ²Π΅ΡΡ rn %s», szBuf);
555. SendMessage (hwndEdit, WM_SETTEXT, 0, (LPARAM)m_mess);
556. }
557. else
558. {
559. sprintf (m_mess, «%s rn ΠΡΠΈΠ±ΠΊΠ° ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ rn «, m_mess);
560. SendMessage (hwndEdit, WM_SETTEXT, 0, (LPARAM)m_mess);
561. }
562. }
563. // Π€Π£ΠΠΠ¦ΠΠ―: WndProc (HWND, UINT, WPARAM, LPARAM)
564. //
565. // ΠΠΠΠΠΠ§ΠΠΠΠ: ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅.
566. //
567. // WM_COMMANDΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΌΠ΅Π½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
568. // WM_PAINT-ΠΠ°ΠΊΡΠ°ΡΠΈΡΡ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ
569. // WM_DESTROY — Π²Π²Π΅ΡΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ Π²ΡΡ ΠΎΠ΄Π΅ ΠΈ Π²Π΅ΡΠ½ΡΡΡΡΡ.
570. LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
571. {
572. int wmId, wmEvent;
573. PAINTSTRUCT ps;
574. HDC hdc;
575. switch (message)
576. {
577. case WM_CREATE:
578. hwndEdit = CreateWindow (// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π΄ΠΎΡ. ΠΎΠΊΠ½ΠΎ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π΄Π°Π½Π½ΡΡ ΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²
579. TEXT («EDIT»), NULL,
580. WS_CHILD | WS_VISIBLE | WS_VSCROLL |
581. ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL,
582. 0, 0, 400, 200, hWnd, NULL, hInst, NULL);
583. err = WSAStartup (wVersionRequested, &wsaData);
584. if (err) MB_ICONSTOP);
586. return FALSE;
587.
588. sprintf (m_mess, «ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ %s rnΠ‘ΡΠ°ΡΡΡ: %srn «,
589. wsaData. szDescription, wsaData. szSystemStatus);
590. SendMessage (hwndEdit, WM_SETTEXT, 0, (LPARAM)m_mess);
591. break;
592. case WM_COMMAND:
593. wmId = LOWORD (wParam);
594. wmEvent = HIWORD (wParam);
595. // Π Π°Π·ΠΎΠ±ΡΠ°ΡΡ Π²ΡΠ±ΠΎΡ Π² ΠΌΠ΅Π½Ρ:
596. switch (wmId)
597. {
598. case ID_32 771:
599. SetConnection (hWnd);
600. break;
601. case ID_32 772:
602. Task1();
603. SendMessage (hwndEdit, WM_SETTEXT, 0, (LPARAM)szBuf);
604. break;
605. case ID_32 773:
606. SendMsg (hWnd);
607. break;
608. case WSA_NETEVENT:
609. // Π΅ΡΠ»ΠΈ Π½Π° ΡΠΎΠΊΠ΅ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π΄Π°Π½Π½ΡΡ , ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ ΠΈΡ
610. if (WSAGETSELECTEVENT (lParam) == FD_READ)
611. {
612. int rc = recv (cln_socket, szBuf, sizeof (szBuf), 0);
613. if (rc)
614. {
615. szBuf[rc]='';
616. sprintf (m_mess, «%s rn ΠΠ°Π½Π½ΡΠ΅ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ°: %srn «, m_mess, szBuf);
617. SendMessage (hwndEdit, WM_SETTEXT, 0, (LPARAM)m_mess);
618. }
619. }
620. // Π΅ΡΠ»ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΎ, Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΡΡΠΎΠΌ
621. if (WSAGETSELECTEVENT (lParam) == FD_CLOSE)
622. MessageBox (hWnd, «Π‘Π΅ΡΠ²Π΅Ρ Π·Π°ΠΊΡΡΡ», «Server», MB_OK);
623. break;
624. case IDM_ABOUT:
625. DialogBox (hInst, MAKEINTRESOURCE (IDD_ABOUTBOX), hWnd, About);
626. break;
627. case IDM_EXIT:
628. DestroyWindow (hWnd);
629. break;
630. default:
631. return DefWindowProc (hWnd, message, wParam, lParam);
632. }
633. break;
634. case WM_PAINT:
635. hdc = BeginPaint (hWnd, &ps);
636. // TODO: Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠ΄ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ…
637. EndPaint (hWnd, &ps);
638. break;
639. case WM_DESTROY:
640. PostQuitMessage (0);
641. break;
642. default:
643. return DefWindowProc (hWnd, message, wParam, lParam);
644. }
645. return 0;
646. }
647. // ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΎΠΊΠ½Π° «Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅» .
648. INT_PTR CALLBACK About (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
649. {
650. UNREFERENCED_PARAMETER (lParam);
651. switch (message)
652. {
653. case WM_INITDIALOG:
654. return (INT_PTR)TRUE;
655. case WM_COMMAND:
656. if (LOWORD (wParam) == IDOK || LOWORD (wParam) == IDCANCEL)
657. {
658. EndDialog (hDlg, LOWORD (wParam));
659. return (INT_PTR)TRUE;
660. }
661. break;
662. }
663. return (INT_PTR)FALSE;