Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ³Ρ€ для ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ²Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 59

Автор Майкл ΠœΠΎΡ€Ρ€ΠΈΡΠΎΠ½

. . . . . . β€“ . . . β€“ . . β€“ – -

...

Π’ ΠΊΠΎΠΏΠΈΠ»ΠΊΡƒ Π˜Π³Ρ€ΠΎΠΊΠ°

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΠ΅ слово Π°Π·Π±ΡƒΠΊΠΈ ΠœΠΎΡ€Π·Π΅ – это SOS, Ρ‡Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎ ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «БпаситС Наши Π”ΡƒΡˆΠΈΒ» (ΠΎΡ‚ Π°Π½Π³Π». Save Our Souls). На самом Π΄Π΅Π»Π΅ это вовсС Π½Π΅ Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°, Π° простоС сочСтаниС Π±ΡƒΠΊΠ², Π½ΠΎ ΠΎΠ½ΠΎ слуТит Π²Π°ΠΆΠ½Ρ‹ΠΌ сигналом. Π­Ρ‚ΠΎ слово кодируСтся Π½Π΅ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ Π°Π·Π±ΡƒΠΊΠΈ ΠœΠΎΡ€Π·Π΅ – Π±Π΅Π· ΠΏΠ°ΡƒΠ·: . . . β€“ – – . . .

Но вСрнСмся ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ ΠΌΠΈΠ΄Π»Π΅Ρ‚Π° Lighthouse. ИдСя этого прилоТСния состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ маяк Π½Π° мобильном Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π·Π±ΡƒΠΊΡƒ ΠœΠΎΡ€Π·Π΅ для ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²ΡΠΏΡ‹ΡˆΠ΅ΠΊ маяка. Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ: Π½Π° экранС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ маяк, Π²Ρ‹ смотритС Π½Π° маяк Π½Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, Π° ΠΎΠ½ смотрит Π½Π° маяк Π½Π° вашСм Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π΅. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ клавиши Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ Π²Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΡ€Π°Π²ΠΎ Π²Ρ‹ посылаСтС Ρ‚ΠΈΡ€Π΅ ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· Π±Π΅ΡΠΏΡ€ΠΎΠ²ΠΎΠ΄Π½ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ маяк Π½Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΈΠ³Π°Ρ‚ΡŒ, пСрСдавая Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ Ρ‚ΠΈΡ€Π΅.

...

Π‘ΠΎΠ²Π΅Ρ‚ Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ

Π•Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ простая вСрсия ΠΌΠΈΠ΄Π»Π΅Ρ‚Π° Lighthouse ΠΌΠΎΠ³Π»Π° Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ лишь ΠΎΠ΄Π½Ρƒ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΈ Ρ‚ΠΈΡ€Π΅, ΠΏΡ€ΠΈ этом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» Π±Ρ‹ Π·Π°Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ врСмя. Π­Ρ‚ΠΎ большС ΠΏΠΎΡ…ΠΎΠ΄ΠΈΠ»ΠΎ Π±Ρ‹ Π½Π° настоящий Ρ‚Π΅Π»Π΅Π³Ρ€Π°Ρ„, Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±Ρ‹ стал ΠΌΠ΅Π½Π΅Π΅ интСрСсным.

ΠœΠΈΠ΄Π»Π΅Ρ‚ Lighthouse – это высокотСхничная симуляция ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния программирования этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ дСмонстрируСт, ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ соСдинСниС Β«ΠΊΠ»ΠΈΠ΅Π½Ρ‚ – сСрвСр» ΠΌΠ΅ΠΆΠ΄Ρƒ устройствами, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ±ΠΌΠ΅Π½ сообщСниями.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ сСрвСра

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

1. ΡΠ΅Ρ€Π²Π΅Ρ€ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π΄Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ соСдинСниС ΠΈ ΠΆΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°;

2. Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΄Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ соСдинСниС с Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠΌ-сСрвСром;

3. ΠΊΠΎΠ³Π΄Π° соСдинСниС установлСно, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ сСрвСр ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ сообщСниями;

4. ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ сСрвСр Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ соСдинСниС.

Π˜Π½Ρ‚Π΅Ρ€Π΅Ρ Π² Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ ΠΌΠΈΠ΄Π»Π΅Ρ‚Π΅ прСдставляСт Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΈ ΠΊΠ°ΠΊ сСрвСр Π² зависимости ΠΎΡ‚ контСкста. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Π΄Π²ΠΎΠΉΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€ΠΈ запускС ΠΌΠΈΠ΄Π»Π΅Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ – ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈΠ»ΠΈ сСрвСра. ПослС Ρ‡Π΅Π³ΠΎ ΠΎΠ΄ΠΈΠ½ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π»ΠΈΠ±ΠΎ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ сСрвСра. Зная, Ρ‡Ρ‚ΠΎ для ΠΌΠΈΠ΄Π»Π΅Ρ‚Π° Lighthouse Π΅ΡΡ‚ΡŒ Π΄Π²Π° Ρ€Π΅ΠΆΠΈΠΌΠ° функционирования, цСлСсообразно Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ сСтСвой ΠΊΠΎΠ΄ ΠΌΠΈΠ΄Π»Π΅Ρ‚Π° Π½Π° ΠΊΠΎΠ΄ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΠΊΠΎΠ΄ сСрвСра.

...

Π’ ΠΊΠΎΠΏΠΈΠ»ΠΊΡƒ Π˜Π³Ρ€ΠΎΠΊΠ°

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния программирования сСтСвых ΠΈΠ³Ρ€ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Lighthouse являСтся Π½Π΅ настоящим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ прилоТСния Β«ΠΊΠ»ΠΈΠ΅Π½Ρ‚ – сСрвСр», Π° ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя устройствами. Π’ настоящих сСтСвых ΠΈΠ³Ρ€Π°Ρ…, основанных Π½Π° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Β«ΠΊΠ»ΠΈΠ΅Π½Ρ‚ – сСрвСр», Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ΅ Π½Π° сСтСвом сСрвСрС. ΠœΠΈΠ΄Π»Π΅Ρ‚Ρ‹, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΊ сСрвСру, β€“ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹, Π° сСрвСр управляСт ΠΈΠ³Ρ€ΠΎΠΉ. ΠœΠΈΠ΄Π»Π΅Ρ‚ Lighthouse являСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Β«ΠΊΠ»ΠΈΠ΅Π½Ρ‚ – сСрвСр» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ лишь с Ρ‚ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ устройство (сСрвСр) ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ устройства (ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°).

НаписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°

ΠœΠΈΠ΄Π»Π΅Ρ‚ Lighthouse ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Π΄Π²ΡƒΡ… Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… – Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ΅ сСрвСра. Π Π΅ΠΆΠΈΠΌ опрСдСляСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‡Π΅Ρ€Π΅Π· интСрфСйс ΠΏΡ€ΠΈ запускС ΠΌΠΈΠ΄Π»Π΅Ρ‚Π° (Π²Ρ‹ это ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅). ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚Π΅ ΠΊ этому, Π²Π°ΠΆΠ½ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΡΠ΅Ρ‚ΡŒΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· бСспроводноС соСдинСниС.

ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ сСрвСр ΠΌΠΈΠ΄Π»Π΅Ρ‚Π° Lighthouse

Код Β«ΠΊΠ»ΠΈΠ΅Π½Ρ‚ – сСрвСр» Π² ΠΌΠΈΠ΄Π»Π΅Ρ‚Π΅ Lighthouse Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Π³Ρ‡Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ссли Π½Π°Ρ‡Π°Ρ‚ΡŒ рассмотрСниС ΠΊΠΎΠ΄Π° сСрвСра. ВсС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сСрвСра содСрТатся Π² классС LHServer, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π΄Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Класс LHServer Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс Runnable, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ запускаСтся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅:

public class LHServer implements Runnable {

Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ класс запускаСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ соСдинСниС, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСния ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠšΡ€ΠΎΠΌΠ΅ сСтСвого соСдинСния с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, сСрвСр Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ с холстом ΠΌΠΈΠ΄Π»Π΅Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ маяк. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса LHServer говорят ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅Π³ΠΎ функциях:

private LHCanvas canvas;

private DatagramConnection dc;

private String address;

private Boolean connected;

Π₯олст хранится Π²Π½ΡƒΡ‚Ρ€ΠΈ класса LHServer Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ canvas. Π”Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ соСдинСниС хранится Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ dc – ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ класса DatagramConnection. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ address Ρ…Ρ€Π°Π½ΠΈΡ‚ адрСс ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π΄Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ нСпосрСдствСнно ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŽ. И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, пСрСмСнная connected отслСТиваСт Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС соСдинСния с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ класса LHServer ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ СдинствСнный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ – ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса LHCanvas, конструктор выполняСт ряд ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ:

public LHServer(LHCanvas c) {

canvas = c;

connected = false;

}

ΠœΠ΅Ρ‚ΠΎΠ΄ start() Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ прост, ΠΎΠ½ запускаСт ΠΏΠΎΡ‚ΠΎΠΊ:

public void start() {

Thread t = new Thread(this);

t.start();

}

ΠœΠ΅Ρ‚ΠΎΠ΄ run() β€“ это ΠΌΠ΅Ρ‚ΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сСрвСра (листинг 14.1). Листинг 14.1. ΠœΠ΅Ρ‚ΠΎΠ΄ run() класса LHServer ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π½Π° сообщСния, принятыС ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

public void run() {

try {

// ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ с клиСнтским устройством

canvas.setStatus("Waiting for peer client..."); //ΠŸΠ΅Ρ€Π²ΠΎΠ΅ статусноС сообщСниС сСрвСра Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

dc = null;

while (dc == null)

dc = (DatagramConnection)Connector.open("datagram://:5555"); //ΠŸΠΎΡ€Ρ‚Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ сСрвСра Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ

while (true) {

// ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ Π΄Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΡ‹

Datagram dg = dc.newDatagram(32); //Π Π°Π·ΠΌΠ΅Ρ€ Π΄Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΡ‹ (32 Π±Π°ΠΉΡ‚Π°) Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ достаточно большим, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ наибольшСС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ сообщСниС, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² ΠΈΠ³Ρ€Π΅ Lighthouse сообщСния Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Π²Π΅Π»ΠΈΠΊΠΈ

dc.receive(dg);

address = dg.getAddress();

// ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΠ° содСрТит Π΄Π°Π½Π½Ρ‹Π΅

if (dg.getLength() > 0) {

String data = new String(dg.getData(), 0, dg.getLength());

if (data.equals("Client")) { //Π’ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° соСдинСниС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, измСняСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ отправляСтся ΠΎΡ‚Π²Π΅Ρ‚

// ΠΎΠΏΠΎΠ²Π΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΠ± ΡƒΠ΄Π°Ρ‡Π½ΠΎΠΌ соСдинСнии

canvas.setStatus("Connected to peer client.");

connected = true;

// ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° принятоС сообщСниС

sendMessage("Server");

}

else {

// ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅

canvas.receiveMessage(data); //Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π·Π½Π°ΠΊΠΈ Π°Π·Π±ΡƒΠΊΠΈ ΠœΠΎΡ€Π·Π΅, поэтому Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ холсту

}

}

}

}

catch (IOException ioe) {

System.err.println("The network port is already taken.");

}

catch (Exception e) {

}

}

ΠœΠ΅Ρ‚ΠΎΠ΄ run() начинаСтся с Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° setStatus() класса LHCanvas, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π² строку статуса холста Β«Waiting for peer client…» – Ρ€Π΅ΠΆΠΈΠΌ оТидания ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ сСрвСр ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ статус Π²Ρ‹Π²Π΅Π΄Π΅Π½ Π½Π° холст, вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ run(), ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ Π΄Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ соСдинСниС. НомСр использования ΠΏΠΎΡ€Ρ‚Π° (5555) β€“ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ сСрвСр ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ€Ρ‚ для соСдинСния. Π’Π°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ создаваСмоС соСдинСниС – Π΄Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅.

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π΄Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ соСдинСниС установлСно, ΠΌΠ΅Ρ‚ΠΎΠ΄ run() запускаСт бСсконСчный Ρ†ΠΈΠΊΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ принятия ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π‘Π½Π°Ρ‡Π°Π»Π° создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Datagram, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ Π΄Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠΌ. АдрСс Π΄Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΡ‹ сохраняСтся Π½Π° Ρ‚ΠΎΡ‚ случай, Ссли сСрвСру потрСбуСтся ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚.

Если Π΄Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΠ° содСрТит Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚ΠΎ Π±Π°ΠΉΡ‚Ρ‹ Π΄Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² строку. Π—Π°Ρ‚Π΅ΠΌ провСряСтся, Ρ€Π°Π²Π½Π° Π»ΠΈ эта строка Β«ClientΒ», ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡŽ, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅ΠΌΡƒ соСдинСниС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° с сСрвСром. Если соСдинСниС ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Ρ‚ΠΎ статус измСняСтся ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ отправляСтся сообщСниС Β«ServerΒ», Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ увСдомляСтся ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ соСдинСниС установлСно.

Π”Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ содСрТит строку Β«ClientΒ» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли соСдинСниС установлСно Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅. Π”Π°Π»Π΅Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, содСрТащиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ слова Β«DotΒ» (Ρ‚ΠΎΡ‡ΠΊΠ°) ΠΈΠ»ΠΈ Β«DashΒ» (Ρ‚ΠΈΡ€Π΅), Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠ΅ сообщСниС отправляСтся ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ. Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ пСрСдаСтся Π² класс LHCanvas, Π³Π΄Π΅ ΠΎΠ½ΠΎ обрабатываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ receiveMessage(). ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ с ΠΊΠΎΠ΄ΠΎΠΌ холста ΠΌΠΈΠ΄Π»Π΅Ρ‚Π° Lighthouse.

ПослСдний ΠΌΠ΅Ρ‚ΠΎΠ΄ класса LHServer – это ΠΌΠ΅Ρ‚ΠΎΠ΄ sendMessage(), ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π² листингС 14.2. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ отправляСт сообщСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ.

Листинг 14.2. ΠœΠ΅Ρ‚ΠΎΠ΄ sendMessage() класса LHServer отправляСт строковоС сообщСниС ΠΊΠ°ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚ Π΄Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΡ‹

public void sendMessage(String message) {

// ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ сообщСниС

try {

// ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ тСкстовоС сообщСниС Π² массив Π±Π°ΠΉΡ‚ΠΎΠ²

byte[] bytes = message.getBytes(); //Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²ΠΎΠ΅ сообщСниС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΎ Π² массив Π±Π°ΠΉΡ‚ΠΎΠ²

// ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ сообщСниС

Datagram dg = null; //Π£ΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΄Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΡƒ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ

dg = dc.newDatagram(bytes, bytes.length, address);

dc.send(dg);

}

catch (Exception e) {

}

}

Π’ этом ΠΊΠΎΠ΄Π΅ строковоС сообщСниС прСобразуСтся Π² массив Π±Π°ΠΉΡ‚ΠΎΠ², Π° Π·Π°Ρ‚Π΅ΠΌ отправляСтся ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΊΠ°ΠΊ Π΄Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ адрСс, сохранСнный Ρ€Π°Π½Π΅Π΅ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ run(), Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Datagram отправляСмого сообщСния. Π­Ρ‚ΠΎΡ‚ адрСс Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ сообщСниС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ. Однако, ΠΊΠ°ΠΊ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΠΎΠ·ΠΆΠ΅, этот адрСс Π½Π΅ обязатСлСн ΠΏΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ сообщСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ сСрвСру. Другая Ρ‡Π°ΡΡ‚ΡŒ сСтСвого ΠΊΠΎΠ΄Π° ΠΌΠΈΠ΄Π»Π΅Ρ‚Π° Lighthouse – это класс LHClient, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° класс LHServer. Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ LHServer, класс LHClient Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс Runnable: