ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ java

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ простого ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрного прилоТСния Π½Π° Java

Β«ΠšΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр» это ΠΎΡ‡Π΅Π½ΡŒ распространСнная ΠΈ логичная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. МнС каТСтся, Ρ‡Ρ‚ΠΎ Π² наши Π΄Π½ΠΈ Ρ€Π΅Π΄ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ standalone-клиСнтскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я принял Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ построСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрного прилоТСния Π½Π° Java Π±Π΅Π· привязки ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅. Π‘Π½Π°Ρ‡Π°Π»Π° Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ пробСТимся ΠΏΠΎ классовой структурС прилоТСния, ΠΏΠΎΡ‚ΠΎΠΌ посмотрим Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ класса. Π’ самом ΠΊΠΎΠ½Ρ†Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ я Π΄Π°ΠΌ ссылку Π½Π° скачиваниС Π°Ρ€Ρ…ΠΈΠ²Π° с Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΉ структурой прилоТСния. Π˜Ρ‚Π°ΠΊ, Π½Π°Ρ‡Π½Π΅ΠΌ.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ прилоТСния

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ, СстСствСнно, ΡΠ²Π»ΡΡŽΡ‚ΡΡ нСпосрСдствСнно ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ сСрвСр. Однако, ΠΊΡ€ΠΎΠΌΠ΅ Π½ΠΈΡ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π΅Ρ‰Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Π² ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ случаС, Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° ΠΎΠ±ΠΌΠ΅Π½ сообщСниями ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром. Π’ минимальной ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π°Ρ†ΠΈΠΈ Π½ΡƒΠΆΠ½Ρ‹ Ρ‚Π°ΠΊΠΈΠ΅ классы: MessageReader/MessageWriter(считываСт/записываСт сообщСниС Π² ΠΏΠΎΡ‚ΠΎΠΊ Π½Π° сокСтС), MessageFactory(содСрТит ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… сообщСний), Π½Π°Π±ΠΎΡ€ сообщСний-запросов(Request) ΠΈ Π½Π°Π±ΠΎΡ€ сообщСний-ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²(Response). ВсС ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ Β«coreΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρƒ сСбя ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ сСрвСр.

Рассмотрим ΠΊΠ»Π°ΡΡΠΎΠ²ΡƒΡŽ структуру всСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Классовая структура ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрного прилоТСния

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π° Java

Π Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅, ΠΎΠ½ ΠΏΠΎ сути своСй Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ супСр слоТного, просто создаСт сокСт ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ сСрвСр-сокСту с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ связки host:port. Π›Π°ΡƒΠ½Ρ‡Π΅Ρ€ создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Client ΠΈ запускаСт Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠ²ΠΎΠΆΡƒ Π±Π΅Π· ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠ², ΠΈΠ±ΠΎ любая IDE Π²Π°ΠΌ ΠΈΡ… ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚(Ρ‚Π΅, ΠΊΡ‚ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚ Π½Π° Java Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π±Π΅Π· IDE ΠΎΡ‡Π΅Π½ΡŒ слоТно). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΊΠΎΠ½Ρ†Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ смоТСтС ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΠ² с этим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ.

ClientLauncher.java

Client.java

Под словами Β«Π»ΠΎΠ³ΠΈΠΊΠ° прилоТСния» я ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями с сСрвСром, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π΄Π°Π½Π½Ρ‹Ρ… для достиТСния ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ†Π΅Π»ΠΈ.

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ сСрвСра Π½Π° Java

Π—Π°Π΄Π°Ρ‡Π° сСрвСра ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ свой сСрвСрный сокСт Π½Π° Π½ΡƒΠΆΠ½ΠΎΠΌ адрСсС ΠΈ ΠΆΠ΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ принято Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ клиСнтской сСссиСй, создаСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ.

Напомню, Ρ‡Ρ‚ΠΎ Π² классС ClientSession описан основной Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, ΠΎΠ±ΠΌΠ΅Π½ сообщСниями, Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π΅. Π’ классС Context содСрТится общая информация для всСх ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² сСрвСра, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡƒΡ‚ΠΈ для сохранСния Π»ΠΎΠ³ΠΎΠ².

ServerLauncher.java

Server.java

Context.java

ClientSession.java

SessionsManager.java

Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ классы ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° Β«coreΒ»

ΠŸΠΎΠΌΠ΅Ρ‰Ρƒ всС Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ классы ΠΏΠΎΠ΄ ΠΎΠ΄ΠΈΠ½ ΠΊΠ°Ρ‚, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ классов Π² точности соотвСтствуСт названиям ΠΈΠ· списка «классовая структура» Π²Ρ‹ΡˆΠ΅, ΠΏΠΎ Π½Π΅ΠΌΡƒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ класса.

ΠŸΠ°Ρ€Π° слов ΠΎ сообщСниях, классы Request ΠΈ Response ΡΠ²Π»ΡΡŽΡ‚ΡΡ абстрактными ΠΈ ΠΈΠ³Ρ€Π°ΡŽΡ‚ Ρ€ΠΎΠ»ΡŒ классификаторов сообщСния. Благодаря этому ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ «запросы» ΠΎΡ‚ Β«ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²Β». Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ я ΠΏΡ€ΠΈΠ²Π΅Π» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ сообщСниС β€” Handshake, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Β«Ρ€ΡƒΠΊΠΎΠΏΠΎΠΆΠ°Ρ‚ΠΈΠ΅Β» ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ сСрвСра. ВсС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ сообщСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ прописаны Π² классС MessageFactory ΠΏΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ этих Π΄Π²ΡƒΡ….

Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΠ² с шаблоном ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрного прилоТСния Π½Π° Java

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

Главная Ρ†Π΅Π»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я прСслСдовал ΠΏΡ€ΠΈ написании этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ½Π΅ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ Π΅Ρ‰Π΅ Π·Π° считанныС ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ Β«ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒΒ» Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, я с этим справился, Ссли Π±ΡƒΠ΄ΡƒΡ‚ дополнСния ΠΈΠ»ΠΈ замСчания, ΠΏΠΈΡˆΠΈΡ‚Π΅ Π² коммСнтариях ΠΈΠ»ΠΈ Π½Π° ΠΏΠΎΡ‡Ρ‚Ρƒ. А Π½Π° сСгодня Ρƒ мСня всС, спасибо Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠšΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр шаг β€” Π·Π° β€” шагом, ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π΄ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ (Client-Server step by step)

ЦСль ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ Java программистам всС этапы создания ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ сСрвСра. Для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ понимания Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹ основная информация содСрТится Π² коммСнтариях ΠΌΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ Π² Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π² консоли сообщСниях для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ понимания Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ происходит ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π’ Π½Π°Ρ‡Π°Π»Π΅ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСно созданиС элСмСнтарного ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСра, для усвоСния Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Π·Π½Π°Π½ΠΈΠΉ, Π½Π° основС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒΡΡ многопоточная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°.

β€” ΠŸΠΎΡ‚ΠΎΠΊΠΈ: для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΡƒΡ‚Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ подразумСваСтся ΠΏΠΎΠ΄ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ я Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π² ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ синоним β€” Π½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΡƒΡ‚Π°Ρ‚ΡŒ Stream ΠΈ Thread, всё-Ρ‚Π°ΠΊΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ β€” Π½ΠΈΡ‚ΡŒ, говоря ΠΏΡ€ΠΎ Thread.

β€” Π‘ΠΎΠΊΠ΅Ρ‚Ρ‹(Sockets): Π΄Π°Π½Π½ΠΎΠ΅ понятиС Ρ‚ΠΎΠΆΠ΅ Π½Π΅ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ сСрвСр выполняСт β€” клиСнтскиС дСйствия, Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ β€” сСрвСрныС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ» понятиС сСрвСрного сокСта β€” (ServerSocket) ΠΈ сокСта (Socket) Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ практичСски осущСствляСтся ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ сокСт общСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ понятно ΠΎ Ρ‡Ρ‘ΠΌ Ρ€Π΅Ρ‡ΡŒ.

Бпасибо Π·Π° подсказку ΠΏΡ€ΠΎ Thread.sleep();!
ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Thread.sleep(); ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ β€” это ΠΌΠΎΠ²Π΅Ρ‚ΠΎΠ½! Π’ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ я Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Ρ‹Π»ΠΎ нагляднСС, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΡƒΡΠΏΠ΅Π²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² происходящСм.
Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ тСстируйтС, ΠΈΠ·ΡƒΡ‡Π°ΠΉΡ‚Π΅ ΠΈ Π² своём ΠΊΠΎΠ΄Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Thread.sleep();!

1) ΠžΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ элСмСнтарный сСрвСр.
2) ΠšΠ»ΠΈΠ΅Π½Ρ‚.
3) ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ сСрвСр – сам ΠΏΠΎ сСбС этот сСрвСр Π½Π΅ участвуСт Π² ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΈ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Π° лишь являСтся Ρ„Π°Π±Ρ€ΠΈΠΊΠΎΠΉ ΠΎΠ΄Π½ΠΎΠ½ΠΈΡ‚Π΅Π²Ρ‹Ρ… Π΄Π΅Π»Π΅Π³Π°Ρ‚ΠΎΠ²(Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… для вСдСния Π΄ΠΈΠ°Π»ΠΎΠ³Π° с ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ сСрвСров) для общСния с вновь ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ²ΡˆΠΈΠΌΠΈΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ послС окончания общСния с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ.
4) Π˜ΠΌΠΈΡ‚Π°Ρ†ΠΈΡ мноТСствСнного обращСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΊ сСрвСру.

Π˜Ρ‚Π°ΠΊ, Π½Π°Ρ‡Π½Ρ‘ΠΌ с изучСния структуры ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ сСрвСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° для Π΄ΠΈΠ°Π»ΠΎΠ³Π°. Код ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Π½ΠΈΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π² своСй IDE Π² этом идСя всСй ΡΡ‚Π°Ρ‚ΡŒΠΈ. ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ всС Π΄Π΅Ρ‚Π°Π»ΠΈ ΡƒΡΡΠ½ΠΈΡ‚ΡŒ ΠΈΠ· ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π·Π°Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½ΠΈΠΆΠ΅:

Π‘Π΅Ρ€Π²Π΅Ρ€ Π·Π°ΠΏΡƒΡ‰Π΅Π½ ΠΈ находится Π² Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ server.accept(); обращСния ΠΊ Π½Π΅ΠΌΡƒ с запросом Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ, напишСм ΠΊΠΎΠ΄ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ запустим Π΅Π³ΠΎ. ΠšΠ»ΠΈΠ΅Π½Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π² Π΅Π³ΠΎ консоли (Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! Π² Π΄Π°Π½Π½ΠΎΠΌ случаС сСрвСр ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ адрСсом β€” localhost, поэтому ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ строк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈΡΡŒ Π² Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ консоль ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°!).
ПослС Π²Π²ΠΎΠ΄Π° строки Π² консоль ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ наТатия enter строка провСряСтся Π½Π΅ Π²Π²Ρ‘Π» Π»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ΅ слово для окончания общСния дальшС отправляСтся сСрвСру, Π³Π΄Π΅ ΠΎΠ½ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π΅Ρ‘ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ провСряСт Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ³ΠΎ слова Π²Ρ‹Ρ…ΠΎΠ΄Π°. Оба ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ сСрвСр ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ΅ слово Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ рСсурсы послС ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ.
ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ ΠΊΠ°ΠΊ это выглядит Π² ΠΊΠΎΠ΄Π΅:

А Ρ‡Ρ‚ΠΎ Ссли ΠΊ сСрвСру Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠ΅Π½Ρ‚!? Π’Π΅Π΄ΡŒ описанный Π²Ρ‹ΡˆΠ΅ сСрвСр Π»ΠΈΠ±ΠΎ находится Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π»ΠΈΠ±ΠΎ общаСтся с Π½ΠΈΠΌ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ соСдинСния, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ? Для Ρ‚Π°ΠΊΠΎΠ³ΠΎ случая Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ которая Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ описанных Π²Ρ‹ΡˆΠ΅ сСрвСров ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊ сокСту Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π½Π΅ доТидаясь ΠΏΠΎΠΊΠ° Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ подсСрвСр Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ Π΄ΠΈΠ°Π»ΠΎΠ³ с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ accept() Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Но Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° сСрвСрной машинС Ρ…Π²Π°Ρ‚ΠΈΠ»ΠΎ рСсурсов для общСния со мноТСством ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ количСство Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π€Π°Π±Ρ€ΠΈΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ сСрвСра(модификация Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°ΡΠ°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ класс сСрвСра для Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс β€” Runnable для возмоТности Π΅Π³ΠΎ использования Π² ΠΏΡƒΠ»Π΅ Π½ΠΈΡ‚Π΅ΠΉ β€” ExecutorServices). Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим Ρ‚Π°ΠΊΡƒΡŽ ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ ΠΈ ознакомимся с ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌ описаниСм Π΅Ρ‘ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² ΠΊΠΎΠ΄Π΅:

Для ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΈ мноТСствСнного обращСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΊ сСрвСру, создадим ΠΈ запустим (послС запуска сСрвСрной части) Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ Runnable ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ сСрвСру ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ сообщСния Π² Ρ†ΠΈΠΊΠ»Π΅:

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° Ρ„Π°Π±Ρ€ΠΈΠΊΠ° запускаСт β€” TestRunnableClientTester() ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², напишСм для Π½ΠΈΡ… ΠΊΠΎΠ΄ ΠΈ послС этого запустим саму Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅ΠΉ Π±Ρ‹Π»ΠΎ ΠΊΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π² своём ΠΏΡƒΠ»Π΅:

ЗапускайтС, вноситС измСнСния Π² ΠΊΠΎΠ΄, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°ΠΊ Π½Π° самом Π΄Π΅Π»Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ этой структуры.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΡΠ½ΠΎΠ²Ρ‹ программирования TCP-сокСтов Π½Π° Java

ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ java. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ java

ΠšΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° β€” Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнная структура ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅. Π’ этой Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ (Ρ‚.Π΅. ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹, устройства Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° Π²Π΅Ρ‰Π΅ΠΉ ΠΈ Ρ‚. Π΄.) сначала Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ рСсурсы с сСрвСра. Π—Π°Ρ‚Π΅ΠΌ сСрвСр отправляСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° запросы ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Π§Ρ‚ΠΎΠ±Ρ‹ это ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Ρ‚Π°ΠΊ ΠΈ Π½Π° сторонС сСрвСра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ эту ΡΠ΅Ρ‚Π΅Π²ΡƒΡŽ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ называСтся ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ посрСдством сокСтов.

ΠŸΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ полагаСтся Π½Π° сСтСвыС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… с ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… сСрвСров ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° сСрвСр, ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ сокСты β€œΠΏΠΎΠ΄ капотом”. НСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ β€” Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹, Ρ‡Π°Ρ‚-прилоТСния ΠΈ ΠΎΠ΄Π½ΠΎΡ€Π°Π½Π³ΠΎΠ²Ρ‹Π΅ сСтСвыС прилоТСния.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим сокСты ΠΈ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ с использованиСм сокСтов Π² Java.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: сущСствуСт Π΄Π²Π° Ρ‚ΠΈΠΏΠ° сокСтов: TCP ΠΈ UDP. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ TCP, здСсь я Π±ΡƒΠ΄Ρƒ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎ TCP-сокСтах ΠΈ ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ сокСт?

Π‘ΠΎΠΊΠ΅Ρ‚ β€” это программная (логичСская) конСчная Ρ‚ΠΎΡ‡ΠΊΠ°, ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰Π°Ρ Π΄Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΡƒΡŽ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвСром ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ нСсколькими клиСнтскими ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ. Π‘ΠΎΠΊΠ΅Ρ‚ β€” это Π½Π΅Ρ‡Ρ‚ΠΎ β€œΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅β€. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, сокСт Π½Π΅ сущСствуСт Π½Π° физичСском ΡƒΡ€ΠΎΠ²Π½Π΅. ΠŸΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС опрСдСляСт сокСт Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ использовал ΠΏΠΎΡ€Ρ‚Ρ‹ Π½Π° основном ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ для Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ позволяСт программистам ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌΠΈ дСталями сСтСвых ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ ΠΏΠΎΡ€Ρ‚Ρ‹, ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ Ρ‚. Π΄., Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ сокСты?

TCP-сокСт устанавливаСт связь ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром Π² нСсколько этапов.

На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· пСрСчислСнных Π²Ρ‹ΡˆΠ΅ стадий ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ сокСтов β€œΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌΒ» происходит ΠΌΠ½ΠΎΠ³ΠΎ всСго слоТного. Однако этих Π·Π½Π°Π½ΠΈΠΉ Π²ΠΏΠΎΠ»Π½Π΅ достаточно для понимания ΠΈ дСмонстрации Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ коммуникация посрСдством TCP-сокСтов.

К настоящСму Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΡ‹ ΡƒΠΆΠ΅ достаточно Π·Π½Π°Π΅ΠΌ ΠΎ TCP-сокСтах. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим Π½Π° Π½ΠΈΡ… Π² дСйствии.

РСализация ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ посрСдством TCP-сокСтов Π² Java

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡŽ сокСтов Π² Java. ΠœΡ‹ сСйчас напишСм Π΄Π²Π΅ Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Одной Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, запущСнная Π½Π° сСрвСрС, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ β€” клиСнтская ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с сСрвСром.

РСализация сСрвСрного сокСта

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ создадим ΠΊΠ»ΠΈΠ΅Π½Ρ‚ для взаимодСйствия с сСрвСрным сокСтом, созданным Π²Ρ‹ΡˆΠ΅.

РСализация клиСнтского сокСта

Показанная Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° дСйствуСт ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, создавая соСдинСниС с сСрвСрным сокСтом. ПослС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ сСрвСром Π΄Π°Π½Π½Ρ‹Π΅. Π’Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ соСдиняСтся с Π±ΡƒΡ„Π΅Ρ€ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ BufferedReader для хранСния ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ сразу ΠΆΠ΅ послС получСния. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ считываСм Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΈΡ… Π² консоль.

Запуск ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

Π‘Π½Π°Ρ‡Π°Π»Π° запуститС ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΡƒΡŽ Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ сСрвСр ΡƒΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°). Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Received data: Java Revisited Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅, Π³Π΄Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ клиСнтская ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ здСсь ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ: сСрвСрная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΏΠΎ запросу, Π° клиСнтская ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²Π΅Π»Π° ΠΈΡ… Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π».

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ обсудили, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ сокСты ΠΈ Java-рСализация связи TCP-сокСтов.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Руководство ΠΏΠΎ сокСтам Java

Π­Ρ‚ΠΎΡ‚ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ Π·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ сокСтов Java ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ TCP/IP с Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠšΠ»ΠΈΠ΅Π½Ρ‚/сСрвСр.

1. ΠžΠ±Π·ΠΎΡ€

Π’Π΅Ρ€ΠΌΠΈΠ½ сокСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ относится ΠΊ написанию ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… всС устройства ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сСти.

ОсновноС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ UDP Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ соСдинСния, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ отсутствиС сСанса ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ TCP ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° соСдинСниС, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ сначала Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ установлСно ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ соСдинСниС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром для осущСствлСния связи.

Π­Ρ‚ΠΎΡ‚ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ прСдставляСт Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сокСтов ΠΏΠΎ сСтям TCP/IP ΠΈ дСмонстрируСт, ΠΊΠ°ΠΊ ΠΏΠΈΡΠ°Ρ‚ΡŒ клиСнтскиС/сСрвСрныС прилоТСния Π½Π° Java. UDP Π½Π΅ являСтся основным ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ ΠΈ ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ нСчасто.

2. Настройка ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Java прСдоставляСт Π½Π°Π±ΠΎΡ€ классов ΠΈ интСрфСйсов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ заботятся ΠΎ дСталях Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ связи ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром.

Они Π² основном содСрТатся Π² java.net ΠΏΠ°ΠΊΠ΅Ρ‚, поэтому Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚:

Нам Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½Ρ‹ java.io ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ для записи ΠΈ чтСния Π²ΠΎ врСмя общСния:

3. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² классС с ΠΈΠΌΠ΅Π½Π΅ΠΌ GreetServer.java со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.

ΠœΡ‹ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ main ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ всС сСрвСры Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅. Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π² ΡΡ‚Π°Ρ‚ΡŒΡΡ… ΠΌΡ‹ опустим этот Ρ‚ΠΈΠΏ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΊΠΎΠ΄Π°:

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ создадим ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ GreetClient.java с этим ΠΊΠΎΠ΄ΠΎΠΌ:

Π”Π°Π²Π°ΠΉΡ‚Π΅ запустим сСрвСр; Π² вашСй IDE Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ это, просто запустив Π΅Π³ΠΎ ΠΊΠ°ΠΊ Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠΌ привСтствиС Π½Π° сСрвСр с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСста, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ сСрвСр Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ отправляСт привСтствиС Π² ΠΎΡ‚Π²Π΅Ρ‚:

НС Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, Ссли Π²Ρ‹ Π½Π΅ совсСм ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ здСсь происходит, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈΠ·Π²Π°Π½ Π΄Π°Ρ‚ΡŒ Π½Π°ΠΌ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Π΅Π³ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ Π² дальнСйшСм Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅.

4. Как Π Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π‘ΠΎΠΊΠ΅Ρ‚Ρ‹

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Ρ‡Π΅Ρ€Π΅Π· Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ части этого Ρ€Π°Π·Π΄Π΅Π»Π°.

4.1. Π‘Π΅Ρ€Π²Π΅Ρ€

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ сСрвСр Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Π² сСти ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ сокСт, привязанный ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Π½ΠΎΠΌΠ΅Ρ€Ρƒ ΠΏΠΎΡ€Ρ‚Π°. Π’ нашСм случаС ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΈ запустили сСрвСр ΠΏΠΎ ΠΏΠΎΡ€Ρ‚Ρƒ 6666 :

Π‘Π΅Ρ€Π²Π΅Ρ€ просто ΠΆΠ΄Π΅Ρ‚, ΡΠ»ΡƒΡˆΠ°Ρ сокСт, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сдСлал запрос Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ происходит Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ шагС:

На этом этапС Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Socket устанавливаСт прямоС соСдинСниС сСрвСра с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, послС Ρ‡Π΅Π³ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ для записи ΠΈ получСния сообщСний ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° соотвСтствСнно:

Π‘ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ бСсконСчно ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ сообщСниями с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° сокСт Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ своими ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ.

Однако Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ привСтствиС, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠ½ Π·Π°ΠΊΡ€ΠΎΠ΅Ρ‚ соСдинСниС, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли ΠΌΡ‹ снова запустим наш тСст, соСдинСниС Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΎ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΡΡ‚ΡŒ связи, Π½Π°ΠΌ придСтся Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° while ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ отправляСт запрос Π½Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ это Π² дСйствии Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

4.2. ΠšΠ»ΠΈΠ΅Π½Ρ‚

ΠšΠ»ΠΈΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ имя хоста ΠΈΠ»ΠΈ IP-адрСс ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сСрвСр, ΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ сСрвСр ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π΅Ρ‚.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ запрос Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ пытаСтся Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒΡΡ с сСрвСром Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΈ ΠΏΠΎΡ€Ρ‚Ρƒ сСрвСра:

ΠšΠ»ΠΈΠ΅Π½Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСбя с сСрвСром, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒΡΡ ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Π½ΠΎΠΌΠ΅Ρ€Ρƒ ΠΏΠΎΡ€Ρ‚Π°, Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠΌΡƒ систСмой, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎ врСмя этого соСдинСния. ΠœΡ‹ Π½Π΅ занимаСмся этим сами.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ конструктор создаСт Π½ΠΎΠ²Ρ‹ΠΉ сокСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° сСрвСр принял соСдинСниС, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΊΠ°Π·Π° Π² соСдинСнии. ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ создания ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΎΡ‚ Π½Π΅Π³ΠΎ для связи с сСрвСром:

Π’Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ сСрвСра, Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ сСрвСра ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

5. НСпрСрывная Бвязь

Наш Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ сСрвСр блокируСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ ΠΊ Π½Π΅ΠΌΡƒ, Π° Π·Π°Ρ‚Π΅ΠΌ снова блокируСтся для ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΡ сообщСния ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, послС ΠΎΠ΄Π½ΠΎΠ³ΠΎ сообщСния ΠΎΠ½ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ соСдинСниС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ занимались Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΡΡ‚ΡŒΡŽ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, это ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² запросах ping, Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ сСрвСр Ρ‡Π°Ρ‚Π°, ΠΈ, бСзусловно, потрСбуСтся нСпрСрывная обратная связь ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвСром ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ.

Нам придСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» while, Ρ‡Ρ‚ΠΎΠ±Ρ‹ постоянно Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π·Π° входящим ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ сСрвСра для входящих сообщСний.

Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим Π½ΠΎΠ²Ρ‹ΠΉ сСрвСр ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ EchoServer.java Ρ‡ΡŒΡ СдинствСнная Ρ†Π΅Π»ΡŒ-эхо-ΠΎΡ‚ΠΊΠ»ΠΈΠΊ Π½Π° Π»ΡŽΠ±Ρ‹Π΅ сообщСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ условиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ†ΠΈΠΊΠ» while Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ символ Ρ‚ΠΎΡ‡ΠΊΠΈ.

Π’ Π΄Ρ€ΡƒΠ³ΠΎΠΌ тСстовом классС ΠΌΡ‹ создадим тСст, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ нСсколько запросов ΠΊ EchoServer Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π±Π΅Π· закрытия сокСта сСрвСром. Π­Ρ‚ΠΎ Π²Π΅Ρ€Π½ΠΎ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΌΡ‹ отправляСм запросы ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

Π Π°Π±ΠΎΡ‚Π° с нСсколькими ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ-это Π΄Ρ€ΡƒΠ³ΠΎΠΉ случай, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ рассмотрим Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим ΠΌΠ΅Ρ‚ΠΎΠ΄ setup для инициирования соСдинСния с сСрвСром:

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ создадим ΠΌΠ΅Ρ‚ΠΎΠ΄ tearDown для освобоТдСния всСх Π½Π°ΡˆΠΈΡ… рСсурсов, это Π»ΡƒΡ‡ΡˆΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ случая, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ сСтСвыС рСсурсы:

Π—Π°Ρ‚Π΅ΠΌ Π΄Π°Π²Π°ΠΉΡ‚Π΅ протСстируСм наш эхо – сСрвСр с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… запросов:

6. Π‘Π΅Ρ€Π²Π΅Ρ€ Π‘ НСсколькими ΠšΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±Ρ‹Π» ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ, ΠΎΠ½ всС Π΅Ρ‰Π΅ Π½Π΅ являСтся ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ. Π‘Π΅Ρ€Π²Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ мноТСство ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΈ мноТСство запросов ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Π Π°Π±ΠΎΡ‚Π° с нСсколькими ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ-это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ рассмотрим Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅.

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ здСсь, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈ снова ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ, Π½Π΅ получая ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚ΠΊΠ°Π·Π° Π² ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ сброса соСдинСния Π½Π° сСрвСрС. РаньшС ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ этого ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ наш сСрвСр Π±ΡƒΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ ΠΈ устойчивым ΠΊ многочислСнным запросам ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².

ΠœΡ‹ сдСлаСм это, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ сокСт для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ запросы этого ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², обслуТиваСмых ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ количСству Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Основной ΠΏΠΎΡ‚ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ» while, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹Π΅ соСдинСния.

Π₯Π²Π°Ρ‚ΠΈΡ‚ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ΠΎΠ², Π΄Π°Π²Π°ΠΉΡ‚Π΅ создадим Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ сСрвСр ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ EchoMultiServer.java. Π’Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ ΠΌΡ‹ создадим класс ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° для управлСния коммуникациями ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π² Π΅Π³ΠΎ сокСтС:

ΠœΡ‹ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Echo Client для тСстирования сСрвСра, Π½Π° этот Ρ€Π°Π· ΠΌΡ‹ создадим нСсколько ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ нСсколько сообщСний с сСрвСра.

Для ясности ΠΌΡ‹ всС Ρ€Π°Π²Π½ΠΎ помСстим тСсты Π² Π½ΠΎΠ²Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€:

ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ тСстовых случаСв, сколько Π½Π°ΠΌ заблагорассудится, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΈ сСрвСр Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… всС.

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

Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΠ»ΠΈΡΡŒ Π½Π° Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сокСтов Ρ‡Π΅Ρ€Π΅Π· TCP/IP ΠΈ написали простоС ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Java.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠšΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр Π½Π° Java

Π­Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² одностороннСй связи. Π’ случаС одностороннСй связи ΠΊΠ»ΠΈΠ΅Π½Ρ‚ отправляСт Π½Π° сСрвСр, Π½ΠΎ сСрвСр Π½Π΅ отправляСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ. ΠŸΡ€ΠΈ двустороннСй связи ΠΊΠ»ΠΈΠ΅Π½Ρ‚ отправляСт Π½Π° сСрвСр, Π° сСрвСр отправляСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ.

ВсСго Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ TCP / IP 4 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°.

APPLICATION NUMBERFUNCTIONALITY
1st applicationClient to server communication (one-way)
2nd applicationServer to client communication (one-way)
3rd applicationServer sends file contents to client (two-way, non-continuous)
4th applicationChat program (two-way, continuous)

1-Π΅ ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ состоит ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠ°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π°Ρ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΈ сСрвСрная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π°Ρ Π½Π° сторонС сСрвСра. ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠ°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° WishesClient.java отправляСт сСрвСру Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠ΅ поТСлания, Π° сСрвСрная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° WishesServer.java ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСниС ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Π½Π° своСм Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ (ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π΅).

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠ°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° – WishesClient.java

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ класса Socket ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° – строку, IP-адрСс сСрвСра ΠΈ Ρ†Π΅Π»ΠΎΠ΅ число, Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π° Π½Π° сСрвСрС, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ. 127.0.0.1 – это адрСс ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ локальной систСмы Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… сСтях.

OutputStream ostream = sock.getOutputStream ();

ΠœΠ΅Ρ‚ΠΎΠ΄ getOutputStream() класса Socket Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ OutputStream, здСсь ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ являСтся ostream. Π­Ρ‚ΠΎ отправная Ρ‚ΠΎΡ‡ΠΊΠ° всСго общСния (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹). Π—Π΄Π΅ΡΡŒ сокСт связан с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

OutputStream являСтся абстрактным классом; ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π΅ ΠΎΠ½ связан с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ классом DataOutputStream. ΠœΠ΅Ρ‚ΠΎΠ΄ writeBytes() ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° DataOutputStream ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ строковоС сообщСниС ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² Socket. Π’Π΅ΠΏΠ΅Ρ€ΡŒ клиСнтский сокСт отправляСтся Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ сокСт Π½Π° сСрвСрС. Когда Ρ€Π°Π±ΠΎΡ‚Π° закончится, Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈ сокСт. Он освобоТдаСт дСскрипторы (ссылки), связанныС с систСмными рСсурсами.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, создаваСмыС конструктором ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ.

ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ java. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ java
ServerSocket sersock = Π½ΠΎΠ²Ρ‹ΠΉ ServerSocket (5000);

Π£ сСрвСра Π΅ΡΡ‚ΡŒ Π΄Π²Π° задания: ΠΎΠ΄Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈ оТидалось, Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒΡΡ, Π° Π΄Ρ€ΡƒΠ³ΠΎΠ΅ связываСт соСдинСниС с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ ΠΏΠΎΡ€Ρ‚Π° 5000. Для связи ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Socket, Π° для привязки – ServerSocket.

БвязываниС – это Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΡ€Ρ‚Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Ρ‚Π°ΠΊ Π΄ΠΎΠ»Π³ΠΎ, ΠΊΠ°ΠΊ Π΅ΠΌΡƒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹; ΠœΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΌ, Ссли ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π° 5000, ΠΎΠ½ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒΡΡ сСрвСром. Когда ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ, ΠΏΠΎΡ€Ρ‚ освобоТдаСтся ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдоставлСн Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ сСрвСром.

Socket sock = sersock.accept ();

accept() – это ΠΌΠ΅Ρ‚ΠΎΠ΄ класса ServerSocket, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ сСрвСром для привязки соСдинСния ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ ΠΏΠΎΡ€Ρ‚Π° 5000, Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ.

InputStream istream = sock.getInputStream();

ΠœΠ΅Ρ‚ΠΎΠ΄ getInputStream() ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Socket Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ InputStream, ΠΈ это отправная Ρ‚ΠΎΡ‡ΠΊΠ° сСрвСрной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ сообщСния.

DataInputStream dstream = new DataInputStream (istream);

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ InputStream являСтся абстрактным классом, Π΅Π³ΠΎ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Он связан с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ классом DataInputStream.

String message2 = dstream.readLine();

ΠœΠ΅Ρ‚ΠΎΠ΄ readLine() ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° DataInputStream Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ строку сообщСния ΠΈΠ· сокСта ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π΅. Π­Ρ‚ΠΎ сообщСниС пСчатаСтся Π½Π° консоли.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. ΠŸΡ€ΠΈ компиляции этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΠ·-Π·Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° readLine() ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° DataInutStream; Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСтся. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого прСдупрСТдСния, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ BufferedReader.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ клиСнтских ΠΈ сСрвСрных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

Π’ ΠΎΠ΄Π½ΠΎΠΉ систСмС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ сСрвСр, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π΄Π²Π° шDOS ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ ΠΎΠ΄Π½ΠΎ ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ – ΠΊΠ°ΠΊ сСрвСр. Из ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΡ DOS сначала запуститС ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π° ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΡ DOS запуститС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΈ запросС сСрвСра DOS.

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ – Ρ‚ΠΎΠ»ΡŒΠΊΠΎ односторонняя связь, ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π°Ρ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰Π°Ρ. Но Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π½Π°Π±ΠΎΡ€ (послС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ) ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ являСтся двусторонним, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ сСрвСр ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ (ΠΎΠ±Π°). Для тСстирования Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… сСрвСрах, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ сюда https://www.mixtelecom.ru/arenda-serverov.html

Для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ понимания вопрос-ΠΎΡ‚Π²Π΅Ρ‚ ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° java.lang.

Бколько сущСствуСт Ρ‚ΠΈΠΏΠΎΠ² Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классов?
ΠžΡ‚Π²Π΅Ρ‚: 4 Ρ‚ΠΈΠΏΠ°.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ JAR?
ΠžΡ‚Π²Π΅Ρ‚: JAR-Ρ„Π°ΠΉΠ» – это Π·Π°Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», сТатый JVM.

Как ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ строку Π² Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…?
ΠžΡ‚Π²Π΅Ρ‚: ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ строки Π² Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… – Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ΅, ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅, Ρ†Π΅Π»ΠΎΠ΅, Π΄Π»ΠΈΠ½Π½ΠΎΠ΅, ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅Π΅, Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅, символьноС ΠΈ логичСскоС.

Как ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² строку?
ΠžΡ‚Π²Π΅Ρ‚: ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Π² строку – toString()

Как ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°?
ΠžΡ‚Π²Π΅Ρ‚: Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² – hashCode() & equals()

БрСдняя ΠΎΡ†Π΅Π½ΠΊΠ° / 5. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ голосов:

Или подСлись ΡΡ‚Π°Ρ‚ΡŒΠ΅ΠΉ

Π’ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ нашли ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° свой вопрос.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *