ΠΎΡΠΊΡΡΡΡΠΉ ΡΠΎΠΊΠ΅Ρ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ
Π‘ΠΎΠΊΠ΅ΡΡ Π² Python
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠΊΠ΅ΡΠΎΠ² Python. ΠΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Python.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠΎΠ²
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠΎΠ² Python, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ ΠΎ ΡΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ ΡΠ΅ΠΌΠ°Ρ β Socket Server, Socket Client ΠΈ Socket.
ΠΡΠ°ΠΊ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠ΅ΡΠ²Π΅Ρ? Π‘Π΅ΡΠ²Π΅Ρ β ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΈ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ.
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΠΊΠ»ΠΈΠ΅Π½Ρ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΡΡΡ ΡΡΠ»ΡΠ³Ρ. ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΡΡΡΡΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ, ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π½Π° ΡΡΠΎΡ Π·Π°ΠΏΡΠΎΡ.
Socket β ΡΡΠΎ ΠΊΠΎΠ½Π΅ΡΠ½Π°Ρ ΡΠΎΡΠΊΠ° Π΄Π²ΡΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ. Π‘ΠΎΠΊΠ΅ΡΡ ΠΌΠΎΠ³ΡΡ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡΡΡΡ Π΄Π°Π½Π½ΡΠΌΠΈ Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ Π½Π° ΡΠ°Π·Π½ΡΡ ΠΌΠ°ΡΠΈΠ½Π°Ρ . ΠΠ»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΡΡ ΡΠΎΠΊΠ΅ΡΠ°.
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ΅Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° ΠΏΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠΊΠ΅ΡΠΎΠ² β ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡ Π²Π°Ρ Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΠ΅ΡΠ²Π΅Ρ ΡΠΎΠΊΠ΅ΡΠΎΠ² ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠΎΠ² Π² Python.
ΠΡΠΈΠΌΠ΅Ρ
Π Π°Π½Π΅Π΅ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ, ΡΡΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΠΎΠΊΠ΅ΡΠ° Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΡΡΡΡΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π½Π° ΡΡΠΎΡ Π·Π°ΠΏΡΠΎΡ.
ΠΡΠ°ΠΊ, ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ, ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠ³ ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ Π½ΠΈΠΌΠΈ. Π¨Π°Π³ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠ°ΠΊ:
Π‘Π΅ΡΠ²Π΅Ρ ΡΠΎΠΊΠ΅ΡΠΎΠ²
ΠΡ ΡΠΎΡ ΡΠ°Π½ΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠΎΠ², ΠΊΠ°ΠΊ socket_server.py. Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΎΠΊΠ΅ΡΠ°.
ΠΠ°ΡΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π·Π°Π΄Π°ΡΡ, ΡΡΠΎΠ±Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π°Π΄ΡΠ΅Ρ Ρ ΠΎΡΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ socket.gethostname(). Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π΄ΡΠ΅Ρ ΠΏΠΎΡΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΡΠ΅ 1024, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΡΡΠ° ΠΌΠ΅Π½ΡΡΠ΅ 1024 Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½ Π΄Π»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ-ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°.
Π‘ΠΌΠΎΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΠ²Π΅ΡΠ°:
ΠΡΠ°ΠΊ, Π½Π°Ρ ΡΠ΅ΡΠ²Π΅Ρ ΡΠΎΠΊΠ΅ΡΠΎΠ² ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° ΠΏΠΎΡΡΡ 5000 ΠΈ Π±ΡΠ΄Π΅Ρ ΠΆΠ΄Π°ΡΡ Π·Π°ΠΏΡΠΎΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅, ΡΡΠΎΠ±Ρ ΡΠ΅ΡΠ²Π΅Ρ Π½Π΅ Π·Π°Π²Π΅ΡΡΠ°Π» ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΠΏΡΠΎΡΡΠΎ ΡΠ΄Π°Π»ΠΈΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ if ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ break. Π¦ΠΈΠΊΠ» while ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°.
ΠΠ»ΠΈΠ΅Π½Ρ ΡΠΎΠΊΠ΅ΡΠ°
ΠΡ ΡΠΎΡ ΡΠ°Π½ΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΎΠΊΠ΅ΡΠ° python ΠΊΠ°ΠΊ socket_client.py. ΠΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ.
ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ²ΡΠ·Π°ΡΡ Π°Π΄ΡΠ΅Ρ Ρ ΠΎΡΡΠ° ΠΈ Π°Π΄ΡΠ΅Ρ ΠΏΠΎΡΡΠ° Π²ΠΌΠ΅ΡΡΠ΅.
Π‘ΠΌΠΎΡΡΠΈΡΠ΅ Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠΎΠΊΠ΅ΡΠ°:
ΠΡΠ²ΠΎΠ΄
Π§ΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΡΠ½Π°ΡΠ°Π»Π° Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠΎΠ². ΠΠ°ΡΠ΅ΠΌ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΏΠΈΡΠΈΡΠ΅ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΈΠ· ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°ΡΠ΅ΠΌ ΡΠ½ΠΎΠ²Π° Π½Π°ΠΏΠΈΡΠΈΡΠ΅ ΠΎΡΠ²Π΅Ρ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π½Π°ΠΏΠΈΡΠΈΡΠ΅ Β«Π΄ΠΎ ΡΠ²ΠΈΠ΄Π°Π½ΠΈΡΒ» ΠΈΠ· ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΡΠΎΠ±Ρ Π·Π°Π²Π΅ΡΡΠΈΡΡ ΠΎΠ±Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΈΠΆΠ΅ ΠΊΠΎΡΠΎΡΠΊΠΎΠ΅ Π²ΠΈΠ΄Π΅ΠΎ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ Π½Π° ΠΌΠΎΠ΅ΠΌ ΡΠ΅ΡΡΠΎΠ²ΠΎΠΌ ΠΏΡΠΎΠ³ΠΎΠ½Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠΎΠ² ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΠ΅ΡΠ²Π΅Ρ ΡΠΎΠΊΠ΅ΡΠΎΠ² ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° ΠΏΠΎΡΡΡ 5000, Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΡΡ ΡΠΎΠΊΠ΅ΡΠ° Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ. ΠΡΠΎΡ ΠΏΠΎΡΡ Π½Π°Π·Π½Π°ΡΠ°Π΅ΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ 57822.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠΎΠ² Π² Android
Π‘ΠΎΠ·Π΄Π°Π½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΊΠ°ΠΊ Π΄Π»Ρ Android, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΠΠ‘, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ΠΉ ΠΏΠΎ ΡΠ΅ΡΠΈ. Π ΡΠ°ΠΊΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ ΠΎΡΠ½ΠΎΡΡΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ΅ΡΡΠ΅Π½Π΄ΠΆΠ΅ΡΡ ΡΠΎΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ΅ΡΠ΅ΠΉ WhatsApp, Viber. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΎΠΊΠ΅ΡΡ.
Π‘ΠΎΠΊΠ΅Ρ (socket) β ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ², Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΠ΅ΡΠΈ. Π‘ΠΎΠΊΠ΅ΡΡ Π±ΡΠ²Π°ΡΡ Π΄Π²ΡΡ ΡΠΈΠΏΠΎΠ²: ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ (Socket) ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ (ServerSocket). ΠΠ»Π°Π²Π½ΠΎΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΡΠ΅ΡΠ²Π΅Ρ Β«ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΒ» ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΏΠΎΡΡ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π΅, Β«ΡΠ»ΡΡΠ°Π΅ΡΒ» Π΅Π³ΠΎ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ, Π° ΠΊΠ»ΠΈΠ΅Π½Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΊ ΡΡΠΎΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΡ, Π·Π½Π°Ρ Π΅Π³ΠΎ IP-Π°Π΄ΡΠ΅Ρ ΠΈ ΠΏΠΎΡΡ. Π Android ΡΠΎΠΊΠ΅ΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» TCP/IP, Π²Π°ΠΆΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Π΄ΠΎΡΡΠ°Π²ΠΊΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Ρ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π΄ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ.
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠΊΠ΅ΡΠΎΠ²
ΠΠ»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠ°Π² Π² ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π² ΡΠ°ΠΉΠ» AndroidManifest.xml Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΡΠΎΠΊΡ :
Π’Π΅ΠΏΠ΅ΡΡ android-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΡΠΈ.
ΠΠ°Π»Π΅Π΅ Π² ΡΡΠ°ΡΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ android-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘Π΅ΡΠ²Π΅ΡΠ½ΠΎΠ΅ java-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ Π² IDE Eclipse Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ° concurrent. Π ΠΊΠΎΠ½ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ ΠΎΠ±Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ android-ΡΠΎΠΊΠ΅Ρ
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ andriod-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅. Π€ΠΎΡΠΌΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΊΡΡΡΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ.
ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΈΠ· Π΄Π²ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² : ΠΊΠ»Π°ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΌ ΡΠΎΠΊΠ΅ΡΠΎΠΌ Connection ΠΈ ΠΊΠ»Π°ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ MainActivity.
ΠΠ»Π°ΡΡ Connection
ΠΠ»Π°ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Connection ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ (ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ) ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ : host ΠΈ port. ΠΠ΅ΡΠΎΠ΄Ρ Connection Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΈΠ· Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ :
| ΠΠ΅ΡΠΎΠ΄ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|---|---|
| openConnection | ΠΠ΅ΡΠΎΠ΄ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠΎΠΊΠ΅ΡΠ°/ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΡΠΎΠΊΠ΅Ρ ΠΎΡΠΊΡΡΡ, ΡΠΎ ΠΎΠ½ ΡΠ½Π°ΡΠ°Π»Π° Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ. |
| closeConnection | ΠΠ΅ΡΠΎΠ΄ Π·Π°ΠΊΡΡΡΠΈΡ ΡΠΎΠΊΠ΅ΡΠ° |
| sendData | ΠΠ΅ΡΠΎΠ΄ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈΠ· Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ. |
| finalize | ΠΠ΅ΡΠΎΠ΄ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² |
ΠΠΈΡΡΠΈΠ½Π³ Connection
ΠΠ»Π°ΡΡ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ MainActivity
Π Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ MainActivity ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ° : host, port. ΠΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ IP-Π°Π΄ΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° Π΄Π»Ρ ΠΠ°ΡΠ΅Π³ΠΎ android-ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ localhost (127.0.0.1), ΠΈΠ½Π°ΡΠ΅ ΠΡ Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΡΡΠ°ΡΡΡΡ ΡΠ²ΡΠ·Π°ΡΡΡΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Π²Π½ΡΡΡΠΈ Andriod-ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠ½ΠΎΠΏΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΊΠ»Π°ΡΡΡ Connection. ΠΠ½ΠΎΠΏΠΊΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ mBtnSend ΠΈ Π·Π°ΠΊΡΡΡΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ mBtnClose Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Π±Π»ΠΎΠΊΠΈΡΡΡΡΡΡ ΠΏΡΠΈ ΡΡΠ°ΡΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ.
ΠΠΈΡΡΠΈΠ½Π³ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ
ΠΠ΅ΡΠΎΠ΄Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΎΠΊΠ΅ΡΠ½ΡΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ΠΌ
ΠΠΈΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Π½Π°ΠΆΠ°ΡΠΈΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, Π° ΠΎΡΠΊΡΡΡΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, Π΄Π»Ρ ΡΠ΅Π³ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ runOnUiThread. ΠΠ»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ.
Π‘Π΅ΡΠ²Π΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
Π‘Π΅ΡΠ²Π΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ 2 ΠΊΠ»Π°ΡΡΠ° : Server ΠΈ ConnectionWorker. Π‘Π΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ Server Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ConnectionWorker Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅. ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ConnectionWorker Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° Socket Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠ° ΡΠΎΠΊΠ΅ΡΠ°.
ΠΠΈΡΡΠΈΠ½Π³ ConnectionWorker
Π‘Π΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ
Π‘Π΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ Server ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° util.concurrent. ΠΠ° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° java.net ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ServerSocket Π±ΡΠ» ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Thread, ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΊΠΎΡΠΎΡΡΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΅ΡΠ°ΡΡ Π·Π°Π΄Π°ΡΡ Π΅Π³ΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ : cΡΠ°ΡΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Thread.stop ΠΎΠ±ΡΡΠ²Π»Π΅Π½ Deprecated ΠΈ ΠΏΡΠ΅Π΄Π°Π½ ΡΡΡΠΎΠΆΠ°ΠΉΡΠ΅ΠΉ Π°Π½Π°ΡΠ΅ΠΌΠ΅, Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Thread.interrupt Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π°, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΡΠΎΠ²Π½ΡΠΌ ΡΡΠ΅ΡΠΎΠΌ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ (ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΡ : Β«ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΒ»). Π£ΡΠ»ΡΡΠΈΡ Π»ΠΈ Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠΈΠ·ΡΠ² ΠΏΠΎΡΠΎΠΊ ΠΎΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ΄ Π²ΠΎΠΏΡΠΎΡΠΎΠΌ β Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ°Π·Π°ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°.
Π§ΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅ΡΠ²Π΅Ρ Β«ΡΠ½Π°ΡΡΠΆΠΈΒ» Π² ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ Server Π²ΠΊΠ»ΡΡΠΈΠΌ 2 Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Callable ΠΊΠ»Π°ΡΡΠ° : CallableDelay ΠΈ CallableServer. ΠΠ»Π°ΡΡ CallableDelay Π±ΡΠ΄Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΠΏΠΎ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠΈΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ ΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡ 2-ΠΎΠΉ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌΠΈ. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ CallableDelay ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠΎΡΠΎΠΊΠ°, ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ util.concurrent.
ΠΠΈΡΡΠΈΠ½Π³ CallableDelay
CallableDelay ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΠ΅Ρ ΡΠΈΠΊΠ» Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠ°ΠΌΠΈ. ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠΈΠΊΠ»Π° cycle ΠΏΠΎΡΠΎΠΊ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠΈΠΊΠ», ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π²ΡΠΎΡΡΡ Π·Π°Π΄Π°ΡΡ futureTask[1] ΠΈ Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ ΡΠΎΠΊΠ΅Ρ. Π ΠΊΠΎΠ½ΡΠΎΠ»Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.
ΠΠΈΡΡΠΈΠ½Π³ CallableServer
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ CallableServer Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ° Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ². ΠΡΠΈ ΡΡΠ°ΡΡΠ΅ (ΠΌΠ΅ΡΠΎΠ΄ call) ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΡΠΎΠΊΠ΅Ρ ServerSocket ΠΈ ΠΏΠΎΡΠΎΠΊ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠ΅ΠΆΠΈΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ. ΠΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° stopTask, Π»ΠΈΠ±ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Β«Π·Π°Π΄Π°ΡΠΈΒ» ΡΠΈΠΏΠ° FutureTask Ρ Π΄Π°Π½Π½ΡΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ.
ΠΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΌΠ΅ΡΠΎΠ΄ serverSoket.accept Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠΊΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ConnectionWorker ΠΈ Π΅Π³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅. Π ΡΠ΅ΡΠ²Π΅Ρ (ΠΏΠΎΡΠΎΠΊ) ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
Π ΡΠ»ΡΡΠ°Π΅ Π·Π°ΠΊΡΡΡΠΈΡ ΡΠΎΠΊΠ΅ΡΠ° (Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π²Π½Π΅ΡΠ½Π΅ΠΉ Π·Π°Π΄Π°ΡΠΈ FutureTask Ρ Π΄Π°Π½Π½ΡΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ) Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Exception, Π³Π΄Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π°ΠΊΡΡΡΠΈΡ ΡΠΎΠΊΠ΅ΡΠ°; ΠΏΡΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΎΡΠ²Π΅ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΈΠΊΠ» ΠΏΡΠ΅ΡΡΠ²Π°Π΅ΡΡΡ ΠΈ ΠΏΠΎΡΠΎΠΊ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ.
ΠΠΈΡΡΠΈΠ½Π³ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Server
CΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ Server ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄Π²Π° ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (callable1, callable2), ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ ΠΈΠ· Π½ΠΈΡ Π΄Π²Π΅ Π·Π°Π΄Π°ΡΠΈ futureTask ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π·Π°Π΄Π°ΡΠΈ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ execute ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ executor. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠΈΡ Π·Π°Π΄Π°Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ isTasksDone. ΠΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠ±Π΅ΠΈΡ Π·Π°Π΄Π°Ρ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈ ΡΠΈΠΊΠ» ΡΠ°Π±ΠΎΡΡ executor’Π°.
ΠΠ²Π° Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π²ΡΡΠ΅ ΠΊΠ»Π°ΡΡΠ° (CallableDelay, CallableServer) Π½Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π² Π»ΠΈΡΡΠΈΠ½Π³.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ Π½Π° Python Π΄Π»Ρ Π·Π°ΡΠΎΠ΄ΡΡΠ΅ΠΉ
ΠΡΠΈΠ²Π΅ΡΠΈΠΊ. Π Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π·Π°Π½ΡΠ΄Π½ΠΎΠΉ ΡΠ΅ΠΎΡΠΈΠΈ ΠΏΠΎ ΡΠΈΠΏΡ «Π ΡΠ’ΠΎ Π’Π°ΠΠΎΠ Π‘ΠΠ ΠΠΠ . «. ΠΡ Π±ΡΠ΄Π΅ΠΌ Π²ΠΊΡΠ°ΡΡΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄ΡΠΌ ΠΏΡΠΈΠΌΠ΅ΡΡ. ΠΠ°Π½Π½Π°Ρ ΡΡΠ°ΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° ΡΠ΅ΠΌ, ΠΊΡΠΎ Π½Π΅ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ, ΠΊΡΠΎ Π·Π°Π±ΠΈΠ²Π°Π΅Ρ Π² ΡΠ΅ΡΠ΅ΠΏ Π³Π²ΠΎΠ·Π΄ΠΈ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΠΆΠ΅Π»Π΅Π·Π° ΠΈ ΡΡΠ°ΡΡ ΡΠΌΠ½Π΅Π΅, ΠΊΡΠΎ Π΄ΡΠΌΠ°Π΅Ρ ΡΡΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ ΡΡΠΎ ΡΡΠΎ-ΡΠΎ Π·Π°ΠΎΠ±Π»Π°ΡΠ½ΠΎΠ΅ Π΄Π»Ρ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ Π½Π°ΡΠΈΠ½Π°ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π΅ΡΠ°.
ΠΡΠ°ΠΊ, ΠΏΡΠΈΡΡΡΠΏΠΈΠΌ ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² ΡΠ°Π±ΠΎΡΡ:
Π‘Π΅ΡΠ²Π΅Ρ, Π½Π° IP Π°Π΄ΡΠ΅ΡΠ΅ ΠΏΠΎ ΠΏΠΎΡΡΡ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π° ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ IP Π°Π΄ΡΠ΅Ρ Ρ ΠΏΠΎΡΡΠΎΠΌ . IP ΠΌΠ°ΡΠΈΠ½Ρ ΠΈ IP ΠΏΡΠΈΡΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ. ΠΠΎΡΡΡ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 0-65535.
Π‘Π΅ΡΠ²Π΅Ρ Π²ΠΈΠ΄ΠΈΡ ΡΡΠΎ ΠΊΡΠΎ-ΡΠΎ Ρ ΠΎΡΠ΅Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½ΡΠ΄ΡΡ ΠΠ²Π°Π½ΠΎΠ²Π° ΠΠ²Π°Π½Π° ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΎΡΡΡΠ»Π°Π΅Ρ ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡ.
— ΠΠΎΡ ΡΠ°ΠΊ ΠΌΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΊΡΠ°ΡΠΊΠΎ ΡΠ°ΡΠΏΠΈΡΠ°Π»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ. Π Π°ΡΠΏΠΈΡΠ΅ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ±ΠΎΠ»ΡΡΠ΅.
— ΠΠ Π‘Π’ΠΠ! Π ΡΠΎ Π΅ΡΡ Π·Π° TCP ΠΈ UPD?
— Π‘Π΅ΠΊΡΠ½Π΄ΠΎΡΠΊΡ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ UPD ΠΈ TCP?
ΠΠΊΡΠ°ΡΡΠ΅ ΡΡΠΎ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ
ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌΠΈ. ΠΠ½ΠΈ ΠΎΠ±Π° ΡΠ°Π·Π½ΡΠ΅ ΠΊΠ°ΠΊ Π»ΠΎΠ»ΠΈΡ
Π°Π½ΡΠ΅Ρ ΠΈ ΠΌΠΈΠ»ΡΡ
Π°Π½ΡΠ΅Ρ. ΠΡΠΈΠ²Π΅Π΄ΡΠΌ ΠΏΠ°ΡΠΎΡΠΊΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²:
— ΠΠΉ, Π‘Π°Π½ΡΠΊ, Ρ ΡΡΡ ΠΊΠ°ΠΌΠ½ΠΈ Π½Π°ΡΡΠ». ΠΠΎΠΆΠ½ΠΎ Ρ Π² ΡΠ΅Π±Ρ Π΅Π³ΠΎ ΠΊΠΈΠ½Ρ?
— Π₯ΠΎΡΠΎΡΠΎ, Π¨Π°Π½ΡΠΊ, ΠΊΠΈΠ΄Π°ΠΉ
— Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΈΠ΄Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ!
*ΠΠΈΠ½ΡΠ» ΠΊΠ°ΠΌΠ½ΠΈ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΠΌΡΠ³ΠΊΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎ Π‘Π°Π½ΡΠΊ ΡΡΠΏΠ΅Π» ΡΠ»ΠΎΠ²ΠΈΡΡ Π²ΡΠ΅*
ΠΡΠΎ Π±ΡΠ» ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΡ TCP. ΠΠ½ ΠΏΡΠ΅Π²ΠΎΡΡ ΠΎΠ΄ΠΈΡ UPD Π² ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΠΈ Π΄Π°Π½Π½ΡΡ , ΡΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ ΠΈ Π±ΠΎΠ»ΡΡΠ΅ΠΉ Π½Π°Π΄ΡΠΆΠ½ΠΎΡΡΠΈ, Π½ΠΎ Π² ΠΎΡΠ»ΠΈΡΠΈΠΈ ΠΎΡ Π½Π΅Π³ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ΠΉ ΡΠΊΠΎΡΠΎΡΡΡΡ.
— ΠΠΉ, Π‘Π°Π½ΡΠΊ, Π»ΠΎΠ²ΠΈ!
*ΠΠΈΠ½ΡΠ» ΠΊΠ°ΠΌΠ½ΠΈ ΡΠ°ΠΊ ΡΠΈΠ»ΡΠ½ΠΎ, ΡΡΠΎ Π‘Π°Π½ΡΠΊ ΡΡΠ°Π·Ρ Π΄Π°Π» Π΄ΡΡΡ, ΡΡΠΏΠ΅Π² ΡΠ½Π°ΡΠ°Π»Π° ΡΠ»ΠΎΠ²ΠΈΡΡ Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ ΠΊΠ°ΠΌΠ½Π΅ΠΉ*
— *****, Π½Π΅ ΠΏΠΎΠΉΠΌΠ°Π», Π² Π»ΠΈΡΠΎ ΠΏΠΎΠΏΠ°Π»
ΠΡΠΎ Π±ΡΠ» ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΡ UPD. Π ΠΎΡΠ»ΠΈΡΠΈΠΈ ΠΎΡ ΡΠ²ΠΎΠ΅Π³ΠΎ «ΠΏΡΠΈΠ»Π΅ΠΆΠ½ΠΎΠ³ΠΎ» Π±ΡΠ°ΡΠ° ΠΎΠ½ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΠΉ Π² Π·Π°ΠΊΠΈΠ΄ΡΠ²Π°Π½ΠΈΠΈ ΠΊΠ°ΠΌΠ½Ρ. ΠΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΡΠΎΠ³ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π΄Π°Π½Π½ΡΡ , ΠΊΠΈΠ΄Π°Π΅Ρ Π²ΡΡ ΡΡΠΎ Π²ΠΈΠ΄ΠΈΡ.
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ΅ΡΠΏΠ°Π½ΡΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π²Π΅ΡΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠ°ΡΡΠΈΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠ΅ΡΠ²Π΅Ρ.
ΠΠ»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· ΡΠΎΠΊΠ΅ΡΡ Π² Python ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ socket
Π’Π΅ΠΏΠ΅ΡΡ ΠΆΠ΅ Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ»ΡΡΠ°Π»ΠΊΡ.
Π’Π΅ΠΏΠ΅ΡΡ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΏΠΎΡΡΠΎΠ²ΡΠΉ ΡΡΠΈΠΊ ΠΈ Π·Π°ΡΠ°Π½Π΅Π΅ Π³ΠΎΡΠΎΠ²Π°Ρ ΠΊΠΎΡΠΎΠ±ΠΊΠ° Ρ ΠΏΠΎΡΡΠ»ΠΊΠΎΠΉ. Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π½Π°Ρ ΠΏΠΎΡΡΠΎΠ²ΡΠΉ ΡΡΠΈΠΊ. ΠΠ°Ρ ΠΏΠΎΡΡΠΎΠ²ΡΠΉ ΡΡΠΈΠΊ Π²ΠΌΠ΅ΡΠ°Π΅Ρ 1 ΠΠ (1024 Π±Π°ΠΉΡ). ΠΠΎΡΡΠΎΠΌΡ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΎΡΠΊΡΡΠ²Π°ΡΡ ΡΡΠΈΠΊ, Π·Π°Π±ΠΈΡΠ°ΡΡ ΠΎΡΡΡΠ΄Π° Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΡΠΈΠΊ Π½Π΅ ΠΎΠΏΡΡΡΠ΅Π΅Ρ.
ΠΠΎΡ ΡΠ°ΠΊ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π½Π°ΠΌ ΠΎΡΠΏΡΠ°Π²ΠΈΠ»ΠΈ. ΠΡΠΎ ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ Π²Ρ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΠ½ΡΠ»ΠΈ ΠΏΠΎΡΡΠΎΠ²ΡΠΉ ΡΡΠΈΠΊ Π²Π²Π΅ΡΡ Π΄Π½ΠΎΠΌ ΠΈ Π²ΡΡΡΠΏΠ°Π΅ΡΠ΅ ΠΎΡΡΡΠ΄Π° Π²ΡΡ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ°.
— ΠΠΎ Π·Π°ΡΠ΅ΠΌ Π² Π½Π°ΡΠ°Π»Π΅ Π½Π°ΠΌ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π΄Π°Π½Π½ΡΠ΅?
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΡΡΠΎ Π³ΠΎΡΠΎΠ²Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ, ΠΊΠ»ΠΈΠ΅Π½Ρ Π±Ρ ΡΡΠΎΡΠ» ΠΌΠΎΠ»ΡΠ°Π».
Π Π°Π· ΡΠΆ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΎΠΊΠΎΠ½ΡΠ΅Π½ΠΎ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΡΠΌ ΠΊ ΠΊΠ»ΠΈΠ΅Π½ΡΡ
ΠΡ Π²ΠΎΡ, ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΏΠΎ IP, ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ «ΠΡΠΈΠ²Π΅Ρ», Π° ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡ Π½Π°ΡΠ΅ «Π ΡΠ΅Π±Π΅ ΠΏΡΠΈΠ²Π΅Ρ!», Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ ΠΆΠ΄Π°ΡΡ ΠΎΡ Π½Π°Ρ ΠΎΡΠ²Π΅Ρ.
ΠΡΠΎΡΡ Π°ΠΊΡΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΡΠΈ ΠΊΠ°Π½Π°Π»Ρ Π»Π΅Π³ΠΊΠΎ ΠΏΡΠΎΡΠ»ΡΡΠ°ΡΡ, Π° ΠΏΠΎ ΡΠ΅ΠΌΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π»ΠΈΡΠ½ΡΡ
Π΄Π°Π½Π½ΡΡ
ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌΠΈ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡΡ RSA).
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π²ΠΎΠΏΡΠΎΡΠΎΠ²:
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΎΠΊΠ΅ΡΠΎΠ² ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠΎΠ½ΡΠΎΠ»Ρ? ΠΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π² Π½ΡΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ?
ΠΠΎΠ½Π΅ΡΠ½ΠΎ. ΠΠΎΠΌΠ°Π½Π΄Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠΏΡΠ°Π²ΠΊΠΎΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, Π° ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΡΠ΅ΡΠ΅Π· ΡΡΠ»ΠΎΠ²ΠΈΡ.
ΠΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΉΠΌΠ°ΡΡ?
Π§ΡΠΎ Π΅ΡΠ»ΠΈ Ρ ΡΠΊΠ°ΠΆΡ ΡΡΠΆΠΎΠΉ Π°Π΄ΡΠ΅Ρ Π² ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π½ΠΈΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°?
ΠΠ°ΠΌ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ±ΡΠ΅Ρ ΠΎΡΠΈΠ±ΠΊΡ.
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΠΎ ΡΠΎΠΊΠ΅ΡΠ°ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠΎΡΠΎ, Π²ΠΈΠ΄Π΅ΠΎ ΠΈ Ρ.Π΄.?
ΠΠ°, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ. Π€ΠΎΡΠΎ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅. ΠΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΡ, Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ.
ΠΠ΅Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠΏΡΠ°Π²ΠΎΡΠΊΠ° ΠΏΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΠΊΠ΅ΡΠΎΠ²:
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ, ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ:
Π Π½Π° ΡΡΠΎΠΌ ΠΌΡ Π·Π°ΠΊΠΎΠ½ΡΠΈΠΌ Π²ΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ Π² Python Π΄Π»Ρ Π·Π°ΡΠΎΠ΄ΡΡΠ΅ΠΉ. ΠΠ°ΠΏΠΎΠΌΠ½Ρ ΡΡΠΎ Π΄Π°Π½Π½Π°Ρ ΡΡΠ°ΡΡΡ Π½Π΅ ΡΠΎΠ·Π΄Π°Π½Π° Π΄Π»Ρ Truehard ΠΊΠΎΠ΄Π΅ΡΠΎΠ², ΠΎΠ½Π° ΡΠΎΠ·Π΄Π°Π½Π° Π΄Π»Ρ ΡΠ΅Ρ ΠΊΡΠΎ Π½Π΅ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΊΠ΅ΡΠ°Ρ ΠΈ Ρ ΠΎΡΠ΅Ρ ΠΏΠΎΠ½ΡΡΡ ΠΊΠ°ΠΊ Ρ Π½ΠΈΠΌΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
ΠΠ°ΠΌΠ΅ΡΠΊΠΈ Python #18: Π‘Π΅ΡΠ΅Π²ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠΎΡ ΠΌΡ ΠΈ Π΄ΠΎΠ±ΡΠ°Π»ΠΈΡΡ Π΄ΠΎ ΡΠ°ΠΌΠΎΠ³ΠΎ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ β ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ. ΠΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡΡΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ? ΠΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠΎΠΊΠ΅Ρ?
ΠΡΠΎΡΠΎΠΊΠΎΠ»
TCP ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ, ΡΡΠΎΠ±Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°ΠΌΠΈ Π΄Π²ΡΡΡΠΎΡΠΎΠ½Π½ΠΈΠΉ ΠΊΠ°Π½Π°Π» ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ TCP ΠΏΠ°ΠΊΠ΅ΡΡ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ Ρ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΡΡΠΈ, Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΡ ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΠΌ ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ. Π ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ TCP ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ΅ΡΡΠ½Π½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ, Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ Π½Π°Π΄ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ, ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ.
ΠΡΠΎΡΠΎΠΊΠΎΠ» UDP β Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡ ΠΌΠΎΠ³ΡΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² Π²ΠΈΠ΄Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ TCP, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ UDP Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΡΡ. ΠΡΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ , Π² ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ Π½ΡΠΆΠ½Ρ Π³Π°ΡΠ°Π½ΡΠΈΠΈ. ΠΠΎΡΡΠΎΠΌΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ TCP.
Π‘Π΅ΡΠ²Π΅Ρ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ ΡΠ²ΠΎΠ΅ΠΌΡ ΡΠΎΠΊΠ΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΏΠΎΡΡ. ΠΠΎΡΡ β ΡΠΈΡΠ»ΠΎ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² TCP, UDP, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π΅, Π΄Π»Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π°Π½Π½ΡΠΉ IP-ΠΏΠ°ΠΊΠ΅Ρ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΡΡΡ Ρ Π½ΠΎΠΌΠ΅ΡΠ°ΠΌΠΈ 0-1023 Π½Π΅Π»ΡΠ·Ρ β ΠΎΠ½ΠΈ Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΠΎΠ΄ ΡΠ»ΡΠΆΠ΅Π±Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π²ΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 21 β FTP, 80 β HTTP ΠΈ Ρ.Π΄.). ΠΠ»ΠΈΠ΅Π½Ρ, ΠΎΡΠΏΡΠ°Π²Π»ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΡΠΎΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠΊΠ΅Ρ. ΠΠ²Π° ΡΠΎΠΊΠ΅ΡΠ° Ρ ΠΎΠ±ΠΎΠΈΡ ΡΡΠΎΡΠΎΠ½ ΡΠΎΠ·Π΄Π°ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΈΠ΄ΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π΄Π°Π½Π½ΡΡ . ΠΡΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠΌ TCP, ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π΄Π²Π° ΡΠΎΠΊΠ΅ΡΠ°: ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ β ΡΠ»ΡΡΠ°ΡΡΠΈΠΉ (listen). ΠΠ½ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠ΅ΠΆΠΈΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈ Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠ΅ Π°ΠΊΡΠΈΠ²Π½ΡΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΡΠΎΡΠΎΠΉ β ΡΠΎΠΊΠ΅Ρ Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΡ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ (accept). ΠΡΠΎ Π΄Π²Π° ΡΠ°Π·Π½ΡΡ ΡΠΎΠΊΠ΅ΡΠ°, Π½Π΅ ΠΏΡΡΠ°ΠΉΡΠ΅
Π Π°Π±ΠΎΡΠ° Ρ ΡΠΎΠΊΠ΅ΡΠ°ΠΌΠΈ Π² Python
| ΠΠ±ΡΠΈΠ΅ | Π‘Π΅ΡΠ²Π΅ΡΠ½ΡΠ΅ | ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ |
| socket β ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠΊΠ΅Ρ | bind β ΠΏΡΠΈΠ²ΡΠ·Π°ΡΡ ΡΠΎΠΊΠ΅Ρ ΠΊ IP-Π°Π΄ΡΠ΅ΡΡ ΠΈ ΠΏΠΎΡΡΡ ΠΌΠ°ΡΠΈΠ½Ρ | connect β ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ |
| send β ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ | listen β ΠΏΡΠΎΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΎ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ | |
| recv β ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ | accept β ΠΏΡΠΈΠ½ΡΡΡ Π·Π°ΠΏΡΠΎΡ Π½Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ | |
| close β Π·Π°ΠΊΡΡΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ |
Π Π°Π±ΠΎΡΠ° Π’Π‘Π ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ Ρ ΡΠΎΠΊΠ΅ΡΠΎΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π’Π‘Π , ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅. ΠΠΎΡΡΠ½Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π² ΠΊΠΎΠ΄Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΌΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ)
Π‘Π΅ΡΠ²Π΅ΡΠ½Π°Ρ ΡΠ°ΡΡΡ:
Π€ΡΠ½ΠΊΡΠΈΡ socket() ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠ°. Π Π½Π΅ΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°: communication domain ΠΈ type of socket. AF_INET β ΡΡΠΎ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ Π΄ΠΎΠΌΠ΅Π½, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π΄Π°Π΅Ρ ΡΠ΅ΡΠ΅Π²ΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΡΡΡ Π½Π°ΡΠ΅ΠΌΡ ΡΠΎΠΊΠ΅ΡΡ. Π’ΠΈΠΏ ΡΠΎΠΊΠ΅ΡΠ° β SOCK_STREAM β ΠΎΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΎΠΊΠ΅Ρ ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠΉ, ΡΠΎ Π΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ, Π½Π°Π΄Π΅ΠΆΠ½ΡΠΉ Π΄Π²ΡΡΡΠΎΡΠΎΠ½Π½ΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π±Π°ΠΉΡΠΎΠ² ΠΏΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ Π’Π‘Π . Π‘ΠΎΠ·Π΄Π°Π»Π°ΡΡ ΠΊΠΎΠ½Π΅ΡΠ½Π°Ρ ΡΠΎΡΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ β ΡΠΎΠΊΠ΅Ρ. Π€ΡΠ½ΠΊΡΠΈΡ socket() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π°ΠΌ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠΎΠΊΠ΅ΡΠΎΠΌ, ΠΊΠ°ΠΊ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ β Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΈ ΡΡΠΈΡΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π²/ΠΈΠ· Π½Π΅Π³ΠΎ. ΠΠ΅ΡΠΎΠ΄ encode ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π·Π΄Π΅ΡΡ, Ρ.ΠΊ. Π΄Π°Π½Π½ΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΠΎ ΡΠ΅ΡΠΈ Π² Π²ΠΈΠ΄Π΅ Π±Π°ΠΉΡΠΎΠ².
# ΡΠ΅ΡΠ²Π΅ΡΠ½Π°Ρ ΡΠ°ΡΡΡ
from socket import *
import time
s = socket(AF_INET, SOCK_STREAM) # Π‘ΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΎΠΊΠ΅Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° TCP
s.bind((Β», 10000)) # ΠΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ Π΅ΠΌΡ ΠΏΠΎΡΡ 10000
s.listen(10) # ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ²
while True:
client, addr = s.accept() # Π°ΠΊΡΠ΅ΠΏΡΠΈΠΌ Π·Π°ΠΏΡΠΎΡ Π½Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅
print(client)
print(Β«ΠΠ°ΠΏΡΠΎΡ Π½Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΎΡ %sΒ» % str(addr))
timestr = time.ctime(time.time()) + Β«\nΒ»
client.send(timestr.encode(βutf-8β)) #ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅, ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΠ°ΠΊΠΎΠ²Π°Π² ΠΈΡ
Π² Π±Π°ΠΉΡΡ
client.close() # Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅
ΠΡΠ»ΠΈ Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Π² ΡΡΠ΅Π΄Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠΎ ΡΠ°Π·ΡΠ΅ΡΠΈΡΠ΅ Π²Π°ΡΠ΅ΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² Π²Π°ΡΠ΅ΠΉ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΈ:
ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°Ρ ΡΠ°ΡΡΡ
ΠΠ»ΠΈΠ΅Π½Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° connect (Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, localhost, Ρ.ΠΊ. ΡΠ΅ΡΠ²Π΅Ρ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅). ΠΠ°ΠΊ ΠΌΡ ΡΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, ΡΠ΅ΡΠ²Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π½Π°ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π±Π°ΠΉΡΠΎΠ² β Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ Π² ΡΡΡΠΎΠΊΠΈ ΡΠ½ΠΈΠΊΠΎΠ΄Π°
from socket import *
s = socket(AF_INET, SOCK_STREAM) # ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ ΡΠΎΠΊΠ΅Ρ, ΠΊΠ°ΠΊ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°
s.connect((βlocalhostβ, 10000)) # ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΈΠΌΡΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ
tm = s.recv(1024) # ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 1024 Π±Π°ΠΉΡΠ° Π΄Π°Π½Π½ΡΡ
s.close() # Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅
print(Β«Π’Π΅ΠΊΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ: %sΒ» % tm.decode(βutf-8β)) # ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅, Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π² Π±Π°ΠΉΡΡ
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΡΠ°ΡΡΠΈ (ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΠ²Π΅ΡΠ°):
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ (ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°):
ΠΠ°ΠΊ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅/Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ?
Π‘ΡΡΠΎΠΊΠΈ, Π±Π°ΠΉΡΡ, ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΡΡΡΠΎΠΊΠΈ Π±Π°ΠΉΡΠΎΠ²:
| ΠΠΎΠ΄ / Π΄Π°Π½Π½ΡΠ΅ | Π Π΅Π·ΡΠ»ΡΡΠ°Ρ print(type()) |
| i= βDataβ | β ΡΡΡΠΎΠΊΠ° |
| bi = bβDataβ | β ΡΡΡΠΎΠΊΠ° Π±Π°ΠΉΡΠΎΠ² |
| ba = bytearray(bi) | β ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠ°Ρ ΡΡΡΠΎΠΊΠ° Π±Π°ΠΉΡΠΎΠ² |
| i2 = bi.decode(βcp1251β) | β ΠΈΠ· ΡΡΡΠΎΠΊΠΈ Π±Π°ΠΉΡ Π² unicode-ΡΡΡΠΎΠΊΡ |
| bi2 = i.encode(βkoi8-rβ) | β ΠΈΠ· unicode-ΡΡΡΠΎΠΊΠΈ Π² ΡΡΡΠΎΠΊΡ Π±Π°ΠΉΡ |
| ba2 = bytearray(i, βutf-8β) | β ΠΈΠ· unicode-ΡΡΡΠΎΠΊΠΈ Π² ΠΌΠ°ΡΡΠΈΠ² Π±Π°ΠΉΡΠΎΠ² |
ΠΡΠΏΡΠ°Π²ΠΊΠ° ΠΈ ΠΏΡΠΈΡΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. Π‘Π΅ΡΠ²Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΡΠ²Π΅Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡ. ΠΠ»ΠΈΠ΅Π½Ρ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΎΡ Π½Π΅Π³ΠΎ ΠΎΡΠ²Π΅Ρ
from socket import *
import time
s = socket(AF_INET, SOCK_STREAM) # Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΎΠΊΠ΅Ρ TCP
s.bind((Β», 11111)) # ΠΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΡΡ 11111
s.listen(5) # ΠΏΡΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ
while True: # ΠΏΠΎΠΊΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ (ΠΏΠΎΠΊΠ° Π΅ΡΡΡ Π·Π°ΠΏΡΠΎΡΡ Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°)
client, addr = s.accept() # ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ Π·Π°ΠΏΡΠΎΡ Π½Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅
data = client.recv(1000000) # ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π°Π½Π½ΡΡ
, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠ½ΡΡΡ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
print(βΠΠ΅ΡΡΠ΅Π΄ΠΆ: β, data.decode(βutf-8β), β, ΠΏΡΠΈΡΠ»ΠΎ ΠΎΡ Π½Π΅Π³ΠΎ: β, addr)
msg = βΠΡΠΏΠΈ Π²ΠΈΡΠΊΠΈβ
client.send(msg.encode(βutf-8β)) #ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅, ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΠ°ΠΊΠΎΠ²Π°Π² ΠΈΡ
Π² Π±Π°ΠΉΡΡ
client.close()
# ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°Ρ ΡΠ°ΡΡΡ
from socket import *
s = socket(AF_INET, SOCK_STREAM) # Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΎΠΊΠ΅Ρ TCP
s.connect((βlocalhostβ, 11111)) # ΠΊΠΎΠ½Π½Π΅ΠΊΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ
msg = βΠΡΠΈΠ²Π΅Ρ, ΡΠ΅ΡΠ²Π΅Ρβ
s.send(msg.encode(βutf-8β)) #ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅, ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΠ°ΠΊΠΎΠ²Π°Π² ΠΈΡ
Π² Π±Π°ΠΉΡΡ
data = s.recv(1000000) #ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 1000000 Π±Π°ΠΉΡ
print(βΠ‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ°: β, data.decode(βutf-8β), β, Π΄Π»ΠΈΠ½ΠΎΠΉ β, len(data), β Π±Π°ΠΉΡβ) #ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π² Π±Π°ΠΉΡΡ ΡΠ½ΠΈΠΊΠΎΠ΄
s.close()
JSON Instant Messaging
JIM β ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π· TCP-ΡΠΎΠΊΠ΅ΡΡ (SOCK_STREAM) ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ JSON-ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΡΠ΅ ΡΠ΅ΡΠ΅Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΡ ΠΎΠ΄ΡΡ Π² Π±Π°ΠΉΡΠΎΠ²ΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ. ΠΠ°Π½Π½ΡΠ΅ Π² JSON-ΡΠΎΡΠΌΠ°ΡΠ΅ Π² ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π΅ JIM Π²ΡΠ΅Π³Π΄Π° ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π΄Π²Π° ΠΏΠΎΠ»Ρ: action ΠΈ time.
ΠΠΎΠ»Π΅ action Π·Π°Π΄Π°Π΅Ρ Ρ Π°ΡΠ°ΠΊΡΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ β Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΠΈΠ»ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ Ρ.ΠΏ.
ΠΠΎΠ»Π΅ time ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²ΡΠ΅ΠΌΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ UNIX-Π²ΡΠ΅ΠΌΡ β ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΠΊΡΠ½Π΄, ΠΏΡΠΎΡΠ΅Π΄ΡΠΈΡ Ρ ΠΏΠΎΠ»ΡΠ½ΠΎΡΠΈ (00:00:00 UTC) 1 ΡΠ½Π²Π°ΡΡ 1970 Π³ΠΎΠ΄Π°)
JSON-ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² JIM ΠΈΠΌΠ΅ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΌ ΡΠ΅ΠΊΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ 500 ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ. ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ:
ΠΠΎΠ»Π΅ action β Β«ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅Β», 15 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²
ΠΠΎΠ»Π΅ response β Β«ΠΠΎΠ΄ ΠΎΡΠ²Π΅ΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠ°Β», 3 ΡΠΈΠΌΠ²ΠΎΠ»Π° (ΡΠΈΡΡΡ)
ΠΠΎΠ»Π΅ name β Β«ΠΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΠ»ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ°ΡΠ°Β». ΠΠ΄Π΅ΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ 25 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²;
ΠΠ΅ΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ JSON-ΠΎΠ±ΡΠ΅ΠΊΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ»ΠΎΠΆΠΈΡΡΡΡ Π² 640 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
ΠΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, Π½Π°Π΄ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΊΠΎΠΉ JSON-ΠΎΠ±ΡΠ΅ΠΊΡ:
ΠΡΠ²Π΅ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ° Π±ΡΠ΄ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΏΠΎΠ»Π΅ response, ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎ (Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅) ΠΏΠΎΠ»Π΅ alert/error Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ ΠΎΡΠΈΠ±ΠΊΠΈ.
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ
ΠΠ²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ β Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ JIM, Ρ.Π΅. Π΅Π³ΠΎ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΡΠ±ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ. ΠΡΠ»ΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π½ΡΠΆΠ½Π° Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ ΡΡΠ°ΠΏΠ΅, ΡΠ΅ΡΠ²Π΅Ρ Π²ΡΠ΄Π°ΡΡ Π°Π»Π΅ΡΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ 401. ΠΡΠ»ΠΈ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π²ΡΡ ΠΆΠ΅ Π½ΡΠΆΠ½Π°, ΡΠΎ ΡΠ΅ΡΠ²Π΅Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ΄Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΡΠ΅ΡΠΏΠΎΠ½Π·ΠΎΠ²:
<
Β«responseΒ»: 200,
Β«alertΒ»:Β»ΠΠ΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅/ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅Β»
>
<
Β«responseΒ»: 402,
«error»: «This could be «wrong password» or «no account with that name»»
>
<
Β«responseΒ»: 409,
Β«errorΒ»: Β«Someone is already connected with the given user nameΒ»
>
ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ βquitβ:
Π ΡΠ΅ΡΠΈ/ Π½Π΅ Π² ΡΠ΅ΡΠΈ
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΡΡ ΡΠ²ΠΎΡ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΈΠ΅ Π² Β«ΠΎΠ½Π»Π°ΠΉΠ½Π΅Β», ΠΊΠ»ΠΈΠ΅Π½Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ presence ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠ»Π΅ΠΌ type
Π ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎΡΡΠ»Π°Π΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ probe-Π·Π°ΠΏΡΠΎΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°:
ΠΠ»Π΅ΡΡΡ ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°
| ΠΠΎΠ΄ | Π§ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ? |
| 1xx β ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ | 100 β Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅; 101 β Π²Π°ΠΆΠ½ΠΎΠ΅ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅. |
| 2xx β ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅: | 200 β OK; 201 (created) β ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ·Π΄Π°Π½; 202 (accepted) β ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅. |
| 4xx β ΠΎΡΠΈΠ±ΠΊΠ° Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°: | 400 β Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Π·Π°ΠΏΡΠΎΡ/JSON-ΠΎΠ±ΡΠ΅ΠΊΡ; 401 β Π½Π΅ Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½; 402 β Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Π»ΠΎΠ³ΠΈΠ½/ΠΏΠ°ΡΠΎΠ»Ρ; 403 (forbidden) β ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½; 404 (not found) β ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ/ΡΠ°Ρ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅; 409 (conflict) β ΡΠΆΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ Π»ΠΎΠ³ΠΈΠ½ΠΎΠΌ; 410 (gone) β Π°Π΄ΡΠ΅ΡΠ°Ρ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, Π½ΠΎ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½ (offline). |
| 5xx β ΠΎΡΠΈΠ±ΠΊΠ° Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ°: | 500 β ΠΎΡΠΈΠ±ΠΊΠ° ΡΠ΅ΡΠ²Π΅ΡΠ°. |
ΠΠ±ΠΌΠ΅Π½ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ
ΠΠΊΡΠ½ msg Π΄Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΎΠ΄Π½ΠΎ β Π΅ΠΌΡ Π½Π°Π΄ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ°ΡΡ ΠΈΠ· ΠΏΠΎΠ»Ρ to. ΠΡΠ»ΠΈ Π½Π΅ Π·Π°Π΄Π°Π½Π° ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ° Π² ΠΏΠΎΠ»Π΅ encoding, ΡΠΎ ΡΠ΅ΡΠ²Π΅Ρ Π±ΡΠ΄Π΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ascii-ΡΠΎΡΠΌΠ°ΡΠ΅
Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² Β«ΡΠ°ΡΒ»
Π’ΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΠΎΠ±ΡΡΠ½ΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΠΎΠ»Π΅ to ΡΡΠ°Π²ΠΈΡΡΡ ΡΠ΅ΡΠ΅ΡΠΊΠ° Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°ΡΡΡΠΌΠ°






