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

ΠšΠ»ΠΈΠ΅Π½Ρ‚ TCP

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

Π’ ΡΠ»ΡƒΡ‡Π°Π΅ с ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ ΠΌΡ‹ ΠΏΡ€ΠΎΡΡ‚ΠΎ связывали Π΄Π²Π° дСскриптора с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pipe. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π»ΠΈ односторонний ΠΊΠ°Π½Π°Π» связи. Π’ ΡΠ»ΡƒΡ‡Π°ΡΡ…, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π±Ρ‹Π»ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π΄Π²ΡƒΡ…ΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ связь Π½Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π½Π°ΠΏΡ€ΡΠ³Π°Ρ‚ΡŒΡΡ Ρ‡ΡƒΡ‚ΡŒ большС: ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π²Π° ΠΊΠ°Π½Π°Π»Π°, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈ Ρ‚. ΠΏ. ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Π΅ сокСты ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π΄Π²ΡƒΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ связь. Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ стороны… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠšΠ»ΠΈΠ΅Π½Ρ‚ TCP (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠšΠ»ΠΈΠ΅Π½Ρ‚ TCP

Π‘Π΅Π· сСтСй сСйчас Π½ΠΈΠΊΡƒΠ΄Π°, это Π²Π΅Ρ€Π½ΠΎ ΠΈ Π΄Π»Ρ программиста ΠΈ Π΄Π»Ρ ТСлСзячника. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ΠΎΠΌ Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ соврСмСнных сСтСй стал ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» TCP, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅Ρ‰Π΅ Π½Π° ΡˆΠ°Π³ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚ нас ΠΊ ΠΏΡ€ΠΎΡ„Сссионалам. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, ознакомившись с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌΠΈ мСТсСтСвого ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΠ² эти знания с Π½Π°ΡˆΠΈΠΌΠΈ познаниями Π² ΠΎΠ±Π»Π°ΡΡ‚ΠΈ мСТпроцСссных взаимодСйствий ΠΌΡ‹ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²ΠΏΠΎΠ»Π½Π΅ достойныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ сСтСй Π½Π° Π±Π°Π·Π΅ TCP/IP. По ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ΅ имя, IP-адрСс ΠΈ ΠΏΠΎΡ€Ρ‚. Π˜Ρ‚Π°ΠΊ, приступим.

Π‘Π΅Ρ€Π²Π΅Ρ€Ρ‹ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹.

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

Π Π°Π±ΠΎΡ‚Π° с ΡΠΎΠΊΠ΅Ρ‚Π°ΠΌΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ. Помимо Ρ‚ΠΈΠΏΠΎΠ², сокСты ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ ΠΎΠ±Π»Π°ΡΡ‚ям дСйствия: INET ΠΈ UNIX. ΠžΠ±Π»Π°ΡΡ‚ΡŒ дСйствия опрСдСляСт ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ сокСта: для ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-сокСтов это адрСс хоста ΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°, Π° Π΄Π»Ρ сокСтов UNIX — имя Ρ„Π°ΠΉΠ»Π°. Π”Π°Π»Π΅Π΅ Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ прСимущСствСнно ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-сокСтах.

Π’ ΡΠ»ΡƒΡ‡Π°Π΅ с ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ ΠΌΡ‹ ΠΏΡ€ΠΎΡΡ‚ΠΎ связывали Π΄Π²Π° дСскриптора с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pipe. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π»ΠΈ односторонний ΠΊΠ°Π½Π°Π» связи. Π’ ΡΠ»ΡƒΡ‡Π°ΡΡ…, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π±Ρ‹Π»ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π΄Π²ΡƒΡ…ΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ связь Π½Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π½Π°ΠΏΡ€ΡΠ³Π°Ρ‚ΡŒΡΡ Ρ‡ΡƒΡ‚ΡŒ большС: ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π²Π° ΠΊΠ°Π½Π°Π»Π°, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈ Ρ‚. ΠΏ. ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Π΅ сокСты ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π΄Π²ΡƒΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ связь. Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ стороны соСдинСния. Но ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сокСтов нСсколько услоТняСтся ΠΈΠ·-Π·Π° возмоТности сСтСвого соСдинСния. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ ΠΊΠ°Π½Π°Π»ΠΎΠ², сокСты ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… соСдинСнных ΡΠ΅Ρ‚ΡŒΡŽ (ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» TCP/IP). Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡ‚ΠΈ дСйствий ΠΏΡ€ΠΈ создании соСдинСния Π²Π²Π΅Π΄Π΅Π½Ρ‹ Ρ‚Π°ΠΊΠΈΠ΅ понятия ΠΊΠ°ΠΊ сСрвСр ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚. Π’ ΠΊΠΎΠ½Ρ‚СкстС этой ΡΡ‚Π°Ρ‚ΡŒΠΈ сСрвСром Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт сокСт ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ — это Ρ‚Π΅ ΠΏΡ€ΠΎΡ†Π΅ΡΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ соСдинСниС с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ. ΠŸΡ€ΠΈ этом, Π½Π΅ Π²Π°ΠΆΠ½ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ машинС Π² ΡΠ΅Ρ‚ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚: ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ соСдинСниС с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ машинС ΠΈΠ»ΠΈ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, процСсс соСдинСния ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ этапов. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ создаваСмого сокСта (ΠΈΠ½Π°Ρ‡Π΅ — имя) нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ это ΠΈΠ»ΠΈ сСрвСр. Π”Π°Π»Π΅Π΅, ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ ΡΠ΅Ρ€Π²Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ сокСт с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ. ПослС этого сСрвСр ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ€Π΅ΠΆΠΈΠΌ оТидания входящих ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ выполняСт ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ ΡΠ΅Ρ€Π²Π΅Ρ€Ρƒ. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ прохоТдСния этих этапов ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ соСдинСниС: дСскриптор чтСния/записи Ρƒ ΡΠ΅Ρ€Π²Π΅Ρ€Π° ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ ΠΎΠ±ΠΌΠ΅Π½Ρƒ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Ρ€Π°Π·Π±ΠΎΡ€Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² мСТпроцСссных взаимодСйствий ΠΌΡ‹ ΡƒΠΆΠ΅ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… дСскрипторов. Π’Π°ΠΊ Π²ΠΎΡ‚, с ΡΠΎΠΊΠ΅Ρ‚Π°ΠΌΠΈ Ρ‚ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅: Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ дСскрипторы. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, ΠΌΡ‹ Π½Π°Π²Π΅Ρ€Π½ΡΠΊΠ° Π΅Ρ‰Π΅ столкнСмся с ΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, вСдь Ρƒ Π½Π°Ρ Π²ΠΏΠ΅Ρ€Π΅Π΄ΠΈ цСлая ΠΊΡƒΡ‡Π° ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Ρ… ΠΊΠ°ΠΌΠ½Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ придСтся Ρ€Π°Π·Π³Ρ€Π΅Π±Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΡΠΎΠΊΠ΅Ρ‚Π°ΠΌΠΈ.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Для Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ — ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ HTTP. БущСствуСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΡΠΎΠΊΠ΅Ρ‚Π°ΠΌΠΈ ΠΈΠ· Perl — IO: Socket. Однако, ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ IO: Socket, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΆΠ΅Π»Π°Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ соСдинСниСм. Π₯отя Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ, использованиС IO: Socket Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΡΠΎΠΊΠ΅Ρ‚Π°ΠΌΠΈ, Π΄Π° ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сниТаСт риск Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ. ΠŸΡ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ я Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ IO: Socket.

Π˜Ρ‚Π°ΠΊ, я Π½Π°Π·Π²Π°Π» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ «gethttp.pl ». Нам понадобится ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Socket, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ платформозависимыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, это касаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ сокСтов. Но, всС ΠΏΠΎ ΠΏΠΎΡ€ΡΠ΄ΠΊΡƒ.

#!/usr/bin/perlw.

# gethttp.pl.

use Socket;

use strict;

unless ($#ARGV == 1){.

die «Usage: gethttp. pl [host] [document]n » ;

}.

my $sock_name = GetSockName ($ARGV[0], 80).

or die «Couldn «t convert $ARGV[0] into an Internet address: $!n » ;

socket (CONN, PF_INET, SOCK_STREAM, getprotobyname («tcp »));

connect (CONN,$sock_name).

or die «Couldn «t «connect to $ARGV[0]: $!n » ;

print CONN «GET $ARGV[1] HTTP/1.0n » ;

print CONN «Host: $ARGV[0]nn » ;

my @body = ;

close (CONN);

print join («» ,@body);

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

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг выполняСт ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ сокСта. Ѐункция GetSockName () ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° имя хоста (ΠΈΠ»ΠΈ Π΅Π³ΠΎ IP-адрСс) ΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°. Если ΠΊΠΎΠΌΡƒ Ρ‚ΠΎ Π½Π΅ΠΏΠΎΠ½ΡΡ‚Π΅Π½ смысл Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² хост ΠΈ ΠΏΠΎΡ€Ρ‚, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ провСсти Ρ‚Π°ΠΊΡƒΡŽ аналогию: Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² Π³ΠΎΡΡ‚ΠΈ ΠΊ ΡΠ²ΠΎΠ΅ΠΌΡƒ Π·Π½Π°ΠΊΠΎΠΌΠΎΠΌΡƒ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ Π΄ΠΎΠΌΠ° ΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹. Π’ΠΎΡ‚ здСсь Π½ΠΎΠΌΠ΅Ρ€ Π΄ΠΎΠΌΠ° — это IP-адрСс ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ производится ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π° ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Π° — Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°.

РСализация Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ сокСта Π½Π° ΠΌΠΎΠΉ взгляд ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ скрываСт всС нСпонятности. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, ΠΊΠ°ΠΊ я ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ сокСта это ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ процСсс ΠΊΠ°ΠΊ для сСрвСра, Ρ‚Π°ΠΊ ΠΈ Π΄Π»Ρ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. По ΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Ρ Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ смоТСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ GetSockName () Π² Π½Π°ΡˆΠΈΡ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ….

ПослС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ сокСта ΠΌΡ‹ ΡΠΎΠ·Π΄Π°Π΅ΠΌ сокСт с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ socket (). Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² эта функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ дСскриптор соСдинСния (Π½Π° Π·Π°ΠΌΠ΅Ρ‚ΠΊΡƒ: ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ манипулятор), константу, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия сокСта (PF_INET ΠΈΠ»ΠΈ PF_UNIX), константу, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΡƒΡŽ Ρ‚ΠΈΠΏ сокСта (Π΄Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠ½Ρ‹ΠΉ ΠΈΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΉ) ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ установлСнному Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ опрСдСляСтся числовым Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π². с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getprotobyname ().

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ сокСт создан, ΠΌΡ‹ ΠΏΡ‹Ρ‚аСмся ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ с ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ сСрвСром. ДСлаСтся это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ connect (), Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ принимаСтся дСскриптор ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ сокСта. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠΉ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ соСдинСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ с ΠΎΡˆΠΈΠ±ΠΊΠΎΠΉ. Π”Π°Π»Π΅Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ print, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слСдуя ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° HTTP ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ ΠΎ Π½Π΅ΠΎΠ±Ρ…одимости Π²Ρ‹Π΄Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚. Π’ ΠΌΠ°ΡΡΠΈΠ² @body ΠΌΡ‹ ΡΠΎΡ…раняСм Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΎΡ‚ ΡΠ΅Ρ€Π²Π΅Ρ€Π°. Π—Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ соСдинСниС ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ содСрТимоС массива @body. Π’ΠΎΡ‚ ΠΈ Π½Π°Ρˆ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.

Ѐункция GetSockName.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ GetSockName ().

sub GetSockName{.

my ($nm,$pt) = @_;

return undef unless defined ($nm);

return undef unless defined ($pt);

return undef unless $nm = gethostbyname ($nm);

return sockaddr_in ($pt,$nm);

}.

Π’ΠΎΡ‚ такая нСзамысловатая функция спасаСт нас ΠΎΡ‚ Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΠ»ΠΈ ΠΏΡ€ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ сокСта. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ gethostbyname () ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ IP-адрСс хоста назначСния. Π˜Π½Π°Ρ‡Π΅ это называСтся Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅Π½ΠΈ. Ѐункция sockaddr_in () Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΡΠΎΡΡ‚Π°Π² модуля Socket. Π’ ΡΠΊΠ°Π»ΡΡ€Π½ΠΎΠΌ контСкстС sockaddr_in ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π° ΠΈ Π°Π΄Ρ€Π΅Ρ хоста Π² ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ SOCKADDR_IN.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Ρƒ Π½Π°Ρ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ. ЗапускаСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ… Π₯Π°-Ρ…Π°-Ρ…Π°. Π§Ρ‚ΠΎ, ΠΎΠΏΡΡ‚ΡŒ зависли? Ну ΠΈ Π³Π΄Π΅ ΠΆΠ΅ Ρƒ Π½Π°Ρ ошибка? ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, ΠΌΡ‹ Π·Π°Π±Ρ‹Π»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π±ΡƒΡ„Ρ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ. Π”Π°Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ Π±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹, Π½ΠΎ ΠΈΡ… ΡΠ»ΠΈΡˆΠΊΠΎΠΌ ΠΌΠ°Π»ΠΎ для заполнСния Π±ΡƒΡ„Ρ„Π΅Ρ€Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ фактичСски, наши ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ застряли Π² ΡΠΎΠΊΠ΅Ρ‚Π΅. А ΡΠ΅Ρ€Π²Π΅Ρ€ ΠΆΠ΄Π΅Ρ‚ ΠΈ ΠΆΠ΄Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΆΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ заявит ΠΎ ΡΠ²ΠΎΠ΅ΠΌ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ. Π”Π°Π²Π°ΠΉΡ‚Π΅ исправим ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρƒ строк:

connect (CONN,$sock_name).

or die «Couldn «t «connect to $ARGV[0]: $!n » ;

select (CONN); $|=1; select (STDOUT);

print CONN «GET $ARGV[1] HTTP/1.0n » ;

Π’ΠΎΡ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ всС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

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

.

Наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ ΡΡƒΠΏΠ΅Ρ€-ΠΏΡƒΠΏΠ΅Ρ€, Π½ΠΎ Π½Π° ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° всС-Ρ‚Π°ΠΊΠΈ сгодится. НапримСр, Ссли ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚, нСпосрСдствСнно, Ρ‚Π΅Π»Π° ΠΎΡ‚Π²Π΅Ρ‚Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠΎ HTTP. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊ ΠΈ ΡΠ΄Π΅Π»Π°Π΅ΠΌ.

Как Π½Π°ΠΌ извСстно, ΠΎΡ‚Π²Π΅Ρ‚ сСрвСра состоит ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ Ρ‚Π΅Π»Π°. ΠŸΡ€ΠΈ Ρ‡Π΅ΠΌ, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΡ‚Π²Π΅Ρ‚Π° отдСляСтся ΠΎΡ‚ Ρ‚Π΅Π»Π° двумя ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°ΠΌΠΈ строки. Π’ΠΎΡ‚ ΠΈ Π½Π°ΠΉΠ΄Π΅ΠΌ эти Π΄Π²Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки:

print CONN «GET $ARGV[1] HTTP/1.0n » ;

print CONN «Host: $ARGV[0]nn » ;

my $body = «» ;

$body .= $_ while ;

close (CONN);

$body =~ s/^.+?nr?nr?//s;

print $body;

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

[root@avalon scripts]# ./gethttp.pl whirlwind.ru /index.cgi > index.html.

для получСния HTML-ΠΊΠΎΠ΄Π° индСксной страницы нашСго сайта.

Ну ΠΈ Π²ΡΠ΅, для Π½Π°Ρ‡Π°Π»Π°. Π£ Π²Π°Ρ ΡƒΠΆΠ΅ достаточно Π½Π°Π²Ρ‹ΠΊΠΎΠ² для Π²ΠΎΠ·Π½ΠΈ с ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌΠΈ высокого уровня. Π’ΠΎΡ‚ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с FTP, ΠΈΠ»ΠΈ SMTP.

Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

Для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ с ΡΠ°ΠΉΡ‚Π° internet.

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