Socket programming
Socket
"μμΌ(Socket)"μ μ¬μ μ μΌλ‘ "ꡬλ©", "μ°κ²°", "μ½μΌνΈ" λ±μ μλ―Έλ₯Ό κ°μ§λ€.
λ€νΈμν¬ νλ‘κ·Έλλ°μμμ μμΌ(Socket)μ λν μλ―Έλ, μ¬μ μ μλ―Έλ₯Ό ν¬κ² λ²μ΄λμ§ μλλ€.
νλ‘κ·Έλ¨μ΄ λ€νΈμν¬μμ λ°μ΄ν°λ₯Ό μ‘μμ ν μ μλλ‘, "λ€νΈμν¬ νκ²½μ μ°κ²°ν μ μκ² λ§λ€μ΄μ§ μ°κ²°λΆ"κ° λ°λ‘ "λ€νΈμν¬ μμΌ(Socket)"μ΄λ€.

νμ§λ§ μλ°ν λ°μ§μλ©΄, "λ€νΈμν¬ μμΌ"μ΄λΌλ μ©μ΄κ° μ νν ννμ μλλ€.
μ κΈ° μμΌμ΄ μ κΈ°λ₯Ό 곡κΈλ°κΈ° μν΄ μ ν΄μ§ κ·κ²©(110V, 220V λ±)μ λ§κ² λ§λ€μ΄μ ΈμΌ νλ―, λ€νΈμν¬μ μ°κ²°νκΈ° μν μμΌ λν μ ν΄μ§ κ·μ½, μ¦, ν΅μ μ μν νλ‘ν μ½(Protocol)μ λ§κ² λ§λ€μ΄μ ΈμΌ νλ€.
λ³΄ν΅ OSI 7 Layer(Open System Interconnection 7 Layer)μ λ€ λ²μ§Έ κ³μΈ΅μΈ TCP(Transport Control Protocol) μμμ λμνλ μμΌμ μ£Όλ‘ μ¬μ©νλλ°, μ΄λ₯Ό "TCP μμΌ" λλ "TCP/IP μμΌ"μ΄λΌκ³ λΆλ₯Έλ€. (UDPμμ λμνλ μμΌμ "UDP μμΌ")
TCP/IP μμΌ νλ‘κ·Έλλ°
μμΌ(Socket)μ μ¬μ©νμ¬ λ€νΈμν¬ ν΅μ κΈ°λ₯μ ꡬννλ κ³Όμ μ κ·Έ κ°λ λ§νΌ μμ£Ό λ¨μνμ§λ§μ μλ€.
μμΌ(Socket)μΌλ‘ λ€νΈμν¬ ν΅μ κΈ°λ₯μ ꡬννκΈ° μν΄μλ μμΌμ λ§λλ κ²κ³Ό, λ§λ€μ΄μ§ μμΌμ ν΅ν΄ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ μ μ°¨μ λν μ΄ν΄κ° νμνκ³ , μ΄μ체μ λ° νλ‘κ·Έλλ° μΈμ΄μ μ’ μμ μΌλ‘ μ 곡λλ μμΌ API μ¬μ©λ²μ μμ§ν΄μΌ νκΈ° λλ¬Έμ΄λ€.
μΌμ΄λΈ λΆλ¦¬λ‘ μΈν λ€νΈμν¬ λ¨μ , νΈλν½ μ¦κ°μ λ°λ₯Έ λ°μ΄ν° μ μ‘ μ§μ°, μμ€ν 리μμ€ κ΄λ¦¬ λ¬Έμ λ‘ μΈν μλ¬ λ±, λ€νΈμν¬ νκ²½μμ λ°μν μ μλ λ€μν μμΈμ¬νμ λν΄μλ μ²λ¦¬κ° νμνκΈ° λλ¬Έμ λμ± μ΄λ ΅λ€.
ν΄λΌμ΄μΈνΈ μμΌ, μλ² μμΌ
λ κ°μ μμ€ν (λλ νλ‘μΈμ€)μ΄ μμΌμ ν΅ν΄ λ€νΈμν¬ μ°κ²°(Connection)μ λ§λ€κΈ° μν΄μλ, μ΅μ΄ μ΄λ ν κ³³μμ κ·Έ λμμ΄ λλ κ³³μΌλ‘ μ°κ²°μ μμ²ν΄μΌ νλ€.
IP μ£Όμμ ν¬νΈ λ²νΈλ‘ μλ³λλ λμμκ², μμ μ΄ λ°μ΄ν° μ‘μμ μ μν λ€νΈμν¬ μ°κ²°μ μ립ν μμ¬κ° μμμ μ리λ κ²μ΄λ€.

무μμ μ°κ²°μ μλνλ€κ³ ν΄μ, κ·Έ μμ²μ΄ 무쑰건 λ°μλ€μ¬μ§κ³ μ°κ²°μ΄ λ§λ€μ΄μ Έ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°μ μ μκ² λλ κ²μ μλλ€.
ν κ³³μμ μ°κ²° μμ²μ 보λΈλ€κ³ νλλΌλ κ·Έ λμ μμ€ν μ΄ κ·Έ μμ²μ λ°μλ€μΌ μ€λΉκ° λμ΄ μμ§ μλ€λ©΄, ν΄λΉ μμ²μ 무μλκ³ μ°κ²°μ λ§λ€μ΄μ§μ§ μλλ€.

κ·Έλ¬λ―λ‘ μμ²μ λ°μλ€μ΄λ κ³³μμλ μ΄λ€ μ°κ²° μμ²(μΌλ°μ μΌλ‘ ν¬νΈ λ²νΈλ‘ μλ³)μ λ°μλ€μΌ κ²μΈμ§λ₯Ό 미리 μμ€ν μ λ±λ‘νμ¬, μμ²μ΄ μμ λμμ λ ν΄λΉ μμ²μ μ²λ¦¬ν μ μλλ‘ μ€λΉν΄μΌ νλ€.
μ΄λ λ― λ κ°μ μμ€ν (λλ νλ‘μΈμ€)μ΄ μμΌμ ν΅ν΄ λ°μ΄ν° ν΅μ μ μν μ°κ²°(Connection)μ λ§λ€κΈ° μν΄μλ, μ°κ²° μμ²μ 보λ΄λμ§ λλ μμ²μ λ°μλ€μ΄λμ§μ λ°λΌ μμΌμ μν μ΄ λλκ² λλλ°, μ μμ μ¬μ©λλ μμΌμ ν΄λΌμ΄μΈνΈ μμΌ(Client Socket), νμμ μ¬μ©λλ μμΌμ μλ² μμΌ(Server Socket)μ΄λΌκ³ νλ€.

λ μμΌμ λμΌνλ€. μν κ³Ό ꡬν μ μ°¨μ λ°λΌ λ€λ₯΄κ² λΆλ₯΄λ κ²μΌ λΏ, μμκ° λ°λλ€λ©΄ μν λ λ°λλ κ².
Socket API
ν΄λΌμ΄μΈνΈ μμΌ(Client Socket)μ μ²μ μμΌ(Socket)μ μμ±(create)ν λ€μ, μλ² μΈ‘μ μ°κ²°(connect)μ μμ²νλ€.
κ·Έλ¦¬κ³ μλ² μμΌμμ μ°κ²°μ΄ λ°μλ€μ¬μ§λ©΄ λ°μ΄ν°λ₯Ό μ‘μμ (send/recv)νκ³ , λͺ¨λ μ²λ¦¬κ° μλ£λλ©΄ μμΌ(Socket)μ λ«λλ€(close).
μλ² μμΌ(Server Socket)μ μΌλ¨ ν΄λΌμ΄μΈνΈμ λ§μ°¬κ°μ§λ‘ 첫 λ²μ§Έ λ¨κ³λ μμΌ(Socket)μ μμ±(create)νλ€.
κ·Έλ¦¬κ³ μλ²κ° μ¬μ©ν IP μ£Όμμ ν¬νΈ λ²νΈλ₯Ό μμ±ν μμΌμ κ²°ν©(bind)μν¨λ€.
κ·Έλ° λ€μ ν΄λΌμ΄μΈνΈλ‘λΆν° μ°κ²° μμ²μ΄ μμ λλμ§ μ£Όμ(listen)νκ³ , μμ²μ΄ μμ λλ©΄ μμ²μ λ°μλ€μ¬(accept) λ°μ΄ν° ν΅μ μ μν μμΌμ μμ±νλ€.
μΌλ¨ μλ‘μ΄ μμΌμ ν΅ν΄ μ°κ²°μ΄ μ립(ESTABLISHED)λλ©΄, ν΄λΌμ΄μΈνΈμ λ§μ°¬κ°μ§λ‘ λ°μ΄ν°λ₯Ό μ‘μμ (send/recv)ν μ μλ€.
λ§μ§λ§μΌλ‘ λ°μ΄ν° μ‘μμ μ΄ μλ£λλ©΄, μμΌ(Socket)μ λ«λλ€(close).

Last updated