Site Search :
Standard Enterprise XML Methodology Pattern Setting Tunning Other
Article Contributors
GuestBook
Javapattern Maven
XSourceGen Dev
JetSpeed Test
JLook Image
jLook Family Site


DatagramSocketÀÇ Á¤ÀÇ ¹× »ùÇÃ
 
UDPÀÇ ±âº»°³³äÀ» ¾Ë¾Æº¸°í µ¥ÀÌÅͱ׷¥ ¼ÒÄÏ ¹× ÆÐŶ¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸¸ç °£´ÜÇÑ ¼­¹ö ¹× Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥À» ÀÛ¼ºÇغ¸µµ·Ï ÇÏÀÚ. ( 2003/09/01 ) 169
Written by ienvyou - ÃÖÁö¿õ
1 of 1
 


¢º UDP(User Datagram Protocol)

UDP(User Datagram Protocol)´Â ÀÎÅͳݿ¡ ÀÖ¾î datagramÀ» Àü¼ÛÇÏ´Â Àü¼ÛÃþ ÇÁ·ÎÅäÄÝÀÎ °ÍÀº
»ç½ÇÀÌÁö¸¸ TCP ó·³ ±× »ç¾çÀÌ ¾ö°ÝÇÏ°Ô Á¤ÀÇµÈ °ÍÀº ¾Æ´Õ´Ï´Ù. 
UDP ´Â ºñ¿¬°á±â¹ÝÇüÀε¥, ÀÌ·¯ÇÑ ºñ¿¬°á¼º(connectionless) Àº IP ÇÁ·ÎÅäÄÝÀÇ Æ¯Â¡À̱⵵ ÇÕ´Ï´Ù. 
¶ÇÇÑ UDP ÀÇ µ¥ÀÌÅÍ ÆÐŶÀÎ µ¥ÀÌÅͱ׷¥ ÆÐŶÀº ±× Çì´õ¿¡ ¼Ò½º Æ÷Æ®(·ÎÄà Æ÷Æ®)¿Í ¸ñÀûÁö Æ÷Æ®(¿ø°Å¸® Æ÷Æ®) 
±×¸®°í µ¥ÀÌÅͱ׷¥ ÆÐŶ ±æÀÌ, üũ¼¶ Á¤µµ¸¸ °®½À´Ï´Ù. ±×·±µ¥ ÀÚ¹ÙÀÇ µ¥ÀÌÅ©±×·¥ ÆÐŶÀº IP ¾îµå·¹½º
Á¤º¸µµ Æ÷ÇÔÇÏ°í ÀÖ¾î µ¥ÀÌÅͱ׷¥ ÆÐŶ¿¡ ´ëÇÑ IP ÆÐŶ¿¡ ´õ °¡±õ½À´Ï´Ù. 

<Ç¥ 1>   UDP Datagram Çü½Ä
Source Port(·ÎÄÃÆ÷Æ®)Destination Port(¿ø°Å¸®Æ÷Æ®)
LengthChecksum
Data
¢º TCP ÇÁ·Î±×·¡¹Ö°ú µ¥ÀÌÅÍ ÇÁ·Î±×·¡¹ÖÀÇ Â÷ÀÌ <Ç¥ 2>
 TCP ÇÁ·Î±×·¡¹ÖDatagram ÇÁ·Î±×·¡¹Ö
¼ÒÄÏÀÇ Á¾·ùÁ¢¼Ó ¿äû¿ë : ServerSocket Åë½Å¿ë : Socket ±¸ºÐ¾øÀÌ DatagramSocket¸¸ »ç¿ë
Àü´Þ µ¥ÀÌÅÍ À¯Çü¹Ì°¡°ø µ¥ÀÌÅÍDatagram Packet
¢º ¼ÒÄÏÀÇ Á¾·ù TCP ÇÁ·Î±×·¡¹Ö¿¡¼­´Â Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍÀÇ Á¢¼Ó¿äûÀ» µè´Â ¼­¹ö ¼ÒÄÏ(ServerSocket °³Ã¼)°ú Ŭ¶óÀ̾ðÆ®¿Í »óÈ£ Åë½ÅÀ» ´ã´çÇϴ Ŭ¶óÀ̾ðÆ® ¼ÒÄÏ(Socket °³Ã¼)ÀÌ ±¸ºÐµÇ¾î ÀÖ¾ú½À´Ï´Ù. ±×·¯³ª µ¥ÀÌÅͱ׷¥ ÇÁ·Î±×·¡¹Ö¿¡¼­´Â ¼­¹ö¼ÒÄÏÀÌ µû·Î ¾ø°í Ŭ¶óÀ̾ðÆ® ¼ÒÄÏ¿¡ ÇØ´çÇÏ´Â DatagramSocket °³Ã¼¸¸ÀÌ ÀÖ½À´Ï´Ù. ÀÌ´Â ´ç¿¬ÇÑ °ÍÀÌ UDP ÇÁ·Î±×·¡¹ÖÀº ºñ¿¬°áÇüÀ̹ǷΠÁ¢¼ÓÀ» ´ç´çÇÒ ¼­¹ö¼ÒÄÏÀÌ ÇÊ¿ä¾ø´Â °ÍÀÔ´Ï´Ù. ±×·¯´Ï±î µ¥ÀÌÅͱ׷¥ ÇÁ·Î±×·¡¹Ö¿¡¼­´Â Ŭ¶óÀ̾ðÆ®ÀÇ Á¢¼ÓÀ» Çã¿ëÇÏ°í ¾î¼°í ÇÒ °Í ¾øÀÌ µ¥ÀÌÅͱ׷¥ ¼ÒÄÏ Çϳª·Î ¹«Á¶°Ç µ¥ÀÌÅͱ׷¥ ÆÐŶÀ» ÀÐ°í ¾¹´Ï´Ù. ¹°·Ð º¸¾È°ü¸®ÀÚ°¡ ¾øÀ» ¶§ ±×·¸½À´Ï´Ù. º¸¾È°ü¸®ÀÚ°¡ ¼³Ä¡µÇ¾î ÀÖÀ¸¸é º¸¾È °Ë»ç Á¤µµ´Â ÇÕ´Ï´Ù. ¢º Àü´Þ µ¥ÀÌÅÍ À¯Çü TCP ÇÁ·Î±×·¡¹Ö(ȤÀº ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö)¿¡¼­´Â Àü´ÞÇÏ´Â µ¥ÀÌÅÍ°¡ ¿ì¸®°¡ ÇÁ·Î±×·¡¹Ö¿¡¼­ ÀÏ»óÀûÀ¸·Î ´Ù·ç´Â À¯Çü°ú ´Ù¸¦ ¹Ù ¾ø¾ú½À´Ï´Ù. Áï, ÀÔÃâ·Â½ºÆ®¸²ÀÌ ´Ù·ê ¼ö ÀÖ´Â µ¥ÀÌÅͶó¸é TCP ÇÁ·Î±×·¡¹Ö¿¡¼­µµ Àü¼ÛÇÒ ¼ö ÀÖ¾ú½À´Ï´Ù. ÀÌ ¸»ÀÌ TCP¿¡¼­ Àü´Þ µ¥ÀÌÅÍ À¯ÇüÀÌ ±×·¸´Ù´Â °ÍÀÌ ¾Æ´Ï¶ó TCP ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ±×·¸´Ù´Â °ÍÀÔ´Ï´Ù. ¿ì¸®°¡ TCP ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ´Ù¸¥ °ÍÀº ½Å°æ¾²Áö ¾Ê°í Ãâ·Â½ºÆ®¸²À¸·Î ÀÏ¹Ý µ¥ÀÌÅ͸¦ º¸³»¸é, ±× ¾Æ·¡ÃþÀÎ TCP ¹× IP ÃþÀ» Åë°úÇϸ鼭 ÆÐŶȭµË´Ï´Ù. ±×·¯´Ï±î TCP ÇÁ·Î±×·¡¹ÖÀº öÀúÇÏ°Ô ¾ÖÇø®ÄÉÀ̼ÇÃþ¸¸ ´ã´çÇÕ´Ï´Ù. ±×·¯³ª µ¥ÀÌÅͱ׷¥ ÇÁ·Î±×·¡¹Ö¿¡¼­´Â ¹Ì°¡°ø µ¥ÀÌÅ͸¦ ±×´ë·Î º¸³»Áö ¾Ê°í, ¸ÕÀú µ¥ÀÌÅͱ׷¥ ÆÐŶÀ¸·Î º¯È¯ÇÑ µÚ À̸¦ ÀÔÃâ·Â½ºÆ®¸²À» ÅëÇØ Àü¼ÛÇÕ´Ï´Ù. ±×·±µ¥ ÀÚ¹ÙÀÇ µ¥ÀÌÅͱ׷¥ ÆÐŶÀº ¼ø¼öÇÑ µ¥ÀÌÅͱ׷¥ ÆÐŶÀÌ ¾Æ´Ñ IP ÆÐŶ Ư¼ºµµ Æ÷ÇÔÇÑ ±×·± °ÍÀÔ´Ï´Ù. ±×·¯´Ï±î ÀÚ¹Ù µ¥ÀÌÅͱ׷¥ ÇÁ·Î±×·¡¹ÖÀº ¾ÖÇø®ÄÉÀ̼ÇÃþ¸¸ ´ã´çÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ±× ¾Æ·¡ÃþÀÎ Àü¼ÛÃþ, ½ÉÁö¾î´Â ³×Æ®¿÷Ãþ±îÁöµµ Á÷Á¢ °Çµå¸³´Ï´Ù. ¢ºDatagramSocket Ŭ·¡½º Á¤ÀÇ DatagramSocket Ŭ·¡½º- DatagramPacket °´Ã¼¸¦ Àü¼ÛÇÏ°í ¼ö½ÅÇϴµ¥ »ç¿ëÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅͱ׷¥ ¼ÒÄÏ Å¬·¡½º ÀÔ´Ï´Ù. * »ý¼ºÀÚ DatagramSocket() throws SocketException - Æ÷Æ® ¹øÈ£°¡ ÀÓÀ¸·Î Á¤ÇØÁø »óÅÂÀÇ DatagramSocket °´Ã¼¸¦ »ý¼º DatagramSocket(int port) throws SocketException - ¸Å°³º¯¼ö·Î µé¾î¿Â port¿¡¼­ ´ë±âÇÏ´Â DatagramSocket °´Ã¼¸¦ »ý¼º DatagramSocket(int port, InetAddress Iaddr) throws SocketException - ¸Å°³º¯¼ö·Î µé¾î¿Â port¿¡¼­ ´ë±âÇÏ´Â DatagramSocket °´Ã¼¸¦ »ý¼ºÇÏ¿© ÇØ´ç IP ¾îµå·¹½º¿¡ ¹ÙÀεù ÇÕ´Ï´Ù.ÀÌ »ý¼ºÀÚ´Â ´ÙÁß IP ¾îµå·¹½º¸¦ °®´Â È£½ºÆ®¿¡¼­ »ç¿ëÇÕ´Ï´Ù. ¢º DatagramPacket Ŭ·¡½º Á¤ÀÇ DatagramPacketÀº UDP Åë½Å¿¡¼­ µ¥ÀÌÅÍÀÇ ÆÐŶÀ» ¸¸µé¾î DatagramSocketÀ» ÀÌ¿ëÇؼ­ ¼Û,¼ö½Å ÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù. public DatagramPacket(byte buffer[ ], int length) - µ¥ÀÌÅ͸¦ ¹Þ±â À§ÇØ DatagramPacket °´Ã¼¸¦ ¸¸µå´Â »ý¼ºÀÚ - buffer[ ]: µ¥ÀÌÅÍ°¡ À§Ä¡ÇØ ÀÖ´Â ¹ÙÀÌÆ® ¹è¿­ - length: ¹öÆÛÀÇ ±æÀÌ public DatagramPacket(byte buffer[ ], int length, InetAddress ia, int port) - ´Ù¸¥ È£½ºÆ®·Î Àü¼ÛÇÒ DatagramPacket »ý¼ºÇÏ´Â »ý¼ºÀÚ - buffer[ ]: Àü¼ÛÇÒ µ¥ÀÌÅÍÀÇ ¹ÙÀÌÆ® ¹è¿­ - length: ¹öÆÛÀÇ ±æÀÌ - InetAddress ia: ÆÐŶÀÇ ¸ñÀûÁö È£½ºÆ® ÁÖ¼Ò - Port: ¸ñÀûÁö Æ÷Æ® ¹øÈ£ ¢º Datagram ServerÀÛ¼º¿¹

import java.net.*;

public class DaytimeServer {
  public static final int DEFAULT_PORT = 13;
  public static void main (String[] args) throws IOException {
    if (args.length > 1)
      throw new IllegalArgumentException ("Syntax: DaytimeServer []");
    // »ç¿ëÀÚ ÀÔ·Â Æ÷Æ®ÀÇ DatagramSocket »ý¼º ÀԷ°ªÀÌ ¾øÀ» °æ¿ì Default Port 13
    DatagramSocket socket = new DatagramSocket
      (args.length == 0 ? DEFAULT_PORT : Integer.parseInt (args[0])); 
    DatagramPacket packet = new DatagramPacket (new byte[1], 1); // DatagramPacket »ý¼º

    while (true) {
      socket.receive (packet); // ¼ÒÄÏÀ¸·ÎºÎÅÍ ÆÐŶÀ» ¹ÞÀ½
      System.out.println
        ("Received from: " + packet.getAddress () + ":" + packet.getPort ());
     
      byte[] outBuffer = new java.util.Date ().toString ()
        .getBytes ("latin1"); // ÆÐŶ Á¤º¸¸¦ Ç¥½Ã
      packet.setData (outBuffer);
      packet.setLength (outBuffer.length);
      socket.send (packet); 
    }
  }
}

µ¥ÀÌÅÍÀÓ ¼­¹ö´Â ¸í·ÉÇà ÀÎÀÚ·Î ¼³Á¤µÈ Æ÷Æ®¿¡¼­ ´ë±âÇϸ鼭, µé¾î¿À´Â ¸ðµç ÆÐŶ¿¡ ´ëÇØ ÇöÀç ½Ã°£À» ´ã¾Æ Ŭ¶óÀ̾ðÆ®¿¡ ÀÀ´äÇÕ´Ï´Ù. ÆÐŶ ¼ö½Å°ú ÀÀ´ä¿¡´Â ÇϳªÀÇ ½º·¹µå¸¸ »ç¿ëÇÏ¿´½À´Ï´Ù. Main()¸Þ¼Òµå¿¡¼­´Â ¿ì¼± ÀÎÀÚ·Î ¼³Á¤µÈ Æ÷Æ® ¹øÈ£°¡ Á¦´ë·Î µÈ °ÍÀÎÁö °ËÁõÇÏ°í, ±×·¸Áö ¾ÊÀº°æ¿ì µðÆúµå Æ÷Æ® ¹øÈ£ÀÎ 13À» »ç¿ëÇÕ´Ï´Ù.±×¸®°í DatagramSocketŸÀÔÀÇ SocketÀ» »ý¼ºÇÏ°í ÀÌ Æ÷Æ®¿¡¼­ ´ë±â½ÃŲ ÈÄ UDP ÆÐŶÀ» ¹ÞÀ» ¶§ »ç¿ëÇÒ DatagramPacket ŸÀÔÀÇ PacketÀ» »ý¼ºÇÕ´Ï´Ù. ÀÌ ÇÁ·Î±×·¥ÀÇ ÇÙ½ÉÀÎ ·çÇÁ ºÎºÐ¿¡¼­´Â receive()¸¦ È£ÃâÇÏ¿© ÆÐŶÀÌ ¿À±â¸¦ ±â´Ù¸®¸ç, ÆÐŶÀÌ ¿À¸é ÀÌ ÆÐŶÀ» º¸³½ È£½ºÆ® Á¤º¸¸¦ Ãâ·ÂÇÑ ÈÄ¿¡ ÇöÀçÀÇ ³¯Â¥¿Í ½Ã°£ Á¤º¸°¡ ´ã±ä ¹ÙÀÌÆ® ¹è¿­ÀÎ outBuffer¸¦ »õ·Î ¸¸µì´Ï´Ù. packet °´Ã¼ÀÇ setData()¿Í setLength()¸¦ »ç¿ëÇÏ¿© receive()·Î ¹ÞÀº ÆÐŶ¿¡ ½Ã°£Á¤º¸¸¦ ³Ö½À´Ï´Ù. ¸¶Áö¸·À¸·Î send()¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© ¿ø·¡ÀÇ È£½ºÆ®·Î packetÀ» µ¹·Á º¸³À´Ï´Ù. == Âü°í == packet¿¡´Â ¿ø·¡ È£½ºÆ® ÁÖ¼Ò¿Í Æ÷Æ®¹øÈ£°¡ ÀÌ¹Ì µé¾î Àֱ⠶§¹®¿¡, packetÁ¤º¸´Â ±×³É ³öµÎ¾îµµ µÈ´Ù. ¢º Datagram Client ÀÛ¼º¿¹

import java.net.*;

public class DaytimeClient {
  public static void main (String[] args) throws IOException {
    if ((args.length != 1))
      throw new IllegalArgumentException
        ("Syntax: DaytimeClient [:]");
 
    int idx = args[0].indexOf (":");
    int port = (idx > -1) ? Integer.parseInt (args[0].substring (idx + 1))
      : DaytimeServer.DEFAULT_PORT;
    String hostName = (idx > -1) ? args[0].substring (0, idx) : args[0];
    InetAddress host = InetAddress.getByName (hostName);
 
    DatagramSocket socket = new DatagramSocket ();
    socket.setSoTimeout (5000);
    DatagramPacket packet = new DatagramPacket (new byte[256], 1, host, port);
    socket.send (packet);
    packet.setLength (packet.getData ().length);
    socket.receive (packet);
    socket.close ();
 
    byte[] data = packet.getData ();
    int length = packet.getLength ();
    System.out.println (new String (data, 0, length, "latin1"));
  }
}}

DaytimeClient ´Â DaytimeServer¸¦ Å×½ºÆ® Çϱâ À§ÇÑ °ÍÀÔ´Ï´Ù. ¸Å°³º¯¼ö·Î ¼³Á¤µÈ ÄÄÇ»ÅÍ Æ÷Æ®¿¡ ÆÐŶÀ» º¸³»°í, ÀÀ´äÀ» ±â´Ù¸®°í, ¹ÞÀº ÀÀ´ä Á¤º¸ÀÇ ³»¿ëÀ» Ãâ·ÂÇÏ´Â °ÍÀÌ ÀüºÎÀÔ´Ï´Ù. Main()¸Þ¼Òµå ¿¡¼­´Â È£½ºÆ® ÁÖ¼ÒÀÎ host¿Í Æ÷Æ® ¹øÈ£¸¦ °Ë»çÇÏ¿©, ¿ª½Ã Æ÷Æ®¹øÈ£°¡ ÁÖ¾îÁöÁö ¾ÊÀ¸¸é µðÆúÆ® Æ÷Æ® ¹øÈ£¸¦ »ç¿ëÇÕ´Ï´Ù. ÆÐŶÀ» º¸³¾ Áغñ¸¦ Çϱâ À§ÇØ 5ÃÊÀÇ ¼ö½Å ŸÀӾƿôÀÌ ¼³Á¤µÈ DatagramSocketŸÀÔÀÇ ¼ÒÄÏÀ» »ý¼ºÇÏ°í Å×ÀÌÅÍ ±æÀÌ°¡ 1ÀÌ°í ¸®¸ðÆ® ¼­¹öÀÇ ÁÖ¼Ò°¡ ´ã±ä 256¹ÙÀÌÆ®ÀÇ ¹öÆÛ¸¦ ³Ö¾î DatagramPacket ŸÀÔÀÇ ÆÐŶÀ» »ý¼ºÇÕ´Ï´Ù. Send()¸¦ ÅëÇØ º¸³»Áö´Â ÆÐŶÀº ´Ü ÇÑ ¹ÙÀÌÆ®¸¦ º¸³»Áö¸¸ ÀÀ´äÀ» ¹Þ±â¿¡´Â ÃæºÐÇÕ´Ï´Ù. ÆÐŶÀ» º¸³»°í ³ª¸é Áï½Ã ÀÌ ÆÐŶÀÇ ÆäÀ̷ε带 256À¸·Î Àç¼³Á¤ÇÏ¿© ÀÀ´äÀ» ±â´Ù¸®±â ¶§¹®¿¡ , ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´Â ÀÀ´ä Á¤º¸ÀÇ ±æÀÌ´Â ÃÖ´ë 256 ÀÌ µË´Ï´Ù. ¸¸¾à ¼ö½Å½Ã°£ 5Ãʸ¦ ³Ñ±â¸é InterruptedIOException¿¹¿Ü¿Í ÇÔ²² ÇÁ·Î±×·¥ ½ÇÇàÀÌ ¹Ù·Î ¸ØÃä´Ï´Ù. °£´ÜÇÏ°Ô Datagram¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸¾ÒÀ¸¸ç, ´ÙÀ½ ¾ÆƼŬÀº ¸ÖƼij½ºÆ®¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸µµ·Ó ÇÕ´Ï´Ù.
 
1
References
 
java network programming : ÇѺû¹Ìµð¾î
Copyright ¨Ï 2003 www.javapattern.info & www.jlook.com, an jLOOK co.,LTD