μ΄μ κ³Όμ μ ν΅ν΄ IP μ£Όμλ₯Ό μ»μλ€. μ΄λ² κΈμμλ λ°μ΄ν°μ μ‘μ κ³Ό μμ μ΄ μ΄λ»κ² λμνλμ§ μμλ³΄κ³ μ νλ€.
π 1. λ°μ΄ν° μ‘·μμ λμμ κ°μ
IP μ£Όμλ₯Ό μ΄μ©νμ¬ μ‘μΈμ€ λμ μΉ μλ²μ λ©μμ§λ₯Ό μ‘μ νκΈ° μν΄ OSμ λ΄λΆμ μλ νλ‘ν μ½ μ€νμ μλ’°νλ€.
λ°μ΄ν° μ‘·μμ λμλ DNS μλ²μ IP μ£Όμλ₯Ό μ‘°νν λμ²λΌ Socket λΌμ΄λΈλ¬λ¦¬μ λ€μ΄μλ νλ‘κ·Έλ¨ λΆνμ μ΄μ©νλλ°, IP μ£Όμλ₯Ό μ‘°νν λμ²λΌ νλ‘κ·Έλ¨ λΆνμ νλμ© νΈμΆνκ³ λλλ κ² μλλΌ λ³΅μμ λΆνμ κ²°μ λ μλ²λλ‘ νΈμΆνλ€.
Socket λΌμ΄λΈλ¬λ¦¬λ₯Ό μ΄μ©ν λ°μ΄ν° μ‘·μμ λμμ μμ κ°λ€.
λ°μ΄ν°λ₯Ό μ‘·μμ νλ μ»΄ν¨ν° μ¬μ΄μ λ°μ΄ν°μ ν΅λ‘(νμ΄ν) κ°μ κ²μ΄ μκ³ νμ΄νμ μ λμ λ°μ΄ν°μ μΆμ κ΅¬μΈ μμΌμ΄ μλ€.
κ·Έλ¦¬κ³ μλμ κ°μ΄ 4κ°μ§ κ³Όμ μ κ±°μ³μ μ‘·μμ λμμ΄ μνλλ€.
- μμΌ μμ± λ¨κ³
ν΄λΌμ΄μΈνΈμ μμΌμ λ§λ λ€.
(μλ² μΈ‘μμλ μμΌμ λ§λ€μ΄ λκ³ μ°κ²°μ κΈ°λ€λ¦¬κ³ μλ€.) - μ μ λ¨κ³
μλ² μΈ‘μ μμΌμ νμ΄νλ₯Ό μ°κ²°νλ€. - μ‘·μμ λ¨κ³
λ°μ΄ν°λ₯Ό μ‘·μμ νλ€. - μ°κ²° λκΈ° λ¨κ³
νμ΄νλ₯Ό λΆλ¦¬νκ³ μμΌμ λ§μνλ€.
μ΄μ λΆν° κ° κ³Όμ μ νλμ© μμλλ‘ μ΄ν΄λ³΄μ.
π 2. [1λ¨κ³] μμΌμ μμ± λ¨κ³
μ°μ , μ 체μ μΈ ν΅μ κ³Όμ μ μμ κ°λ€.
<λμ€ν¬λ¦Όν°> = socket(<IPv4 μ¬μ©>, <μ€νΈλ¦Όν,...);
μμΌμ λ§λ€κΈ° μν΄μ μμΌ λΌμ΄λΈλ¬λ¦¬μ socketμ΄λΌλ νλ‘κ·Έλ¨ λΆνμ νΈμΆνλ©΄ λλ€.
μμΌμ΄ μκΈ°λ©΄ λμ€ν¬λ¦½ν°λΌλ κ²μ΄ λμμ€λλ°, μ΄κ²μ νλνλμ μμΌμ ν λΉν λ²νΈμ κ°μ κ²μ΄λ€. (볡μμ μμΌμ΄ ν λμ μ»΄ν¨ν°μ μ‘΄μ¬ν μ μκΈ° λλ¬Έμ μ¬μ©νλ€.)
π 3. [2λ¨κ³] νμ΄νλ₯Ό μ°κ²°νλ μ μ λ¨κ³
connect(<λμ€ν¬λ¦½ν°>, <μλ²μ IP μ£Όμμ ν¬νΈ λ²νΈ>,...);
λ§λ μμΌμ μλ² μΈ‘μ μμΌμ μ μνκΈ° μν΄ Socket λΌμ΄λΈλ¬λ¦¬μ connectλΌλ νλ‘κ·Έλ¨ λΆνμ νΈμΆνλ€.
connectλ₯Ό νΈμΆν λ, 'λμ€ν¬λ¦½ν°, μλ²μ IPμ£Όμ, ν¬νΈ λ²νΈ'λ₯Ό μ§μ νλ€. κ·Έ μ΄μ λ μλμ κ°λ€.
- λμ€ν¬λ¦½ν°
νλ‘ν μ½ μ€νμ΄ ν΅μ§λ°μ λμ€ν¬λ¦½ν°λ₯Ό λ³΄κ³ μ΄λ μμΌμ μλ² μΈ‘μ μμΌμ μ°κ²°ν μ§λ₯Ό νλ¨νλ€. - IP μ£Όμ
μ‘μΈμ€ λμ μλ²μ IP μ£Όμλ€. - ν¬νΈ λ²νΈ
IP μ£Όμλ‘ μ§μ ν μ μλ κ²μ λ€νΈμν¬μ μ΄λ μ»΄ν¨ν°μΈκ° νλ κ²κΉμ§λ€.
μ¦, IP μ£Όμλ‘λ μμΌμ μ§μ ν μ μλ€.
κ·Έλμ ν¬νΈ λ²νΈλ₯Ό μ΄μ©νμ¬ ν΄λΉ IP μ£Όμμ μμΌμ μ§μ νλ€.
κ·Έλ λ€λ©΄ ν κ°μ§ μλ¬Έμ μ΄ μλ€. ν¬νΈ λ²νΈμ λν μ λ³΄κ° μλλ° ν¬νΈ λ²νΈλ₯Ό λͺ λ²μΌλ‘ μ§μ ν΄μΌ νλκ°μ λν μλ¬Έμ΄λ€.
κ·Έμ λν λ΅μ 'μλ² μΈ‘μ ν¬νΈ λ²νΈλ μ ν리μΌμ΄μ μ μ’ λ₯μ λ°λΌ 미리 κ²°μ λ κ°μ μ¬μ©νλ€.'μ΄λ€. μλ₯Ό λ€μ΄ μΉμ 80λ², λ©μΌμ 25λ²μ μ¬μ©νλ μμ΄λ€.
π 4. [3λ¨κ³] λ©μμ§λ₯Ό μ£Όκ³ λ°λ μ‘·μμ λ¨κ³
write<λμ€ν¬λ¦½ν°>, <μ‘μ λ°μ΄ν°>, <μ‘μ λ°μ΄ν° κΈΈμ΄>);
λμ€ν¬λ¦½ν°μ μ‘μ λ°μ΄ν°λ₯Ό μ§μ νμ¬ writeλ₯Ό νΈμΆνλ©΄ νλ‘ν μ½ μ€νμ μ‘μ λ°μ΄ν°λ₯Ό μλ²μ μ μ‘νλ€.
μ‘μ λ°μ΄ν°λ λ€νΈμν¬λ₯Ό ν΅ν΄ μ λΆ κ·Έλλ‘ μ‘μΈμ€ λμμ μλ²μ λμ°©νλ€. κ·Έλ¦¬κ³ μλ²λ μμ λμμ μ€ννμ¬ λ°μ λ°μ΄ν°μ λ΄μ©μ μ‘°μ¬νκ³ μ μ ν μ²λ¦¬λ₯Ό μ€ννμ¬ μλ΅ λ©μμ§λ₯Ό 보λΈλ€.
<μμ λ°μ΄ν° κΈΈμ΄> = read(<λμ€ν¬λ¦½ν°), <μμ λ²νΌ>,...);
μλ΅ λ©μμ§κ° μ€λ©΄ μ΄λ²μλ λ©μμ§λ₯Ό μμ νλ λμμ΄ μ€νλλ€. μμ ν λλ Socket λΌμ΄λΈλ¬λ¦¬μ readλΌλ νλ‘κ·Έλ¨ λΆνμ ν΅ν΄ νλ‘ν μ½ μ€νμ μμ λμμ μλ’°νλ€.
μμ ν μλ΅ λ©μμ§λ₯Ό μμ λ²νΌλΌκ³ λΆλ₯΄λ λ©λͺ¨λ¦¬ μμμ μ μ₯νλ€. μμ λ²νΌμ λ©μμ§λ₯Ό μ μ₯ν μμ μ λ©μμ§λ₯Ό μ ν리μΌμ΄μ μ 건λ€μ€λ€.
π 5. [4λ¨κ³] μ°κ²° λκΈ° λ¨κ³
close(<λμ€ν¬λ¦½ν°>);
μΉμμ μ¬μ©νλ HTTP νλ‘ν μ½μμλ λ³Έλ μλ΅ λ©μμ§μ μ‘μ μ μλ£νμ λ μΉ μλ² μΈ‘μμ μ°κ²° λκΈ° λμμ μ€ννλ―λ‘ λ¨Όμ μΉ μλ² μΈ‘μμ closeλ₯Ό νΈμΆνμ¬ μ°κ²°μ λλλ€.
κ·Έλ¬λ©΄ μ΄κ²μ΄ ν΄λΌμ΄μΈνΈ μΈ‘μ μ λ¬λμ΄ ν΄λΌμ΄μΈνΈμ μμΌμ μ°κ²° λκΈ° λ¨κ³λ‘ λ€μ΄κ°λ€.
κ·Έλ¦¬κ³ λΈλΌμ°μ κ° readλ‘ μμ λμμ μλ’°νμ λ readλ μμ ν λ°μ΄ν°λ₯Ό 건λ€μ£Όλ λμ μ‘·μμ λμμ΄ μλ£λμ΄ μ°κ²°μ΄ λκ²Όλ€λ μ¬μ€μ λΈλΌμ°μ μ ν΅μ§νλ€. μ΄λ‘μ¨ μ‘·μμ μ΄ μ’ λ£λμλ€λ κ²μ μ μ μμΌλ―λ‘ λΈλΌμ°μ μμλ closeλ₯Ό νΈμΆνμ¬ μ°κ²° λκΈ° λ¨κ³μ λ€μ΄κ°λ€.
μμμ μ΄ν΄λ³Έ κ²μ²λΌ λ³Έλλ 'μ μ, 리νμ€νΈ λ©μμ§ μ‘μ , μλ΅ λ©μμ§ μμ , μ°κ²° λκΈ°'λΌλ λμμ λ°λ³΅νλ€.
κ·Έλ¬λ μ΄λ κ² κ³μ λ°λ³΅νλ κ²μ λΉν¨μ¨μ μ΄κΈ° λλ¬Έμ μ°κ²°μ λμ§ μκ³ μμ²κ³Ό μλ΅μ μ£Όκ³ λ°λ κ²μ κ°λ₯νκ² νμλ€. μ΄ λΆλΆμ λ€μμ μμ보λλ‘ νμ.
ν΄λΉ κΈμ Tsutomu Tone λμ 'μ±κ³΅κ³Ό μ€ν¨λ₯Ό κ²°μ νλ 1%μ λ€νΈμν¬ μ리'λ₯Ό μ°Έκ³ νμμ΅λλ€.