MapleStory Finger Point Cute Line Smiley Blinking Hello Kitty Angel MapleStory Finger Point

πŸ’Ž JAVA/πŸ“šλͺ…ν’ˆ JAVA_ESSENTIAL

Λšβ‚Šβœ©β€§β‚Š (κ°œλ…) μžλ°” μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ° - λͺ…ν’ˆ JAVA ESSENTIAL Λšβ‚Šβœ©β€§β‚Š

HYEJU01 2024. 4. 13. 00:25

TCP/IP

Transmission Control Protocol / Internet Protocol

두 μ‹œμŠ€ν…œ 사이에 데이터가 손상 없이 μ•ˆμ „ν•˜κ²Œ μ „μ†‘λ˜λ„λ‘ ν•˜λŠ” 톡신 ν”„λ‘œν† μ½œ

  1. μ—°κ²°ν˜• 톡신 , λ‘˜ 쀑 ν•˜λ‚˜κ°€ 연결을 λŠμ„ λ•Œ κΉŒμ§€ 데이터 전솑 κ°€λŠ₯ , μ—°κ²° μœ μ§€λ₯Ό μœ„ν•΄ μžμ›μ„ λ¬Άμ–΄λ‘μ–΄μ•Όν•˜λŠ” 뢀담이 있음
  2. ν•œ μ»΄ν“¨ν„°μ—μ„œ 보낸 데이터듀을 λͺ©μ  컴퓨터에 μˆœμ„œλŒ€λ‘œ μ‘μš©ν”„λ‘œκ·Έλž¨μ—κ²Œ μ „λ‹¬λœλ‹€. μ •λ ¬ ν•  ν•„μš”λ„ μ—†κ³  μˆœμ„œλŒ€λ‘œ λ°›κΈ°λ§Œ ν•˜λ©΄λœλ‹€.

IP μ£Όμ†Œ

λ„€νŠΈμ›Œν¬ μƒμ—μ„œ μœ μΌν•˜κ²Œ 식별될 수 μžˆλŠ” λ„€νŠΈμ›Œν¬ μž₯치의 μ£Όμ†Œ

  • 4개의 μˆ«μžκ°€ . 으둜 μ—°κ²°λœλ‹€. 0~255 ( ν•œλ°”μ΄νŠΈλ‘œ ν‘œν˜„ κ°€λŠ₯)
  • 32 IPv4 → 128 IPv6
  • λ‚΄ 아이피 확인 ν•˜λŠ” 방법 : cmd > ipconfig λͺ…λ Ή

TCP/IP 포트

ν•œ μ»΄ν“¨ν„°μ—μ„œ μ—¬λŸ¬ μ†Œν”„νŠΈμ›¨μ–΄λ“€μ˜ 톡신이 일어날 수 있게 포트λ₯Ό λ§Œλ“¬

  • IP 와 port λ₯Ό 톡해 ν”„λ‘œκ·Έλž¨μ— μ—°κ²°ν•˜κ³  데이터λ₯Ό κ΅ν™˜ν•œλ‹€.
  • 잘 μ•Œλ €μ§„ 포트 well-known-ports / 0~1023

μ†ŒμΌ“ Socket

Socket 두 μ‘μš© ν”„λ‘œκ·Έλž¨ κ°„μ˜ 톡신 μ—°κ²° 끝단 endpoint

  • μ†ŒμΌ“ 톡신은 톡신 ν”„λ‘œκ·Έλž¨μ„ μ‰½κ²Œ μž‘μ„±ν•  수 μžˆλ„λ‘ μ§€μ›ν•˜λŠ” 기반 기술, 데이터λ₯Ό μ£Όκ³  λ°›λŠ” κΈ°λŠ₯ 총괄
  • 일단 μ—°κ²° 되면 슀슀둜 데이터λ₯Ό μ£Όκ³  λ°›λŠ” TCP/IP μ†Œν”„νŠΈμ›¨μ–΄ λͺ¨λ“ˆ, 직접 ν†΅μ‹ ν•˜μ§€ μ•Šμ•„λ„ μ†ŒμΌ“μ„ μ΄μš©ν•΄ 데이터λ₯Ό μ£Όκ³  λ°›λŠ”λ‹€.
  • μ†ŒμΌ“λ§ˆλ‹€ ν¬νŠΈκ°€ 있고 포트번호λ₯Ό 톡해 μƒλŒ€ ν”„λ‘œκ·Έλž¨μ„ 식별함

μ†ŒμΌ“κ³Ό μ„œλ²„ ν΄λΌμ΄μ–ΈνŠΈ 톡신

μ„œλ²„ or ν΄λΌμ΄μ–ΈνŠΈ

  1. μ„œλ²„ μ†ŒμΌ“μ€ μ„œλ²„ μ‘μš©ν”„λ‘œκ·Έλž¨μ΄ ν΄λΌμ΄μ–ΈνŠΈμ˜ 접속을 κΈ°λ‹€λ¦¬λŠ” λͺ©μ μœΌλ‘œλ§Œ μ‚¬μš© (listen)
  2. ν΄λΌμ΄μ–ΈνŠΈ μ†ŒμΌ“: ν΄λΌμ΄μ–ΈνŠΈ ν”„λ‘œκ·Έλž¨μ΄ μ†ŒμΌ“μ„ 톡해 μ„œλ²„μ— 접속
  3. μ„œλ²„μ†ŒμΊ£μ€ ν΄λΌμ΄μ–ΈνŠΈ μ†ŒμΌ“μ„ λ³„λ„λ‘œ λ§Œλ“€μ–΄ μƒλŒ€ ν΄λΌμ΄μ–ΈνŠΈμ™€ 톡신
  • λ™μΌν•œ 포트λ₯Ό μ—¬λŸ¬ ν΄λΌμ΄μ–ΈνŠΈ μ†ŒμΌ“λ“€μ΄ κ³΅μœ ν•œλ‹€.
  • μ›Ήμ„œλ²„ 운영체제 : λΈŒλΌμš°μ €κ°€ μ„œλ²„μ™€ μ—°κ²° → 정보 μ €μž₯ (Ip,port,μ„œλ²„ν΄λΌμ΄μ–ΈνŠΈμ†ŒμΌ“)→ λ°μ΄ν„°νŒ¨ν‚· (Ip,port) μ°Έκ³  → μ„œλ²„ ν΄λΌμ΄μ–ΈνŠΈ μ†ŒμΌ“ μ°ΎκΈ° → 데이터 보내기

Socket 클래슀 / ν΄λΌμ΄μ–ΈνŠΈ μ†ŒμΌ“

java.net νŒ¨ν‚€μ§€ 에 포함

μ„œλ²„μ— μ ‘μ†ν•˜κ³  데이터λ₯Ό μ£Όκ³  λ°›λŠ”λ‹€.

  1. Socketμƒμ„±μž : μ„œλ²„μ˜ IP μ£Όμ†Œ/ 포트번호λ₯Ό 인자둜 λ°›κ³  μ†ŒμΌ“ 생성
  2. getInputStream() / getOutputStream() : 데이터λ₯Ό 주고받을 μ†ŒμΌ“ μŠ€νŠΈλ¦Όμ„ 버퍼 μŠ€νŠΈλ¦Όμ— μ—°κ²°
  3. out.write() , out.flush() μ„œλ²„λ‘œ 데이터 전솑
  4. in.read() ; in.readLine(): μ„œλ²„λ‘œλΆ€ν„° 데이터 μˆ˜μ‹ 
  5. μ†‘μˆ˜μ‹  μ’…λ£Œ : socket.close()
  • Socket μƒμ„±μž / Socket λ©”μ†Œλ“œ :: ~~~

ServerSocket 클래슀 / μ„œλ²„ μ†ŒμΌ“

java.net νŒ¨ν‚€μ§€ 에 포함

ν΄λΌμ΄μ–ΈνŠΈμ˜ μ—°κ²° μš”μ²­μ„ κΈ°λ‹€λ¦¬λŠ” λͺ©μ μœΌλ‘œλ§Œ μ‚¬μš© / 데이터 μ†‘μˆ˜μ‹  X

μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 수락 → μ†ŒμΌ“ 객체λ₯Ό λ³„λ„λ‘œ 생성

  1. ServerSocket μƒμ„±μž : 포트번호λ₯Ό 인자둜 λ°›μ•„μ„œ μ„œλ²„ μ†ŒμΌ“ 생성
  2. accept() : ν΄λΌμ΄μ–ΈνŠΈλ‘œ μ—°κ²° μš”μ²­ λŒ€κΈ° (μˆ˜λ½μ‹œ Socket 객체 λ³„λ„λ‘œ 생성 ν›„ 리턴)
  3. getInputStream() / getOutputStream() : 데이터λ₯Ό 주고받을 μ†ŒμΌ“ μŠ€νŠΈλ¦Όμ„ 버퍼 μŠ€νŠΈλ¦Όμ— μ—°κ²°
  4. in.read() ; in.readLine(): ν΄λΌμ΄μ–ΈνŠΈλ‘œλΆ€ν„° 데이터 μˆ˜μ‹ 
  5. out.write() , out.flush() : ν΄λΌμ΄μ–ΈνŠΈλ‘œ 데이터 솑신
  6. socket.close() μ†‘μˆ˜μ‹  μ’…λ£Œ (μ†ŒμΌ“ μ—°κ²° 끊기)
  7. serverSocket.close() μ„œλ²„ μ‘μš©ν”„λ‘œκ·Έλž¨ μ’…λ£Œ (ν΄λΌμ΄μ–ΈνŠΈ 접속 받지 μ•ŠμŒ)
  • ServerSocket μƒμ„±μž / ServerSocket λ©”μ†Œλ“œ :: ~~~