๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Java/Java์˜ ์ •์„

Chapter 16 - ๋„คํŠธ์›Œํ‚น

Chapter 16 - ๋„คํŠธ์›Œํ‚น

1. ๋„คํŠธ์›Œํ‚น(Networking)

  • ๋‘ ๋Œ€ ์ด์ƒ์˜ ์ปดํ“จํ„ฐ๋ฅผ ์ผ€์ด๋ธ”๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ
    • ์ธํ„ฐ๋„ท์„ ์ด์šฉํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋„คํŠธ์›Œํฌ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์ด ๋Š˜์–ด๋‚จ
  • ์ž๋ฐ”์—์„œ ์ œ๊ณตํ•˜๋Š” java.net ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋„คํŠธ์›Œํฌ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ ํ†ต์‹  ๋ถ€๋ถ„ ์ž‘์„ฑ ๊ฐ€๋Šฅ

1.1 ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„(client/server)

  • ์ปดํ“จํ„ฐ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์—ญํ• ๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฐœ๋…
    • ํ•˜๋“œ์›จ์–ด์˜ ์‚ฌ์–‘์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹˜
  • ์„œ๋ฒ„๋Š” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ปดํ“จํ„ฐ
    • ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์ˆ˜์˜ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณต
    • ํŒŒ์ผ ์„œ๋ฒ„, ๋ฉ”์ผ ์„œ๋ฒ„, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ๋“ฑ์ด ์กด์žฌ
  • ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ปดํ“จํ„ฐ
  • ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ๋ฐ›์€ ์ž‘์—…์„ ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์„œ๋น„์Šค
  • ์„œ๋ฒ„๋Š” ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ, ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ๊ณผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”
  • ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ ์‹œ ์ „์šฉ ์„œ๋ฒ„๋ฅผ ๋‘๋Š” ๊ฒƒ์„ ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ๋ชจ๋ธ
    • ์„œ๋ฒ„ ๊ตฌ์ถ• ๋น„์šฉ๊ณผ ๊ด€๋ฆฌ ๋น„์šฉ์ด ๋“ค์ง€๋งŒ ๊ด€๋ฆฌ์™€ ๋ณด์•ˆ์ด ์šฉ์ดํ•˜๊ณ  ์•ˆ์ •์ ์ธ ์„œ๋น„์Šค
  • ๋ณ„๋„์˜ ์ „์šฉ ์„œ๋ฒ„ ์—†์ด ๊ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„ ์—ญํ• ์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด P2P ๋ชจ๋ธ(peer-to-peer)
    • ์„œ๋ฒ„ ๊ตฌ์ถ• ๋ฐ ์šด์šฉ ๋น„์šฉ์„ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ๊ณ  ์ž์› ํ™œ์šฉ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ž์›์˜ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต๊ณ  ๋ณด์•ˆ์ด ์ทจ์•ฝ

1.2 IP ์ฃผ์†Œ(IP address)

  • ์ปดํ“จํ„ฐ(ํ˜ธ์ŠคํŠธ)๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ณ ์œ ํ•œ ๊ฐ’
    • ์ธํ„ฐ๋„ท์— ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์ปดํ“จํ„ฐ๊ฐ€ ๊ฐ€์ง
    • 4 byte(32bit)์˜ ์ •์ˆ˜๋กœ ๊ตฌ์„ฑ
  • ๋„คํŠธ์›Œํฌ ์ฃผ์†Œ์™€ ํ˜ธ์ŠคํŠธ ์ฃผ์†Œ๋กœ ๋‚˜๋ˆ„์–ด์ง
    • ๊ฐ๊ฐ ์ฐจ์ง€ํ•˜๋Š” bit ์ˆ˜๋Š” ๊ตฌ์„ฑ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง
    • ๊ฐ™์€ ๋„คํŠธ์›Œํฌ์— ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋ฉด ๋„คํŠธ์›Œํฌ ์ฃผ์†Œ๊ฐ€ ๋™์ผ
  • IP ์ฃผ์†Œ์™€ ์„œ๋ธŒ๋„ท ๋งˆ์Šคํฌ๋ฅผ ๋น„ํŠธ ์—ฐ์‚ฐ์ž(&)๋กœ ์—ฐ์‚ฐํ•˜๋ฉด IP ์ฃผ์†Œ์—์„œ ๋„คํŠธ์›Œํฌ ์ฃผ์†Œ๋งŒ์„ ๋ฝ‘์•„๋‚ผ ์ˆ˜ ์žˆ์Œ
  • ํ˜ธ์ŠคํŠธ ์ฃผ์†Œ๊ฐ€ 0์ธ ๊ฒƒ์€ ๋„คํŠธ์›Œํฌ ์ž์‹ , 255๋Š” ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์ฃผ์†Œ

1.3 InetAddress

  • ์ž๋ฐ”์—์„œ IP ์ฃผ์†Œ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค
  • IP ์ฃผ์†Œ, ๋„๋ฉ”์ธ๋ช…์— ์ง€์ •๋œ ๋ชจ๋“  ํ˜ธ์ŠคํŠธ์˜ IP ์ฃผ์†Œ, ํ˜ธ์ŠคํŠธ์˜ ์ด๋ฆ„ ๋“ฑ๋“ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

1.4 URL(Uniform Resource Locator)

  • ์ธํ„ฐ๋„ท์— ์กด์žฌํ•˜๋Š” ์—ฌ๋Ÿฌ ์„œ๋ฒ„๋“ค์ด ์ œ๊ณตํ•˜๋Š” ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์†Œ๋ฅผ ํ‘œํ˜„
  • 'ํ”„๋กœํ† ์ฝœ://ํ˜ธ์ŠคํŠธ๋ช…:ํฌํŠธ๋ฒˆํ˜ธ/๊ฒฝ๋กœ๋ช…/ํŒŒ์ผ๋ช…?์ฟผ๋ฆฌ์ŠคํŠธ๋ง#์ฐธ์กฐ'์˜ ํ˜•ํƒœ
    • ํ”„๋กœํ† ์ฝœ : ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ†ต์‹  ๊ทœ์•ฝ
    • ํ˜ธ์ŠคํŠธ๋ช… : ์ž์›์„ ์ œ๊ณตํ•˜๋Š” ์„œ๋ฒ„ ์ด๋ฆ„
    • ํฌํŠธ ๋ฒˆํ˜ธ : ํ†ต์‹ ์— ์‚ฌ์šฉ๋˜๋Š” ์„œ๋ฒ„์˜ ํฌํŠธ ๋ฒˆํ˜ธ
    • ๊ฒฝ๋กœ๋ช… : ์ ‘๊ทผํ•˜๋ ค๋Š” ์ž์›์ด ์ €์žฅ๋œ ์„œ๋ฒ„์ƒ์˜ ์œ„์น˜
    • ํŒŒ์ผ๋ช… : ์ ‘๊ทผํ•˜๋ ค๋Š” ์ž์›์˜ ์ด๋ฆ„
    • ์ฟผ๋ฆฌ : URL์—์„œ '?' ์ดํ›„์˜ ๋ถ€๋ถ„
    • ์ฐธ์กฐ : URL์—์„œ '#' ์ดํ›„์˜ ๋ถ€๋ถ„
  • ์ž๋ฐ”์—์„œ๋Š” URL์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด URL ํด๋ž˜์Šค๋ฅผ ์ œ๊ณต
    • URL url = new URL("{{URL ์ฃผ์†Œ}}")์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

1.5 URLConnection

  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ URL ๊ฐ„์˜ ํ†ต์‹  ์—ฐ๊ฒฐ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํด๋ž˜์Šค์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค (์ถ”์ƒ ํด๋ž˜์Šค)
    • ์ž์‹ ํด๋ž˜์Šค๋กœ HttpURLConnection, JarURLConnection
  • openConnection()์€ HttpURLConnection์„ ๋ฐ˜ํ™˜
    • openConnection()์€ URL ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ
  • ์—ฐ๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ์ž์›์— ์ ‘๊ทผํ•˜๊ณ  ์ฝ๊ณ  ์“ฐ๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Œ
    • ํ—ค๋”์˜ ํ•„๋“œ๊ฐ’, ์—ฐ๊ฒฐ ์ข…๋ฃŒ ์‹œ๊ฐ„ ์ง€์ •, content ๊ฐ์ฒด ๋ฐ˜ํ™˜, ํ—ˆ์šฉ ๊ถŒํ•œ ๋ฐ˜ํ™˜ ๋“ฑ๋“ฑ ...
  • URL ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ URL์ด ์œ ํšจํ•˜์ง€ ์•Š์œผ๋ฉด Malformed - URLException์ด ๋ฐœ์ƒ
  • URL์˜ openStream() ๋ฉ”์„œ๋“œ๋Š” openConnection์„ ํ˜ธ์ถœํ•ด์„œ URLConnection์„ ์–ป์€ ๋‹ค์Œ getInputStream()์„ ํ˜ธ์ถœํ•œ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

2. ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • ์†Œ์ผ“์„ ์ด์šฉํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
    • ์†Œ์ผ“์€ ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ํ†ต์‹ ์— ์‚ฌ์šฉ๋˜๋Š” ์–‘์ชฝ ๋๋‹จ์„ ์˜๋ฏธ
    • ๋‘ ์‚ฌ๋žŒ์ด ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ „ํ™”๊ธฐ์™€ ๋น„์Šทํ•˜๋‹ค.
  • ์ž๋ฐ”์—์„œ๋Š” java.net ํŒจํ‚ค์ง€๋ฅผ ํ†ตํ•ด ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›

2.1 TCP์™€ UDP

  • TCP/IP ํ”„๋กœํ† ์ฝœ์€ ์ด๊ธฐ์ข… ์‹œ์Šคํ…œ ๊ฐ„์˜ ํ†ต์‹ ์„ ์œ„ํ•œ ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ
    • TCP์™€ UDP ๋ชจ๋‘ TCP/IP ํ”„๋กœํ† ์ฝœ์— ํฌํ•จ (OSI 7๊ณ„์ธต์˜ ์ „์†ก๊ณ„์ธต์— ํ•ด๋‹น)
  • TCP
    • ์—ฐ๊ฒฐ ๊ธฐ๋ฐ˜ (์—ฐ๊ฒฐ ํ›„ ํ†ต์‹ , 1:1 ํ†ต์‹ )
    • ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ๊ณ„๋ฅผ ๊ตฌ๋ถ„ ์•ˆ ํ•จ
    • ์‹ ๋ขฐ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก (์ˆœ์„œ, ์ˆ˜์‹  ์—ฌ๋ถ€ ๋ณด์žฅ, ํŒจํ‚ท ๊ด€๋ฆฌํ•ด ์ค„ ํ•„์š” X)
    • UDP ๋ณด๋‹ค ๋Š๋ฆผ
    • Socket, ServerSocket ํด๋ž˜์Šค์™€ ๊ด€๋ จ
  • UDP
    • ๋น„์—ฐ๊ฒฐ๊ธฐ๋ฐ˜ (์—ฐ๊ฒฐ ์—†์ด ํ†ต์‹ , 1:1, 1:n, n:n ํ†ต์‹ ๋ฐฉ์‹)
    • ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ๊ณ„๋ฅผ ๊ตฌ๋ถ„
    • ์‹ ๋ขฐ์„ฑ ์—†๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก (์ˆœ์„œ ๋ฐ”๋€” ์ˆ˜ ์žˆ์Œ, ์ˆ˜์‹  ์—ฌ๋ถ€ ํ™•์ธ X, ํŒจํ‚ท ๊ด€๋ฆฌํ•ด ์ฃผ์–ด์•ผ ํ•จ)
    • TCP ๋ณด๋‹ค ์ „์†ก์†๋„ ๋น ๋ฆ„
    • DatagramSocket, DatagramPacket, MulticastSocket ํด๋ž˜์Šค์™€ ๊ด€๋ จ

2.2 TCP ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • ํ†ต์‹ ๊ณผ์ •
    1. ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์€ ํŠน์ • ํฌํŠธ์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์—ฐ๊ฒฐ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์„œ๋ฒ„ ์†Œ์ผ“์„ ์ค€๋น„
    2. ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์€ ์ ‘์†ํ•  ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ, ํฌํŠธ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์†Œ์ผ“์„ ์ƒ์„ฑ ํ›„ ์„œ๋ฒ„์— ์—ฐ๊ฒฐ
    3. ์„œ๋ฒ„ ์†Œ์ผ“์€ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์ด ์˜ฌ ์‹œ ์„œ๋ฒ„์— ์ƒˆ๋กœ์šด ์†Œ์ผ“์„ ์ƒ์„ฑ ํ›„ ํด๋ผ์ด์–ธํŠธ์˜ ์†Œ์ผ“๊ณผ ์—ฐ๊ฒฐ
    4. ํด๋ผ์ด์–ธํŠธ ์†Œ์ผ“๊ณผ ์ƒ์„ฑ๋œ ์„œ๋ฒ„์˜ ์†Œ์ผ“์€ ์„œ๋ฒ„ ์†Œ์ผ“๊ณผ ๊ด€๊ณ„์—†์ด ์ผ๋Œ€์ผ ํ†ต์‹ 
  • ์„œ๋ฒ„ ์†Œ์ผ“์—์„œ๋Š” ์‹ค์งˆ์ ์ธ ํ†ต์‹  X
    • ์ƒˆ๋กœ์šด ์†Œ์ผ“์„ ์ƒ์„ฑํ•˜์—ฌ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ์—ญํ• 
  • ์„œ๋ฒ„ ์†Œ์ผ“์€ ํฌํŠธ๋ฅผ ๋…์  (๋‹ค๋ฅธ ์†Œ์ผ“๋“ค์€ ํ•˜๋‚˜์˜ ํฌํŠธ ๊ณต์œ  ๊ฐ€๋Šฅ)
    • ํ”„๋กœํ† ์ฝœ์ด ๋‹ค๋ฅด๋ฉด ํฌํŠธ๋ฅผ ๊ณต์œ  ๊ฐ€๋Šฅ
  • ํฌํŠธ๋Š” ํ˜ธ์ŠคํŠธ๊ฐ€ ์™ธ๋ถ€์™€ ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•œ ํ†ต๋กœ์ด๋ฉฐ 0~65536์˜ ๋ฒ”์œ„
    • ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋Š” ๋ฒˆํ˜ธ๋“ค์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด 1023๋ฒˆ ์ด์ƒ์˜ ๋ฒˆํ˜ธ ์ค‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํฌํŠธ๋ฅผ ๊ณจ๋ผ์„œ ์‚ฌ์šฉ
  • ์†Œ์ผ“์€ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ๊ณผ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ์ƒ๋Œ€ํŽธ ์†Œ์ผ“์˜ ์ŠคํŠธ๋ฆผ๋“ค๊ณผ ๊ต์ฐจ ์—ฐ๊ฒฐํ•˜์—ฌ ํ†ต์‹ 
  • ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•œ ํด๋ž˜์Šค
    • Socket : ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ํ†ต์‹ ์„ ๋‹ด๋‹น, InputStream๊ณผ OutputStream์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์ด ์ŠคํŠธ๋ฆผ์„ ํ†ตํ•ด ํ†ต์‹ 
    • ServerSocket : ํฌํŠธ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์™ธ๋ถ€์˜ ์—ฐ๊ฒฐ ์š”์ฒญ์ด ์˜ค๋ฉด Socket์„ ์ƒ์„ฑ ํ›„ ํ†ต์‹ ์ด ์ด๋ฃจ์–ด์ง€๊ฒŒ ํ•˜๋ฉฐ ํฌํŠธ๋ฅผ ๋…์  (ํ”„๋กœํ† ์ฝœ์ด ๋‹ค๋ฅด๋ฉด ๊ณต์œ  ๊ฐ€๋Šฅ)
  • ServerSocket
    • ์ƒ์„ฑ์ž์— ์‚ฌ์šฉํ•  ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์ง€์ •
    • accept() ๋ฉ”์„œ๋“œ -> ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ๋งŒ๋“  ํ›„ ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์˜ ์—ฐ๊ฒฐ ์š”์ฒญ์ด ์˜ค๋ฉด ์ƒˆ๋กœ์šด ์†Œ์ผ“์„ ์ƒ์„ฑํ•ด์„œ ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์˜ ์†Œ์ผ“๊ณผ ์—ฐ๊ฒฐ
    • setSoTimeout(int timeout)์„ ์‚ฌ์šฉํ•ด์„œ ์„œ๋ฒ„ ์†Œ์ผ“์˜ ๋Œ€๊ธฐ์‹œ๊ฐ„ ์ง€์ • ๊ฐ€๋Šฅ (์ฒœ๋ถ„์˜ ์ผ์ดˆ ๋‹จ์œ„, 0์ผ ์‹œ ์ œํ•œ ์‹œ๊ฐ„ ์—†์ด ๋Œ€๊ธฐ, ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๊ฒฝ๊ณผ ํ›„ SocketTimeoutException ๋ฐœ์ƒ)
  • ์„œ๋ฒ„์™€์˜ ์ž‘์—…์ด ๋๋‚˜๋ฉด ์†Œ์ผ“๊ณผ ์ŠคํŠธ๋ฆผ์„ ๋‹ซ์•„์•ผ ํ•œ๋‹ค.
  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ์—ฐ๊ฒฐ ๊ณผ์ •
    1. ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰
    2. ์„œ๋ฒ„ ์†Œ์ผ“์„ ์ƒ์„ฑ
    3. ์„œ๋ฒ„ ์†Œ์ผ“์„ ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ๋งŒ๋“ฆ
    4. ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์†Œ์ผ“์„ ์ƒ์„ฑํ•˜์—ฌ ์„œ๋ฒ„ ์†Œ์ผ“์— ์—ฐ๊ฒฐ์„ ์š”์ฒญ
    5. ์„œ๋ฒ„ ์†Œ์ผ“์€ ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์˜ ์—ฐ๊ฒฐ ์š”์ฒญ์„ ๋ฐ›์•„ ์ƒˆ๋กœ์šด ์†Œ์ผ“ ์ƒ์„ฑ ๋’ค ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์˜ ์—ฐ๊ฒฐ ์š”์ฒญ์ด ์˜ค๋ฉด ์ƒˆ๋กœ์šด ์†Œ์ผ“์„ ์ƒ์„ฑ ํ›„ ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์˜ ์†Œ์ผ“๊ณผ ์—ฐ๊ฒฐ
  • Socket
    • getPort() : ์ƒ๋Œ€ํŽธ ์†Œ์ผ“์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์Œ
    • getLocalPort() : ์†Œ์ผ“ ์ž์‹ ์ด ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์Œ
  • ์„œ๋ฒ„ ์†Œ์ผ“์ด ์•„๋‹Œ ์†Œ์ผ“์€ ์„œ๋ฒ„ ์†Œ์ผ“์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํด๋ผ์ด์–ธํŠธ์˜ ์ˆ˜๊ฐ€ ๋งŽ์„ ๋•Œ๋Š” ์š”์ฒญ์„ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ
  • ์†Œ์ผ“์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์†ก์‹ ํ•˜๋Š” ์ž‘์—…๊ณผ ์ˆ˜์‹ ํ•˜๋Š” ์ž‘์—…์„ ๋ณ„๋„์˜ ์“ฐ๋ ˆ๋“œ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

2.3 UDP ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • UDP ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” DatagramSocket๊ณผ DatagramPacket์„ ์‚ฌ์šฉ
    • ์—ฐ๊ฒฐ ์ง€ํ–ฅ์ ์ธ ํ”„๋กœํ† ์ฝœ์ด ์•„๋‹ˆ๋ฏ€๋กœ ServerSocket์ด ํ•„์š” X
    • DatagramSocket์„ ์†Œ์ผ“์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ DatagramPacket์— ๋‹ด์•„์„œ ์ „์†ก
    • DatagramPacket์€ ํ—ค๋”์™€ ๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ (ํ—ค๋”์—” ์ˆ˜์‹ ํ•  ํ˜ธ์ŠคํŠธ์˜ ์ •๋ณด๊ฐ€ ์ €์žฅ)
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ DatagramPacket์„ ์ƒ์„ฑํ•ด์„œ DatagramSocket์œผ๋กœ ์„œ๋ฒ„์— ์ „์†กํ•˜๋ฉด, ์„œ๋ฒ„๋Š” ์ „์†ก๋ฐ›์€ DatagramPacket์˜ getAddress(), getPort()๋ฅผ ํ˜ธ์ถœํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์ •๋ณด๋ฅผ ์–ป์–ด์„œ ์„œ๋ฒ„ ์‹œ๊ฐ„์„ DatagramPacket์— ๋‹ด์•„์„œ ์ „์†ก