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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Β«ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр»

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

Π’ ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ 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;

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