½ºÆ®¸²°ú ³×Æ®¿÷
±Û/À±°æ±¸
1999³â 4¿ùÈ£ ¸¶¼Ò ÁÖ´Ï¾î ¿ø°íÀÔ´Ï´Ù.
ÇÊÀÚ°¡ óÀ½ ÀÚ¹Ù ¾ð¾î¸¦ ¸¸³µÀ» ¶§ °¡Àå ´ä´äÇß´ø ºÎºÐÀº ÇÑ±Û Áö¿ø ¹®Á¦¿´½À´Ï´Ù. Çѹݵµ¿¡ °ÅÁÖÇÏ´Â ÇÁ·Î±×·¡¸Ó¶ó¸é ÇѱÛÀ» ¿øÈ°ÇÏ°Ô »ç¿ëÇÒ ¼ö ¾ø´Â ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ °í¿î ½Ã¼±À¸·Î ¹Ù¶óº¼ ¼ö ¾øÀ» °ÍÀÔ´Ï´Ù.
ÀÚ¹Ù´Â Ãʱ⠼³°è¿¡¼ºÎÅÍ ±¹°¡³ª ±¹¾î¿¡ °ü°è¾øÀÌ ÇÁ·Î±×·¥À» °³¹ßÇÒ ¼ö ÀÖµµ·Ï Áö¿øÇϱâ À§ÇØ ³»ºÎÀûÀ¸·Î char À¯ÇüÀ» 8ºñÆ®°¡ ¾Æ´Ñ ºÎÈ£ ¾ø´Â 16ºñÆ®·Î ÁöÁ¤ÇÏ¿´À¸¸ç, ¹®ÀÚ Äڵ带 ±¹Á¦ Ç¥ÁØÀÎ À¯´ÏÄÚµå·Î ó¸®ÇÏ°Ô ÇÏ¿´½À´Ï´Ù. ÇÏÁö¸¸ ÀÚ¹ÙÀÇ Ã¹ °ø½Ä ¹öÀüÀÎ JDK 1.0Àº ÇÑ±Û µîÀ» Áö¿øÇϴ Ŭ·¡½º¿¡ ½É°¢ÇÑ ¹ö±×°¡ ÀÖ¾ú½À´Ï´Ù. ÀÚ¹Ù ¾ð¾î¸¦ ¸¸µç ´ë¸Ó¸® ¾ÆÀú¾¾, Á¦ÀÓÁî °í½½¸µ ¾¾°¡ °¢±¹ÀÇ ¹®ÀÚ¸¦ ³ªÅ¸³»´Â Ç¥ÁØÀÎ À¯´ÏÄڵ带 À߸ø ÀÌÇØÇÏ°í ÀÖ¾ú´ø ¶§¹®ÀÌÁö¿ä.
ÀÌ ¹®Á¦´Â ´ÙÀ½ ¹öÀüÀÎ JDK 1.1ºÎÅÍ ¹ö±×°¡ ¼öÁ¤µÇ°í, ´Ù¾çÇÑ ±¹°¡, ¾ð¾î¸¦ Áö¿øÇϸ鼺ÎÅÍ °ÅÀÇ ¿ÏÀüÈ÷ ÇØ°áµÇ¾ú½À´Ï´Ù. ÀÌÁ¦ ÀÚ¹Ù´Â ´ÙÁß Ç÷§Æû ÇÁ·Î±×·¥À» ¸¸µé»Ó¸¸ ¾Æ´Ï¶ó ÇϳªÀÇ ÄÚµå·Î ´Ù¾çÇÑ ±¹°¡¿Í ±¹¾î¸¦ Áö¿øÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖ½À´Ï´Ù. ÁøÁ¤ÇÑ Àǹ̿¡¼ ¼ö¸¹Àº Ç÷§Æû¿¡¼ ½ÇÇàµÇ´Â ÇÁ·Î±×·¥À» ¸¸µå´Â ¾ð¾î°¡ µÈ °ÍÀÔ´Ï´Ù.
ÀÚ¹Ù´Â µ¿ÀÏÇÑ ÇÁ·Î±×·¥ÀÌ ±¹°¡, ±¹¾î, ¿î¿µ üÁ¦, Çϵå¿þ¾î ȯ°æ µîÀÇ À庮À» ³Ñ¾î ½ÇÇàµÉ ¼ö ÀÖµµ·Ï ÇÒ»Ó¸¸ ¾Æ´Ï¶ó ÀÎÅÍ³Ý ½Ã´ë¿¡ ÅÂ¾î³ ÇÁ·Î±×·¡¹Ö ¾ð¾î´ä°Ô ÀÎÅͳÝÀ¸·Î ¿¬°áµÇ´Â ¼ö¸¹Àº ÄÄÇ»Å͵éÀ» Çϳª·Î ¹¾îÁÖ´Â ¿ªÇÒµµ ÇÏ°í ÀÖ½À´Ï´Ù. ¹Ù·Î ³×Æ®¿÷¿¡ ´ëÇÑ Áö¿øÀ» ±âº» ±â´ÉÀ¸·Î Æ÷ÇÔÇÏ°í Àֱ⠶§¹®ÀÔ´Ï´Ù. ³×Æ®¿÷ ºÐ»ê ȯ°æÀ» ±¸¼ºÇÏ´Â Åë½Å ±Ô¾àÀÎ TCP/IP¸¦ Áö¿øÇÏ´Â °ÍÀº ¹°·Ð, ÀÌ¿¡ ±â¹ÝÇÑ ¿ùµå¿ÍÀ̵åÀ¥ ±Ô¾àÀÎ HTTP, ÀÎÅÍ³Ý ÆÄÀÏ Àü¼Û ±Ô¾àÀÎ FTP µîÀ» Á÷Á¢ Áö¿øÇϱ⵵ ÇÕ´Ï´Ù. ÀÎÅÍ³Ý ¹× À¯,¹«¼± ³×Æ®¿÷ ±Ô¾àÀ¸·Î Áö±¸ÃÌÀÌ Çϳª·Î ¿«¾îÁ® °¡´Â ½Ã´ëÀÇ ÇÁ·Î±×·¡¹Ö¿£ ÀÚ¹Ù°¡ ÀÌÁ¦ ºüÁú ¼ö ¾ø´Â ÇÙ½É °³¹ß ¾ð¾î°¡ µÇ¾ú½À´Ï´Ù.
À̹ø È£¿¡¼´Â ³×Æ®¿÷ ÀÔÃâ·ÂÀº ¹°·Ð, Ç¥ÁØ ÀÔÃâ·Â, ÆÄÀÏ ÀÔÃâ·Â µî ÀÚ¹ÙÀÇ ÀÔÃâ·Â¿¡ »ç¿ëµÇ´Â ½ºÆ®¸² ±â´ÉÀ» Áß½ÉÀ¸·Î ÇѱÛÀ» »ç¿ëÇϱâ À§ÇÑ ¹®Àڼ º¯È¯±îÁö ¾Ë¾Æº¸µµ·Ï ÇÕ´Ï´Ù.
1. ÀÔÃâ·Â ½ºÆ®¸²
À©µµ¿ìÀÇ µµ½º âÀ̳ª À¯´Ð½º ¼Ð·ÎºÎÅÍ ÀÔ·ÂÀ» ¹Þ±â À§Çؼ º¸Åë Ç¥ÁØ ÀÔ·ÂÀ» »ç¿ëÇÏ°í ¶Ç µµ½º âÀ̳ª ¼Ð·Î °á°ú³ª ¿¡·¯¸¦ Ãâ·ÂÇϱâ À§Çؼ´Â Ç¥ÁØ Ãâ·Â°ú Ç¥ÁØ ¿¡·¯¸¦ »ç¿ëÇÕ´Ï´Ù. ¶Ç, ÆÄÀÏÀ» ÀÐ°í ¾²±â À§Çؼ´Â ÆÄÀÏ ÀÔÃâ·ÂÀÌ ÇÊ¿äÇÏ°í ³×Æ®¿÷À» ÅëÇØ µ¥ÀÌÅ͸¦ ÁÖ°í ¹Þ±â À§Çؼ´Â ³×Æ®¿÷ ÀÔÃâ·ÂÀÌ ÇÊ¿äÇÕ´Ï´Ù.
ÀÚ¹Ù´Â ÀÌ·¯ÇÑ ÀÔÃâ·ÂÀ» »ç¿ëÇÏ´Â µ¥¿¡ ½ºÆ®¸²À̶õ ¹æ½ÄÀ» »ç¿ëÇÕ´Ï´Ù. ½ºÆ®¸²Àº ¹æÇâÀÌ ÀÖ´Â ÇϳªÀÇ È帧À» ¶æÇÏ´Â ¸»·Î, º¸Åë 8ºñÆ® ¹ÙÀÌÆ®·Î ±¸¼ºµÈ µ¥ÀÌÅ͵éÀÇ ÀÏ·ÃÀÇ È帧À» ³ªÅ¸³À´Ï´Ù.
½ºÆ®¸²Àº ¼øÂ÷ÀûÀÎ È帧À̱⠶§¹®¿¡ ³»ºÎÀûÀ¸·Î ¸ÕÀú µé¾î¿Â °ÍÀÌ ¸ÕÀú ³ª°¡´Â ¼±ÀÔ¼±Ãâ(FIFO) ±¸Á¶·Î ±¸ÇöµË´Ï´Ù. ÀÚ¹ÙÀÇ ¸ðµç ÀԷ°ú Ãâ·ÂÀº ÀÌ·¯ÇÑ ½ºÆ®¸² ±¸Á¶·Î ¸¸µé¾îÁý´Ï´Ù. ´Ü Çϳª ¿¹¿Ü°¡ Àִµ¥ ¹Ù·Î ÀÓÀÇ Á¢±Ù ÆÄÀÏÀ» ³ªÅ¸³»´Â RandomAccessFile Ŭ·¡½ºÀÔ´Ï´Ù. ÀÓÀÇ Á¢±Ù ÆÄÀÏ¿¡¼´Â ¼øÂ÷ÀûÀ¸·Î Àаųª ¾²´Â °ÍÀÌ ¾Æ´Ï¶ó ÆÄÀÏÀÇ ½ÃÀÛÁ¡À¸·ÎºÎÅÍÀÇ °Å¸®(¿ÀÇÁ¼Â)¸¦ ÁöÁ¤ÇÏ¿© ÀÓÀÇÀÇ À§Ä¡¿¡ ¹Ù·Î Á¢±ÙÇÏ¿© Àаųª ¾µ ¼ö ÀÖ½À´Ï´Ù.
1.1 ÀÔÃâ·Â ½ºÆ®¸² Ŭ·¡½º
ÀÚ¹Ù¿¡¼ ½ºÆ®¸² ±¸Á¶¸¦ ³ªÅ¸³»´Â ¿©·¯ °¡Áö Ŭ·¡½ºµéÀº ¸ðµÎ java.io ÆÐÅ°Áö¿¡ ¼ÓÇϸç InputStream Ŭ·¡½º ȤÀº OutputStream Ŭ·¡½º¸¦ »ó¼ÓÇÏ¿© ¸¸µé¾îÁý´Ï´Ù. ÀԷ¿¡ °ü°èµÈ ¿©·¯ °¡Áö ½ºÆ®¸²µéÀº InputStream Ŭ·¡½ºÀÇ ÀÚ½Ä Å¬·¡½ºµéÀÌ°í Ãâ·Â¿¡ °ü°èµÈ ¿©·¯ ½ºÆ®¸² Ŭ·¡½ºµéÀº OutputStream Ŭ·¡½ºÀÇ ÀÚ½Ä Å¬·¡½ºµéÀÔ´Ï´Ù.
´ÙÀ½ Ç¥´Â °¢°¢ java.io ÆÐÅ°Áö¿¡ ÀÖ´Â ¿©·¯ ÀÔ·Â ¹× Ãâ·Â ½ºÆ®¸² Ŭ·¡½ºµéÀ» º¸¿©ÁÝ´Ï´Ù.
Ŭ·¡½º |
¼³¸í |
InputStream |
¸ðµç ¹ÙÀÌÆ® ½ºÆ®¸² ÀԷ Ŭ·¡½ºÀÇ ºÎ¸ð Ŭ·¡½º |
ByteArrayInputStream |
¹ÙÀÌÆ® ¹è¿·ÎºÎÅÍ ÀоîµéÀÌ´Â ÀÔ·Â ½ºÆ®¸² Ŭ·¡½º |
FileInputStream |
ÆÄÀÏÀ» ÀоîµéÀÌ´Â ÀÔ·Â ½ºÆ®¸² Ŭ·¡½º |
FilterInputStream |
´Ù¸¥ ÀÔ·Â ½ºÆ®¸²ÀÇ µ¥ÀÌÅ͸¦ °¡°øÇÏ´Â ÀÔ·Â ½ºÆ®¸² Ŭ·¡½º |
BufferedInputStream |
µ¥ÀÌÅ͸¦ ÀоîµéÀÏ ¶§ ³»ºÎ ¹öÆÛ¸¦ »ç¿ëÇϵµ·Ï ÇÏ´Â ÀÔ·Â ½ºÆ®¸² Ŭ·¡½º |
DataInputStream |
ÀÔ·Â ½ºÆ®¸²À¸·ÎºÎÅÍ ÀÚ¹Ù À¯ÇüÀ» ÀоîµéÀÌ´Â ÀÔ·Â ½ºÆ®¸² |
PushbackInputStream |
½ºÆ®¸²À¸·ÎºÎÅÍ ÀÏÁ¤ÇÑ Å©±âÀÇ µ¥ÀÌÅ͸¦ Àоú´Ù°¡ ¾È ÀÐÀº »óÅ·ΠµÇµ¹¸± ¼ö ÀÖ´Â ÀÔ·Â ½ºÆ®¸² |
ObjectInputStream |
ÀúÀåµÈ °´Ã¼ µ¥ÀÌÅ͸¦ ÀоîµéÀÌ´Â ÀÔ·Â ½ºÆ®¸² |
PipedInputStream |
»ý¼ºµÈ ÆÄÀÌÇÁ·ÎºÎÅÍ ÀоîµéÀÌ´Â ÀÔ·Â ½ºÆ®¸² |
SequenceInputStream |
¿©·¯ ÀÔ·Â ½ºÆ®¸²À» Â÷·Ê·Î ÇϳªÀÇ ¿¬°áµÈ ÀÔ·Â ½ºÆ®¸²À¸·Î °£ÁÖÇÏ°Ô ÇØÁÖ´Â ÀÔ·Â ½ºÆ®¸² |
Ŭ·¡½º |
¼³¸í |
OutputStream |
¸ðµç ¹ÙÀÌÆ® ½ºÆ®¸² Ãâ·Â Ŭ·¡½ºÀÇ ºÎ¸ð Ŭ·¡½ºÀÌ´Ù. |
ByteArrayOutputStream |
¹ÙÀÌÆ® ¹è¿·Î ¾²´Â Ãâ·Â ½ºÆ®¸² Ŭ·¡½º |
FileOutputStream |
ÆÄÀÏ·Î ¾²´Â Ãâ·Â ½ºÆ®¸² Ŭ·¡½º |
FilterOutputStream |
´Ù¸¥ Ãâ·Â ½ºÆ®¸²ÀÇ µ¥ÀÌÅ͸¦ °¡°øÇÏ´Â Ãâ·Â ½ºÆ®¸² Ŭ·¡½º |
BufferedOutputStream |
µ¥ÀÌÅ͸¦ ¾µ ¶§ ³»ºÎ ¹öÆÛ¸¦ »ç¿ëÇϵµ·Ï ÇÏ´Â Ãâ·Â ½ºÆ®¸² Ŭ·¡½º |
DataOutputStream |
Ãâ·Â ½ºÆ®¸²À¸·Î ÀÚ¹Ù À¯ÇüÀ» ³»º¸³»´Â Ãâ·Â ½ºÆ®¸² |
PrintStream |
´Ù¾çÇÑ µ¥ÀÌÅÍ À¯ÇüÀ» °£´ÜÇÏ°Ô Ãâ·ÂÇÏ´Â ÆíÀÇÀûÀÎ Ãâ·Â ½ºÆ®¸² |
ObjectOutputStream |
°´Ã¼ µ¥ÀÌÅ͸¦ ³»º¸³»´Â Ãâ·Â ½ºÆ®¸² |
PipedOutputStream |
ÆÄÀÌÇÁ¸¦ »ý¼ºÇÏ¿© µ¥ÀÌÅ͸¦ ³»º¸³»´Â Ãâ·Â ½ºÆ®¸² |
1.2 ÀÔÃâ·Â ½ºÆ®¸²À» »ç¿ëÇÑ ÆÄÀÏ º¹»ç
ÀÔÃâ·Â ½ºÆ®¸²À» »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¹è¿ì·Á¸é ÀüÇüÀûÀÎ »ç¿ë ¿¹¸¦ º¸´Â °ÍÀÌ °¡Àå ÁÁÀ» °ÍÀÔ´Ï´Ù. ÆÄÀÏ ÀÔÃâ·Â ½ºÆ®¸² Ŭ·¡½ºµéÀ» »ç¿ëÇÏ¿© ÀÌÁø ÆÄÀÏÀ» º¹»çÇÏ´Â ÀÚ¹Ù ÇÁ·Î±×·¥À» ¸¸µé¾îº¸¸é¼ »ç¿ë¹ýÀ» ÀÍÈ÷µµ·Ï ÇÏ°Ú½À´Ï´Ù.
ÆÄÀÏ ÀÔÃâ·Â¿¡ ÇØ´çÇÏ´Â ½ºÆ®¸² Ŭ·¡½º´Â °¢°¢ FileInputStream°ú FileOutputStreamÀÔ´Ï´Ù.
¸ÕÀú FileInputStream ȤÀº FileOutputStreamÀ» »ý¼ºÇÏ´Â ¹æ¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù.
// ¿øõ ÆÄÀÏÀÎ source.dat ÆÄÀϷκÎÅÍ ÀоîµéÀÌ´Â ÆÄÀÏ ÀÔ·Â ½ºÆ®¸²À» ¸¸µé °æ¿ì
FileInputStream fileIn = new FileInputStream("source.dat");
// ¸ñÀû ÆÄÀÏÀÎ destine.dat ÆÄÀÏ·Î ¾²´Â ÆÄÀÏ Ãâ·Â ½ºÆ®¸²À» ¸¸µé °æ¿ì
FileOutputStream fileOut = new FileOutputStream("destine.dat");
¶Ç, ÆÄÀÏÀ» ÀÐ°í ¾µ ¶§ È¿À²À» ³ôÀ̱â À§ÇÏ¿© ÆÄÀÏ ÀÔÃâ·Â ½ºÆ®¸²À» ³»ºÎÀûÀ¸·Î ¹öÆÛ¸¦ »ç¿ëÇÏ´Â ¹öÆÛ ÀÔÃâ·Â ½ºÆ®¸²À¸·Î º¯È¯ÇÏ¿© »ç¿ëÇÒ °ÍÀÔ´Ï´Ù. Buffered<Input/Output>Stream, Data<Input/Output>Stream, PrintStream µîÀº Ŭ·¡½º »ó¼Ó °èÃþ ±¸Á¶¿¡¼ È®ÀÎÇÒ ¼ö ÀÖµíÀÌ Filter<Input/Output>Stream Ŭ·¡½ºÀÇ ÀÚ½Ä Å¬·¡½ºÀε¥ ´Ù¸¥ ÀÔÃâ·Â ½ºÆ®¸²ÀÇ µ¥ÀÌÅ͸¦ °¡°øÇÏ¿© ÇÁ·Î±×·¡¸Ó°¡ Æí¸®ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁÖ´Â ±â´ÉÀ» ÇÏ´Â ÀÔÃâ·Â Ŭ·¡½ºµéÀÔ´Ï´Ù.
À§ÀÇ fileIn, fileOut ÀÔÃâ·Â ½ºÆ®¸² °´Ã¼¸¦ »ç¿ëÇÏ¿© °¢°¢ ¹öÆÛ ÀÔÃâ·Â ½ºÆ®¸²À» »ý¼ºÇÏ´Â ¹æ¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù.
// ´ÙÀ½¿¡¼ 512´Â ¹öÆÛ ÀÔÃâ·Â Ŭ·¡½º°¡ ³»ºÎÀûÀ¸·Î »ç¿ëÇÒ ¹öÆÛÀÇ Å©±â¸¦ ÁöÁ¤ÇÏ´Â °ªÀÔ´Ï´Ù.
// ¹öÆÛ Å©±â¸¦ ÀÎÀÚ·Î ¹ÞÁö ¾Ê´Â ¹öÀüÀÇ »ý¼ºÀÚ´Â ±âº»°ªÀ¸·Î 512¸¦ »ç¿ëÇÕ´Ï´Ù.
BufferedInputStream in = new BufferedInputStream(fileIn, 512);
BufferedOutputStream out = new BufferedOutputStream(fileOut, 512);
ÆÄÀÏ º¹»ç ÇÁ·Î±×·¥Àº ¿øõ ÆÄÀÏÀÇ ¹öÆÛ ÀÔ·Â ½ºÆ®¸²À¸·ÎºÎÅÍ µ¥ÀÌÅ͸¦ Àоîµé¿© ¸ñÀû ÆÄÀÏÀÇ ¹öÆÛ Ãâ·Â ½ºÆ®¸²À¸·Î µ¥ÀÌÅ͸¦ ¾²´Â ÀÏÀ» ÇÒ °ÍÀÔ´Ï´Ù. µ¥ÀÌÅ͸¦ ÀоîµéÀÏ ¶§¿¡´Â read() ¸Þ¼Òµå¸¦, ¾µ ¶§¿¡´Â write() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.
ÀÔ·Â ½ºÆ®¸²À¸·ÎºÎÅÍ read() ¸Þ¼ÒµåÀÇ ¹Ýȯ°ªÀÌ -1ÀÌ¸é ½ºÆ®¸²ÀÇ ³¡¿¡ µµ´ÞÇÑ °ÍÀ» ¶æÇÕ´Ï´Ù. ÀÌ °æ¿ì¿¡´Â ÆÄÀÏÀ» ¸ðµÎ ÀоúÀ½À» ¶æÇÕ´Ï´Ù. ±×·¯¹Ç·Î ¿©±â¿¡¼´Â while ¹Ýº¹¹®À» »ç¿ëÇÏ¿© read() ¸Þ¼ÒµåÀÇ ¹Ýȯ°ªÀÌ 0°ú °°°Å³ª Å©¸é ÀÐÀº µ¥ÀÌÅ͸¦ Ãâ·Â ½ºÆ®¸²À¸·Î ¾²±â¸¦ ¹Ýº¹ÇÏ¸é µË´Ï´Ù.
byte buffer[] = new byte[1024]; // ÀÐÀº ¹ÙÀÌÆ® µ¥ÀÌÅ͵éÀ» ÀúÀåÇÒ ¹öÆÛ
try {
int nRead=0; // read() ¸Þ¼Òµå°¡ ÇÑ ¹ø¿¡ ÀÐÀº ¹ÙÀÌÆ® ¼ö¸¦ ÀúÀåÇÒ º¯¼ö
while ((nRead=in.read(buffer, 0, 1024))>=0) {
out.write(buffer, 0, nRead); // ÀоîµéÀÎ ¹ÙÀÌÆ® µ¥ÀÌÅ͸¦ ¾¹´Ï´Ù.
}
} catch (IOException ie) { // ÀÐ°í ¾²´Â µµÁß ¿¹¿Ü ¹ß»ýÇϸé ó¸®ÇÕ´Ï´Ù.
System.err.println("\n¿¡·¯ : "+ie.getMessage());
}
finally { // ÀÔÃâ·Â ½ºÆ®¸² »ç¿ëÀÌ ³¡³µÀ¸¸é ¹Ýµå½Ã ¸®¼Ò½º¸¦ ÇØÁöÇϵµ·Ï ÇÕ´Ï´Ù.
try { in.close(); } catch (IOException ie) { }
try { out.close(); } catch (IOException ie) { }
}
ÀÔÃâ·Â ½ºÆ®¸²À» »ç¿ëÇÒ ¶§ ÁÖÀÇÇÒ Á¡ Áß Çϳª´Â ¹Ýµå½Ã ÀÔÃâ·Â ½ºÆ®¸² »ç¿ëÀÌ ³¡³ª¸é ÇÒ´çµÈ ¸®¼Ò½º¸¦ ÇØÁöÇØÁà¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. °¢ ½ºÆ®¸²Àº ÇÁ·Î¼¼½º ´ÜÀ§·Î ÇÒ´çµÇ´Â ¸®¼Ò½º¸¦ »ç¿ëÇÏ°í ÀÖÀ¸¹Ç·Î ¹Ýµå½Ã close()¸¦ ÇØÁà¾ß ¸Þ¸ð¸® À¯Ãâ µîÀ» ¸·À» ¼ö°¡ ÀÖ½À´Ï´Ù. À§¿¡¼ º¸µíÀÌ ¿¹¿Ü°¡ ¹ß»ýÇÏ´Â »óȲ¿¡¼µµ close()¸¦ ¼öÇàÇÒ ¼ö ÀÖµµ·Ï ÇØ¾ß ÇÕ´Ï´Ù. try { ... } finally { } ºí·ÏÀº ¿¹¿Ü ¹ß»ý ½Ã¿¡µµ close() ½ÇÇàÀ» º¸ÀåÇØÁÖ´Â ¹æ¹ýÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
¿Ï¼ºµÈ ¼Ò½º ÄÚµå´Â ´ÙÀ½°ú °°½À´Ï´Ù.
import java.io.*;
class FileCopy {
public static void main(String args[]) {
if (args.length < 2) {
System.out.println("»ç¿ë¹ý : java FileCopy ¿øõÆÄÀÏ ¸ñÀûÆÄÀÏ");
System.exit(1);
}
if (args[0].equals(args[1])) {
System.out.println("¿¡·¯ : ¿øõÆÄÀÏ°ú ¸ñÀûÆÄÀÏÀÌ °°½À´Ï´Ù.");
System.exit(1);
}
BufferedInputStream in = null; // ³Î °ªÀ¸·Î ÃʱâÈ
try {
in = new BufferedInputStream(
new FileInputStream(args[0]), // args[0]´Â ¿øõ ÆÄÀÏ À̸§
1024); // ¹öÆÛ Å©±â
}
catch (FileNotFoundException fnfe) {
System.err.println("¿¡·¯ : "+args[0]+" ÆÄÀÏÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù.");
System.exit(1);
}
catch (Exception e) {
System.err.println("¿¡·¯ : "+e.toString());
System.exit(1);
}
BufferedOutputStream out = null; // ³Î °ªÀ¸·Î ÃʱâÈ
try {
out = new BufferedOutputStream(
new FileOutputStream(args[1]), // args[1]Àº ¸ñÀû ÆÄÀÏ À̸§
1024); // ¹öÆÛ Å©±â
}
catch (IOException ie) {
System.err.println("¿¡·¯ : "+args[1]+" ÆÄÀÏÀ» ¸¸µé ¼ö ¾ø½À´Ï´Ù.");
System.exit(1);
}
catch (Exception e) {
System.err.println("¿¡·¯ : "+e.getMessage());
System.exit(1);
}
// º¹»çÇϱâ
byte buffer[] = new byte[1024]; // ¹öÆÛ ÇÒ´ç
int nWrote=0;
System.out.println(args[0]+" ÆÄÀÏÀ» "+args[1]+" ÆÄÀÏ·Î º¹»çÇÏ°í ÀÖ½À´Ï´Ù.");
try {
int nRead=0;
while ((nRead=in.read(buffer, 0, 1024))>=0) {
out.write(buffer, 0, nRead);
nWrote+=nRead;
System.out.print("*"); // º¹»ç ÁßÀÓÀ» Ç¥½Ã
}
System.out.println();
System.out.println(args[1]+" ÆÄÀÏ¿¡ "+nWrote+" ¹ÙÀÌÆ®¸¦ ½è½À´Ï´Ù.");
} catch (IOException ie) {
System.err.println("\n¿¡·¯ : "+ie.getMessage());
}
finally {
try { in.close(); } catch (IOException ie) { }
try { out.close(); } catch (IOException ie) { }
}
}
}
<¿¹Á¦> ÀÔÃâ·Â ½ºÆ®¸²À» »ç¿ëÇÑ ÆÄÀÏ º¹»ç ÇÁ·Î±×·¥
´ÙÀ½Àº ½ÇÇàÇÑ ¿¹ÀÔ´Ï´Ù.
E:\HNC\WORK\maso4>java FileCopy c:\windows\telnet.exe telnet.exe
c:\windows\telnet.exe ÆÄÀÏÀ» telnet.exe ÆÄÀÏ·Î º¹»çÇÏ°í ÀÖ½À´Ï´Ù.
******************************************************************
telnet.exe ÆÄÀÏ¿¡ 66672 ¹ÙÀÌÆ®¸¦ ½è½À´Ï´Ù.
1.3 ¹ÙÀÌÆ® ½ºÆ®¸²°ú ¹®ÀÚ ½ºÆ®¸²
InputStream Ŭ·¡½º¿Í OutputStream Ŭ·¡½º¸¦ »ó¼ÓÇÏ´Â ÀÔÃâ·Â ½ºÆ®¸²Àº ¹ÙÀÌÆ® ´ÜÀ§ÀÇ ½ºÆ®¸²À» »ç¿ëÇÕ´Ï´Ù. ÇÏÁö¸¸ ÀÚ¹Ù¿¡¼´Â ¹®ÀÚ¸¦ 16ºñÆ® ´ÜÀ§ÀÇ À¯´ÏÄÚµå·Î Ç¥ÇöÇÕ´Ï´Ù. µû¶ó¼ ¹ÙÀÌÆ® ´ÜÀ§¸¦ ÅëÇØ ÀÔÃâ·ÂµÈ ½ºÆ®¸²À¸·Î ÀÚ¹ÙÀÇ ¹®ÀÚ¿À» Ç¥ÇöÇÏ·Á¸é ¹®ÀÚ ÀÎÄÚµù¿¡ µû¶ó ¹®ÀÚ¿À» ¹ÙÀÌÆ® ¹è¿·Î º¯È¯ÇÏ¿© Àü¼ÛÇÑ ´ÙÀ½, Àü¼ÛµÈ ¹ÙÀÌÆ® ¹è¿À» ¿ø·¡ÀÇ ¹®ÀÚ¿·Î ´Ù½Ã º¯È¯ÇÏ´Â °úÁ¤À» °ÅÃÄ¾ß ÇÕ´Ï´Ù. ÀÚ¹Ù´Â ÀÌ·¯ÇÑ ºÒÆíÀ» ÇØ°áÇÏ°í º¸´Ù È¿À²ÀûÀ¸·Î ¹®ÀÚ¿À» ½ºÆ®¸²À» ÅëÇÏ¿© ÀÐ°í ¾µ ¼ö ÀÖµµ·Ï À¯´ÏÄÚµå ¹®ÀÚ¸¦ »ç¿ëÇÏ´Â ¹®ÀÚ ÀÔÃâ·Â ½ºÆ®¸² Ŭ·¡½º¸¦ Á¦°øÇÕ´Ï´Ù.
¹ÙÀÌÆ® ÀÔÃâ·Â ½ºÆ®¸²ÀÌ InputStream Ŭ·¡½º¿Í OutputStream Ŭ·¡½ºÀÇ ÀÚ½Ä Å¬·¡½ºµéÀ̵íÀÌ, ¹®ÀÚ ÀÔÃâ·Â ½ºÆ®¸² Ŭ·¡½º´Â ÀÔ·ÂÀ» ´ã´çÇÏ´Â Reader Ŭ·¡½º¿Í Ãâ·ÂÀ» ´ã´çÇÏ´Â Writer Ŭ·¡½º¸¦ »ó¼ÓÇÏ´Â ÀÚ½Ä Å¬·¡½ºµéÀ̸ç, °¢ ¹ÙÀÌÆ® ÀÔÃâ·Â ½ºÆ®¸² Ŭ·¡½º¿¡´Â ´ëÀÀµÇ´Â ¹®ÀÚ ÀÔÃâ·Â ½ºÆ®¸² Ŭ·¡½ºµéÀÌ Á¦°øµË´Ï´Ù.
´ÙÀ½Àº ¹ÙÀÌÆ® ½ºÆ®¸²°ú ¹®ÀÚ ½ºÆ®¸² Ŭ·¡½ºµéÀ» ´ëÀÀ½ÃŲ Ç¥ÀÔ´Ï´Ù.
¹ÙÀÌÆ® ÀÔ·Â ½ºÆ®¸² Ŭ·¡½º |
¹®ÀÚ ÀÔ·Â ½ºÆ®¸² Ŭ·¡½º |
InputStream |
Reader |
ByteArrayInputStream |
CharArrayReader |
FileInputStream |
FileReader |
FilterInputStream |
FilterReader |
BufferedInputStream |
BufferedReader |
DataInputStream |
¡¿ |
PushbackInputStream |
PushbackReader |
ObjectInputStream |
¡¿ |
PipedInputStream |
PipedReader |
SequenceInputStream |
¡¿ |
¡¿ |
LineNumberReader (¹®ÀÚ¿À» ÇÑ ÁÙ¾¿ ÀоîµéÀ̴ Ŭ·¡½º) |
¡¿ |
InputStreamReader (¹ÙÀÌÆ® ÀÔ·Â ½ºÆ®¸²À» ¹®ÀÚ ÀÔ·Â ½ºÆ®¸²À¸·Î º¯È¯Çϴ Ŭ·¡½º) |
¹ÙÀÌÆ® Ãâ·Â ½ºÆ®¸² Ŭ·¡½º |
¹®ÀÚ Ãâ·Â ½ºÆ®¸² Ŭ·¡½º |
OutputStream |
Writer |
ByteArrayOutputStream |
CharArrayWriter |
FileOutputStream |
FileWriter |
FilterOutputStream |
FilterWriter |
BufferedOutputStream |
BufferedWriter |
DataOutputStream |
¡¿ |
PrintStream |
PrintWriter |
ObjectOutputStream |
¡¿ |
PipedOutputStream |
PipedWriter |
¡¿ |
StringWriter (StringÀ¸·Î Ãâ·ÂÇÏ´Â Ãâ·Â ½ºÆ®¸² Ŭ·¡½º) |
¡¿ |
OutputStreamWriter (¹®ÀÚ Ãâ·Â ½ºÆ®¸²ÀÇ ¹®ÀÚ µ¥ÀÌÅ͵éÀ» ÀÎÄÚµù¿¡ ¸Â°Ô ¹ÙÀÌÆ® µ¥ÀÌÅÍ·Î º¯È¯ÇÏ¿© ¹ÙÀÌÆ® Ãâ·Â ½ºÆ®¸²À¸·Î ³»º¸³»´Â Ŭ·¡½º) |
InputStreamReader Ŭ·¡½º¿Í OutputStreamWriter Ŭ·¡½º´Â ¹ÙÀÌÆ® ÀÔÃâ·Â ½ºÆ®¸²°ú ¹®ÀÚ ÀÔÃâ·Â ½ºÆ®¸²À» »óÈ£ º¯È¯Çϴ Ưº°ÇÑ Å¬·¡½ºÀÔ´Ï´Ù. InputStreamReader Ŭ·¡½º´Â ¹ÙÀÌÆ® ÀÔ·Â ½ºÆ®¸²À¸·ÎºÎÅÍ ¹ÙÀÌÆ® µ¥ÀÌÅ͸¦ Àоîµé¿© ÁöÁ¤ÇÑ ÀÎÄÚµù¿¡ µû¶ó ¹®ÀÚµé·Î º¯È¯ÇÏ´Â ¹®ÀÚ ÀÔ·Â ½ºÆ®¸²À̸ç, ¸¶Âù°¡Áö·Î OutputStreamWriter Ŭ·¡½º´Â ¹®ÀÚµéÀ» ÁöÁ¤ÇÑ ÀÎÄÚµù¿¡ µû¶ó ¹ÙÀÌÆ®·Î º¯È¯ÇÏ¿© ÁöÁ¤µÈ ¹ÙÀÌÆ® Ãâ·Â ½ºÆ®¸²À¸·Î ³»º¸³»´Â ¿ªÇÒÀ» Çϴ Ŭ·¡½ºÀÔ´Ï´Ù.
¹®ÀÚ ÀÎÄÚµù ÀÚ¹Ù´Â ¹®ÀÚ¸¦ ³»ºÎÀûÀ¸·Î À¯´ÏÄÚµå·Î ó¸®Çϸç, ÀÚ¹ÙÀÇ ¹®ÀÚ Çϳª°¡ Â÷ÁöÇÏ´Â Å©±â´Â 16ºñÆ®ÀÔ´Ï´Ù. ÇÏÁö¸¸ ÀÏ»óÀûÀ¸·Î ¿ì¸®°¡ Á¢ÇÏ´Â ÅؽºÆ® ÆÄÀϵéÀº À¯´ÏÄڵ忡 µû¶ó ¸¸µé¾îÁöÁö ¾Ê¾Ò½À´Ï´Ù. ´ëºÎºÐÀÇ ¿î¿µ üÁ¦°¡ ¾ÆÁ÷ À¯´ÏÄڵ带 Á¦´ë·Î Áö¿øÇÏÁö ¾Ê±â ¶§¹®¿¡ ¿î¿µ üÁ¦¿Í ¼ÒÇÁÆ®¿þ¾î¿¡ µû¶ó ¿©·¯ °¡Áö ´Ù¸¥ ÀÎÄÚµùÀ¸·Î ÇѱÛÀ» Ç¥ÇöÇÕ´Ï´Ù. ÀÚ¹Ù¿¡¼ Áö¿øÇÏ´Â ÇÑ±Û ÀÎÄÚµùÀº Cp933, MS949(ȤÀº Cp949), EUC_KR, ISO2022KR µîÀÔ´Ï´Ù. ÀÌ Áß °¡Àå ÀϹÝÀûÀ¸·Î »ç¿ëµÇ´Â °ÍÀº ´ëºÎºÐÀÇ ÇѱÛÈµÈ ¿î¿µ üÁ¦¿¡¼ ÀÚ¹ÙÀÇ ±âº» ÀÎÄÚµùÀ¸·Î ó¸®ÇÒ EUC_KR ÀÎÄÚµùÀÔ´Ï´Ù. EUC_KR ÀÎÄÚµùÀº KSC5601·Î Ç¥ÇöµÇ±âµµ ÇÕ´Ï´Ù. ´ëºÎºÐÀÇ ÇÑ±Û ÅؽºÆ®´Â EUC_KR ÀÎÄÚµù¿¡ µû¶ó ¸¸µé¾îÁö¸ç ÈçÈ÷ ¿Ï¼ºÇü ÇÑ±Û ÄÚµå¶ó°í ºÎ¸¥´Ù. À©µµ¿ì 95/98, À©µµ¿ì NT µîÀÇ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® À©µµ¿ì ½Ã½ºÅÛÀº ¿Ï¼ºÇü ÇÑ±Û Äڵ忡 Á»´õ ¸¹Àº ÇѱÛÀ» Ç¥ÇöÇÒ ¼ö ÀÖµµ·Ï ÇÑ±Û Äڵ带 Ãß°¡ÇÑ ÅëÇÕ ¿Ï¼ºÇüÀ» Áö¿øÇϴµ¥ ÀÌ ÄÚµå ÀÎÄÚµùÀ» MS949 ȤÀº Cp949¶ó°í ÇÕ´Ï´Ù. MS949 ÀÎÄÚµùÀº ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® ÇÑ±Û À©µµ¿ì 95 ÀÌÈÄ ¹öÀü¿¡¼¸¸ Á¦´ë·Î ÀÐÀ» ¼ö ÀÖÀ¸¹Ç·Î ÁÖÀÇÇØ¾ß ÇÕ´Ï´Ù. ÇÑ±Û À©µµ¿ì NT 4.0 ÀÌÈÄ ¹öÀüºÎÅÍ´Â ³»ºÎÀûÀ¸·Î À¯´ÏÄÚµå 2.0À» Áö¿øÇÑ´Ù°í ÇÕ´Ï´Ù. ¹®ÀÚ ÀÎÄÚµùÀÌ Áß¿äÇÑ ÀÌÀ¯´Â À¯´ÏÄڵ尡 ¾Æ´Ñ ´Ù¸¥ ÀÎÄÚµùÀ¸·Î µÈ ÅؽºÆ® ¹®¼¸¦ Àоîµé¿© Á¦´ë·Î Ç¥ÇöÇÏ·Á¸é ÀÚ¹Ù¿¡¼´Â À¯´ÏÄÚµå·Î º¯È¯À» ÇØ¾ß ÇÏ°í, ¶Ç ȸ鿡 º¸¿©ÁÙ ¶§¿¡´Â °¢ ¿î¿µ üÁ¦ÀÇ ±Û²ÃÀ» »ç¿ëÇÏ¿© º¸¿©Áà¾ß ÇϹǷΠ(°¢ ¿î¿µÃ¼Á¦ÀÇ ±Û²ÃµéÀº ¿î¿µ üÁ¦ÀÇ ÀÎÄÚµù¿¡ ¸Â°Ô ¼³°èµË´Ï´Ù) ½Ã½ºÅÛ¿¡ °íÀ¯ÇÑ ÀÎÄÚµùÀ¸·Î º¯È¯ÇÒ ÇÊ¿ä°¡ Àֱ⠶§¹®ÀÔ´Ï´Ù. ´ÙÀ½ ¿¹Á¦´Â ÇöÀç ½Ã½ºÅÛ¿¡¼ »ç¿ëµÇ´Â ÀÚ¹ÙÀÇ ±âº» ÀÎÄÚµùÀ» º¸¿©ÁÖ´Â °£´ÜÇÑ ¿¹Á¦ÀÔ´Ï´Ù.
<¿¹Á¦ 4> ±âº» ÀÎÄÚµùÀ» º¸¿©ÁÖ´Â ¿¹Á¦
JDK 1.2ÀÇ °æ¿ì ÇÑ±Û À©µµ¿ì 95/98¿¡¼ ÀÌ ÇÁ·Î±×·¥À» ½ÇÇàÇϸé MS949°¡ ±âº» ÀÎÄÚµùÀ¸·Î Ãâ·ÂµË´Ï´Ù. |
1.4 ¹®ÀÚ ÀÔÃâ·Â ½ºÆ®¸²À» »ç¿ëÇÑ ÅؽºÆ® ÆÄÀÏ º¹»ç
ÅؽºÆ® ÆÄÀÏÀ» º¹»çÇÒ ¶§¿¡µµ ¹°·Ð ¾ÕÀÇ ¹ÙÀÌÆ® ½ºÆ®¸² º¹»ç¸¦ »ç¿ëÇصµ ¾Æ¹«·± ¹®Á¦°¡ ¾øÀ» °ÍÀÔ´Ï´Ù. ÇÏÁö¸¸, ÅؽºÆ® ÆÄÀÏÀÇ ³»¿ëÀ» ȸ鿡 º¸¿©ÁÖ°íÀÚ ÇÒ °æ¿ì¿¡´Â ¹ÙÀÌÆ® ÀÔÃâ·Â ½ºÆ®¸²À¸·Î´Â °ï¶õÇÕ´Ï´Ù. ÀüÇüÀûÀÎ ¹®ÀÚ ÀÔÃâ·Â ½ºÆ®¸² »ç¿ë¹ýÀ» ÅؽºÆ® º¹»ç ÇÁ·Î±×·¥À» ÅëÇØ ¾Ë¾Æº¸µµ·Ï ÇսôÙ.
¸ÕÀú ¿øõ ÆÄÀϷκÎÅÍ BufferedReader °´Ã¼¸¦ ¸¸µå´Â °ÍÀº BufferedInputStream °´Ã¼¸¦ ¸¸µå´Â °Í°ú °ÅÀÇ °°½À´Ï´Ù. ´Ù¸¸ InputStreamÀ» Reader·Î ¹Ù²Ù¾ú´Ù´Â Á¡¸¸ ´Ù¸¨´Ï´Ù.
// "source.txt" ÆÄÀϷκÎÅÍ 1024 ¹ÙÀÌÆ® Å©±âÀÇ ¹öÆÛ ÀÔ·Â ¹®ÀÚ ½ºÆ®¸² °´Ã¼ »ý¼º
in = new BufferedReader(new FileReader("source.txt"), 1024);
¸ñÀû ÆÄÀÏ¿¡ ¾µ Ãâ·Â ½ºÆ®¸²À¸·Î BufferedWriter °´Ã¼¸¦ ¸¸µå´Â °Íµµ BufferedOutputStream °´Ã¼¸¦ ¸¸µå´Â ¹æ¹ý°ú °ÅÀÇ °°Áö¸¸, ¿©±â¿¡¼´Â Á»´õ Æí¸®ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Â PrintWriter °´Ã¼¸¦ ¸¸µé¾îº¾´Ï´Ù.
// ÀÚµ¿ Ç÷¯½Ã ¹æ½ÄÀ¸·Î "destine.txt" ÆÄÀÏ·Î ¾²´Â PrintWriter °´Ã¼ »ý¼º
out = new PrintWriter(new FileWriter("destine.txt"), true);
PrintWriter Ŭ·¡½º »ý¼ºÀÚÀÇ µÎ ¹ø° ÀÎÀÚ´Â println() ¸Þ¼Òµå¸¦ »ç¿ëÇÒ °æ¿ì ÀÚµ¿À¸·Î ¹öÆÛ¸¦ Ç÷¯½ÃÇÒ °ÍÀÎÁö¸¦ °áÁ¤ÇÕ´Ï´Ù. ½ÇÁ¦ ÅؽºÆ® ÆÄÀÏÀ» º¹»çÇÒ ¶§¿¡´Â ¿øõ ÅؽºÆ® ÆÄÀÏÀÇ ³»¿ëÀ» ÇÑ ÁÙ¾¿ Àоîµé¿© ¸ñÀû ÆÄÀÏ·Î ¾²´Â ¹æ½ÄÀ» »ç¿ëÇÕ´Ï´Ù.
try {
String line=null;
while ((line=in.readLine())!=null) {
out.println(line);
// println() ¸Þ¼Òµå´Â IOExceptionÀ» ´øÁöÁö ¾ÊÀ¸¹Ç·Î »ç¿ëÇÑ ´ÙÀ½¿¡´Â
// ¼öÇà µµÁß¿¡ ¿¡·¯°¡ ¹ß»ýÇÏÁö ¾Ê¾Ò´ÂÁö ¹Ýµå½Ã checkError() ¸Þ¼Òµå¸¦
// »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù.
if (out.checkError())
throw new IOException("ÆÄÀÏ ¾²±â ¿¡·¯ÀÔ´Ï´Ù.");
}
} catch (IOException ie) {
System.err.println("\n¿¡·¯ : "+ie.getMessage());
}
finally {
try { in.close(); } catch (IOException ie) { }
// PrintWriter´Â close()¿¡µµ ¿¹¿Ü¸¦ ´øÁöÁö ¾Ê´Â´Ù.
out.close();
}
Àüü ¼Ò½º ÄÚµå´Â ´ÙÀ½°ú °°½À´Ï´Ù.
import java.io.*;
class TextCopy {
public static void main(String args[]) {
if (args.length < 2) {
System.out.println("»ç¿ë¹ý : java TextCopy ¿øõÆÄÀÏ ¸ñÀûÆÄÀÏ");
System.exit(1);
}
if (args[0].equals(args[1])) {
System.out.println("¿¡·¯ : ¿øõÆÄÀÏ°ú ¸ñÀûÆÄÀÏÀÌ °°½À´Ï´Ù.");
System.exit(1);
}
BufferedReader in = null; // ³Î °ªÀ¸·Î ÃʱâÈ
try {
in = new BufferedReader(
new FileReader(args[0]), // args[0]°¡ ¿øõ ÅؽºÆ® ÆÄÀÏ À̸§
1024); // ¹öÆÛ Å©±â
}
catch (FileNotFoundException fnfe) {
System.err.println("¿¡·¯ : "+args[0]+" ÆÄÀÏÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù.");
System.exit(1);
}
catch (Exception e) {
System.err.println("¿¡·¯ : "+e.getMessage());
System.exit(1);
}
PrintWriter out = null; // ³Î °ªÀ¸·Î ÃʱâÈ
try {
out = new PrintWriter(
new FileWriter(args[1]), // args[1]Àº ¸ñÀû ÅؽºÆ® ÆÄÀÏ À̸§
true); // ÀÚµ¿ Ç÷¯½Ã ¸ðµå
}
catch (IOException ie) {
System.err.println("¿¡·¯ : "+args[1]+" ÆÄÀÏÀ» ¸¸µé ¼ö ¾ø½À´Ï´Ù.");
System.exit(1);
}
catch (Exception e) {
System.err.println("¿¡·¯ : "+e.toString());
System.exit(1);
}
// º¹»çÇϱâ
int nWrote=0;
System.out.println(args[0]+" ÆÄÀÏÀ» "+args[1]+" ÆÄÀÏ·Î º¹»çÇÏ°í ÀÖ½À´Ï´Ù.");
try {
String line=null;
while ((line=in.readLine())!=null) {
out.println(line);
// println() ¸Þ¼Òµå´Â IOExceptionÀ» ´øÁöÁö ¾ÊÀ¸¹Ç·Î »ç¿ëÇÑ ´ÙÀ½¿¡´Â
// ¼öÇà µµÁß¿¡ ¿¡·¯°¡ ¹ß»ýÇÏÁö ¾Ê¾Ò´ÂÁö ¹Ýµå½Ã checkError()
// ¸Þ¼Òµå¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù.
if (out.checkError())
throw new IOException("ÆÄÀÏ ¾²±â ¿¡·¯ÀÔ´Ï´Ù.");
nWrote+=line.length()+1;
System.out.println(line); // Ç¥ÁØ Ãâ·ÂÀ¸·Î ÆÄÀÏ ³»¿ë Ãâ·Â
}
System.out.println();
System.out.println(args[1]+" ÆÄÀÏ¿¡ "+nWrote+" ¹®ÀÚ¸¦ ½è½À´Ï´Ù.");
} catch (IOException ie) {
System.err.println("\n¿¡·¯ : "+ie.getMessage());
}
finally {
try { in.close(); } catch (IOException ie) { }
// PrintWriter´Â close()¿¡¼µµ ¿¹¿Ü¸¦ ´øÁöÁö ¾Ê´Â´Ù.
out.close();
}
}
}
<¿¹Á¦> ÅؽºÆ® ÆÄÀÏ º¹»ç ÇÁ·Î±×·¥
Ç¥ÁØ ÀÔÃâ·Â ½ºÆ®¸² »ç¿ëÇϱâ ÀÚ¹Ù¿¡¼´Â Ç¥ÁØ ÀÔÃâ·Â ½ºÆ®¸²À» System Ŭ·¡½ºÀÇ in, out, err ¼¼ °³ÀÇ Á¤Àû »ó¼ö Çʵ带 »ç¿ëÇÏ¿© Á¦¾îÇϵµ·Ï ÇÕ´Ï´Ù. System.inÀº Ç¥ÁØ ÀԷ¿¡ ÇØ´çÇÏ´Â InputStream °´Ã¼À̸ç, System.out°ú System.err´Â Ç¥ÁØ Ãâ·Â°ú Ç¥ÁØ ¿¡·¯¸¦ °¢°¢ ³ªÅ¸³»´Â PrintStream °´Ã¼ÀÔ´Ï´Ù. HelloWorld ÇÁ·Î±×·¥À» ¸¸µé ¶§ºÎÅÍ »ç¿ëÇØ¿À´ø System.out.println("Hello, world."); ´Â Ç¥ÁØ Ãâ·Â ½ºÆ®¸²À» ³ªÅ¸³»´Â System.out °´Ã¼ÀÇ println() ¸Þ¼Òµå¸¦ È£ÃâÇÏ´Â °ÍÀÔ´Ï´Ù. ´ÙÀ½Àº °£´ÜÇÏ°Ô Ç¥ÁØ ÀÔ·Â(Å°º¸µå)À¸·ÎºÎÅÍ ÀÔ·ÂÀ» ¹Þ¾Æ Ç¥ÁØ Ãâ·Â(¸ð´ÏÅÍ)À¸·Î ´Ù½Ã Ãâ·ÂÇÏ´Â ¿¡ÄÚ ÇÁ·Î±×·¥ÀÔ´Ï´Ù.
<¿¹Á¦> Ç¥ÁØ ÀÔ·ÂÀ» Ç¥ÁØ Ãâ·ÂÀ¸·Î ¿¡ÄÚÇÏ´Â ÇÁ·Î±×·¥
¾ö¹ÐÇÏ°Ô µûÁö¸é System.outÀ¸·Î Ãâ·ÂµÇ´Â String °´Ã¼´Â ÇØ´ç ¿î¿µ üÁ¦ÀÇ ±âº» ÀÎÄÚµù¿¡ µû¶ó ¹ÙÀÌÆ®·Î º¯È¯µÇ¾î Ãâ·ÂµË´Ï´Ù. ±âº» ÀÎÄÚµùÀÌ ÇѱÛÀ» Ç¥½ÃÇÏ´Â EUC_KR ȤÀº MS949·Î ¼³Á¤µÇ¾î ÀÖ´Ù¸é À©µµ¿ì 98/NT µîÀ» Æ÷ÇÔÇÑ ¿î¿µ üÁ¦°¡ ÀÌ ¹ÙÀÌÆ®µéÀÇ ¿¬¼ÓÀ» Çѱ۷ΠÀνÄÇÏ¿© °á°úÀûÀ¸·Î´Â 2¹ÙÀÌÆ® ¹®ÀڷΠ󸮵Ǵ ÇѱÛÀ» Á¦´ë·Î µð½ºÇ÷¹ÀÌÇÒ °ÍÀÔ´Ï´Ù. ÇÏÁö¸¸, Á»´õ Á¤È®ÇÏ°Ô ÇÏÀÚ¸é ¹®ÀÚ¿, Áï String °´Ã¼¸¦ Ãâ·ÂÇÏ°íÀÚ ÇÒ ¶§¿¡´Â Ç¥ÁØÀûÀÎ ¹æ¹ýÀÎ PrintWriter Ŭ·¡½º¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. PrintWriter out = new PrintWriter(System.out, true); À§¿Í °°ÀÌ Ç¥ÁØ Ãâ·ÂÀ» Àμ⠹®ÀÚ ½ºÆ®¸²À¸·Î º¯È¯ÇÏ¿© Ç¥ÁØ Ãâ·ÂÀ¸·Î ³ª°¡´Â ½ºÆ®¸²À» ¹®ÀÚ ½ºÆ®¸²À¸·Î ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. |
2. ³×Æ®¿÷ ÇÁ·Î±×·¡¹Ö
ÀÚ¹Ù´Â ³×Æ®¿÷ ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÔ´Ï´Ù. Àû¾îµµ ±Û·Î¹ú ³×Æ®¿÷ ½Ã´ëÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÓ¿¡´Â ºÐ¸íÇÕ´Ï´Ù.
ÀÎÅͳÝÀ» ¹è°æÀ¸·Î ž°í ÀÎÅͳݰú ºÐ»ê ȯ°æÀ» À§ÇÑ µ¶Æ¯ÇÑ ÇÁ·Î±×·¥ ½ÇÇà ÇüÅÂÀÎ ¾ÖÇø´À» Áö¿øÇÏ´Â °ÍÀ» ºÁµµ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ¾ÖÇø´À̶ó´Â ÇÁ·Î±×·¥Àº À¥ ºê¶ó¿ìÀú¶ó´Â ½ÇÇà ȯ°æÀÌ ÀÎÅͳÝÀ» ÅëÇؼ ÇÁ·Î±×·¥ ½ÇÇà Äڵ尡 ´Ù¿î·ÎµåÇÏ¿© ½ÇÇàÇϹǷΠ±× ÀÚü°¡ ³×Æ®¿÷ ÇÁ·Î±×·¥ÀÌ¸ç ³×Æ®¿÷À» »ç¿ëÇÏ¿© ¾ÖÇø´ÀÌ ÇÊ¿äÇÑ ¸®¼Ò½º¸¦ ±¸Çϱ⵵ ÇÏ¿´½À´Ï´Ù. ¹°·Ð ÇÁ·Î±×·¡¸Ó´Â ÀÌ°ÍÀÌ ³×Æ®¿÷ ±â´ÉÀ» »ç¿ëÇÏ°í ÀÖ´Ù´Â º°´Ù¸¥ ÀÚ°¢ ¾øÀÌ, Àڽŵµ ¸ð¸£°Ô ¾ÖÇø´À̶ó´Â º¹ÀâÇÑ ³×Æ®¿÷ ÇÁ·Î±×·¥À» ¸¸µé¾î¿Ô½À´Ï´Ù. ÀÌ°ÍÀº ÀÚ¹Ù°¡ ³×Æ®¿÷¿¡ ´ëÇÑ ¿©·¯ °¡Áö ±â´ÉÀ» ±âº»ÀûÀ¸·Î Áö¿øÇÏ°í ÀÖÀ¸¸ç, ¾ÖÇø´Àº ÀÌ·¯ÇÑ ³×Æ®¿÷ Áö¿ø ±â´É À§¿¡ ±¸ÇöµÇ¾î ÀÖ´Â ÇÁ·Î±×·¥À̱⠶§¹®ÀÔ´Ï´Ù. ÀÚ¹Ù ÇÁ·Î±×·¡¸Ó°¡ ÀÌ ¾ÖÇø´(Applet Ŭ·¡½º)À» ´Ü¼øÈ÷ Ŭ·¡½º »ó¼ÓÇÏ¿© ¸î °¡Áö ¸Þ¼Òµå¸¸ ±¸ÇöÇØÁÖ¸é ÈǸ¢ÇÏ°Ô ÀÎÅͳÝÀ» °¡·ÎÁú·¯ ½ÇÇàµÇ´Â ÇÁ·Î±×·¥ÀÌ µÇ°ï ÇÕ´Ï´Ù.
¿©±â¿¡¼´Â ÀÌ ¾ÖÇø´µéÀÌ ¹è°æÀ¸·Î »ï°í ÀÖ´Â ±â¹Ý ³×Æ®¿÷ ±â´ÉÀÎ ÀÚ¹ÙÀÇ TCP/IP Áö¿ø ±â´É(¼ÒÄÏ)°ú TCP/IP¿¡ ±â¹ÝÇÑ Àü¼Û ÇÁ·ÎÅäÄÝÀÎ HTTP, FTP µîÀ» ¾Ë¾Æº¾´Ï´Ù.
2.1 URL ÇÁ·Î±×·¡¹Ö
URLÀº Uniform Resource LocatorÀÇ ¸Ó¸®±ÛÀÚ·Î ÀÎÅÍ³Ý »óÀÇ ¾î¶² ¸®¼Ò½ºÀÇ À§Ä¡¸¦ ³ªÅ¸³»´Â ÀÏÁ¾ÀÇ ÁÖ¼Ò Ç¥±âÀÔ´Ï´Ù. URLÀº ±âº»ÀûÀ¸·Î ÀÎÅÍ³Ý ÇÁ·ÎÅäÄÝ°ú ¼ºñ½º¸¦ Á¦°øÇÏ´Â ¼¹ö ÁÖ¼Ò, ±×¸®°í ¼¹ö ¾È¿¡¼ÀÇ ¸®¼Ò½º À§Ä¡ µîÀ¸·Î ±¸¼ºµÇ´Âµ¥, ÀÚ¹Ù´Â ÀÌ·¯ÇÑ URL ¹®ÀÚ¿À» ´Ù·ç´Â URL Ŭ·¡½º¸¦ java.net ÆÐÅ°Áö¿¡¼ Á¦°øÇÏ°í ÀÖ½À´Ï´Ù.
<±×¸²> URLÀÇ °¢ ±¸¼º ¿ä¼Òµé
À§ ±×¸²Àº URL ¹®ÀÚ¿ÀÇ °¢ ±¸¼º ¿ä¼ÒµéÀ» º¸¿©ÁÖ´Â ¿¹·Î, URL Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© ´ÙÀ½°ú °°ÀÌ °¢ ±¸¼º¿ä¼Ò¸¦ °¡Á®¿Ã ¼ö ÀÖ½À´Ï´Ù.
// ÁöÁ¤µÈ ¹®ÀÚ¿ÀÇ URLÀ» °¡Áö´Â URL °´Ã¼¸¦ »ý¼º
URL url = new
URL("http://moon.daewoo.co.kr:80/~yoonforh/java/about.html#post");
// ÇÁ·ÎÅäÄÝ À̸§ Ãâ·Â. http°¡ Ãâ·ÂµË´Ï´Ù.
System.out.println("ÇÁ·ÎÅäÄÝ :"+url.getProtocol( ));
// È£½ºÆ® À̸§ Ãâ·Â. moon.daewoo.co.krÀÌ Ãâ·ÂµË´Ï´Ù.
System.out.println("È£½ºÆ® :"+url.getHost( ));
// Æ÷Æ® ¹øÈ£ Ãâ·Â. À§¿¡¼Ã³·³ ':80'À» ³Ö¾î ¸í½ÃÀûÀ¸·Î Æ÷Æ®¸¦ ÁöÁ¤ÇÑ °æ¿ì¿¡¸¸
// Á¦´ë·Î °ªÀ» ¸®ÅÏÇÕ´Ï´Ù. Æ÷Æ® ¹øÈ£¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é -1À» ¸®ÅÏÇÕ´Ï´Ù.
// -1ÀÎ °æ¿ì¿¡´Â °¢ ÇÁ·ÎÅäÄÝÀÌ »ç¿ëÇÏ´Â ±âº» Æ÷Æ®·Î °£ÁÖÇÏ°Ô µË´Ï´Ù.
// http ÇÁ·ÎÅäÄÝÀÇ °æ¿ì¿¡´Â 80, ftp ÇÁ·ÎÅäÄÝÀº 23ÀÌ ±âº» Æ÷Æ® ¹øÈ£ÀÔ´Ï´Ù.
System.out.println("Æ÷Æ® ¹øÈ£ :"+url.getPort( ));
// ¸®¼Ò½º À§Ä¡ Ãâ·Â. /~yoonforh/java/about.htmlÀÌ Ãâ·ÂµË´Ï´Ù.
System.out.println("ÆÄÀÏ À̸§ :"+url.getFile( ));
// ¹®¼ ³»¿¡¼ÀÇ ÂüÁ¶ À§Ä¡ Ãâ·Â. post°¡ Ãâ·ÂµË´Ï´Ù.
System.out.println("ÂüÁ¶ :"+url.getRef());
ÀÚ¹Ù´Â ÀÎÅÍ³Ý ÇÁ·ÎÅäÄÝ Áß http ÇÁ·ÎÅäÄÝ(ÇÏÀÌÆÛÅؽºÆ® Àü¼Û ÇÁ·ÎÅäÄÝ, ¿ùµå¿ÍÀ̵åÀ¥¿¡¼ »ç¿ëÇÏ´Â ÇÁ·ÎÅäÄÝ)°ú ftp ÇÁ·ÎÅäÄÝ(ÆÄÀÏ Àü¼Û ÇÁ·ÎÅäÄÝ)À» ±âº» Áö¿øÇÕ´Ï´Ù. µû¶ó¼ http ÇÁ·ÎÅäÄÝÀ̳ª ftp ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ¿© ÀÔÃâ·Â ½ºÆ®¸²À» ¿°í ´Ý´Â °ÍÀº ¾ÆÁÖ ½±½À´Ï´Ù. URL °´Ã¼·ÎºÎÅÍ ÀÔÃâ·Â ½ºÆ®¸²À» ¸¸µé ¶§¿¡´Â URLConnection Ŭ·¡½º¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
URLConnection Ŭ·¡½º´Â ÁöÁ¤µÈ URL·Î Á÷Á¢ ¿¬°áÀ» ¼³Á¤ÇÏ¿© ÀÔÃâ·Â ½ºÆ®¸²À» ¸¸µé ¼ö ÀÖ´Â ¸Þ¼ÒµåµéÀ» Á¦°øÇÕ´Ï´Ù. URL °´Ã¼·ÎºÎÅÍ URL ¿¬°áÀ» °ü¸®ÇÏ´Â URLConnection °´Ã¼¸¦ ±¸ÇÏ·Á¸é openConnection( ) ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¸é µË´Ï´Ù.
try {
// URL °´Ã¼·ÎºÎÅÍ URL ¿¬°á °ü¸® °´Ã¼ ÀνºÅϽº »ý¼º
URLConnection connection = url.openConnection();
// URL ¿¬°á °ü¸® °´Ã¼·ÎºÎÅÍ ÀÔ·Â ½ºÆ®¸² »ý¼º
InputStream in = connection.getInputStream();
// URL ¿¬°á °ü¸® °´Ã¼·ÎºÎÅÍ Ãâ·Â ½ºÆ®¸² »ý¼º
OutputStream out = connectioin.getOutputStream();
} catch (IOException ie) {
// ¿¹¿Ü ó¸®
}
´ÙÀ½ ¿¹Á¦´Â URL Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© http ÇÁ·ÎÅäÄÝ È¤Àº ftp ÇÁ·ÎÅäÄÝÀ» ÅëÇØ Á¢±ÙÇÒ ¼ö ÀÖ´Â ÆÄÀÏ ¸®¼Ò½º¸¦ ´Ù¿î·ÎµåÇÏ´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù. URL Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© ÀÔÃâ·Â ¹ÙÀÌÆ® ½ºÆ®¸²À» ¿¾ú´Ù´Â Á¡À» Á¦¿ÜÇÏ¸é ¾Õ¿¡¼ ´Ù·é ÆÄÀÏ º¹»ç ÇÁ·Î±×·¥°ú Å©°Ô ´Ù¸¦ °ÍÀÌ ¾ø½À´Ï´Ù. ÇÏÁö¸¸, ÀÌ ÇÁ·Î±×·¥Àº °¡²û À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ¿©·¯ °³ÀÇ ÆÄÀÏÀ» ¹èÄ¡ ÀÛ¾÷À¸·Î http ȤÀº ftp ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ¿© ´Ù¿î·ÎµåÇÏ°íÀÚ ÇÒ ¶§ ÀÌ ÇÁ·Î±×·¥À» »ç¿ëÇÏ¸é °£´ÜÇÏ°Ô ¹èÄ¡ ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.
import java.net.*;
import java.io.*;
class URLDownload {
public static void main(String args[]) {
if (args.length<1) {
System.out.println("Usage : java URLDownload URL");
System.out.println("Ex : java URLDownload "
+"http://moon.daewoo.co.kr/~yoonforh/new.gif");
System.exit(1);
}
// ¹öÆÛ ÀÔÃâ·Â ½ºÆ®¸²ÀÇ ÃʱⰪÀ» ³Î·Î ÇÑ´Ù.
BufferedInputStream in = null;
BufferedOutputStream out = null;
try {
URL url = new URL(args[0]); // URL °´Ã¼ »ý¼º
// URLÀÇ ¸®¼Ò½º ÁÖ¼Ò¿¡¼ ÆÄÀÏ À̸§¸¸ ÃßÃâÇÑ´Ù.
String filename=url.getFile().substring(url.getFile().lastIndexOf('/')+1);
// ÁöÁ¤µÈ URL·ÎºÎÅÍ ÀÔ·Â ½ºÆ®¸²À» ¿¬´Ù.
in = new BufferedInputStream(url.openStream(), 1024);
out = new BufferedOutputStream(
new FileOutputStream(filename));
byte[] buffer=new byte[1024];
int nRead=0, nWrote=0;
System.out.println(filename+" ÆÄÀÏÀ» ´Ù¿î·ÎµåÇÏ°í ÀÖ½À´Ï´Ù.");
// ÀÔ·ÂÀÌ -1ÀÏ(have no data to read) ¶§±îÁö °è¼ÓÇؼ ÀÐ¾î¼ ÆÄÀÏ·Î ¾´´Ù.
while ((nRead = in.read(buffer, 0, 1024)) >= 0) {
out.write(buffer, 0, nRead);
nWrote+=nRead;
System.out.print("#"); // ÆÄÀÏ ´Ù¿î·Îµå ÁßÀÓÀ» Ç¥½Ã
}
System.out.println();
System.out.println(filename+" ÆÄÀÏ¿¡ "+nWrote+" ¹ÙÀÌÆ®¸¦ ½è½À´Ï´Ù.");
} catch (MalformedURLException mue) {
System.out.println("MalformedURLException: " + mue.getMessage());
} catch (IOException ie) {
System.out.println("IOException: " + ie.getMessage());
}
finally {
try { in.close(); } catch (IOException ie) { }
try { out.close(); } catch (IOException ie) { }
}
}
}
<¿¹Á¦> URL¿¡ ÁöÁ¤µÈ http³ª ftp ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ¿© ÆÄÀÏÀ» ´Ù¿î·ÎµåÇÏ´Â ÇÁ·Î±×·¥
2.2 ³×Æ®¿÷ ¼ÒÄÏ
¼ÒÄÏÀº ¿ø·¡ Àü±¸³ª Àü±â Ç÷¯±×¸¦ ²È´Â ±â±¸¸¦ ¶æÇÏ´Â ´Ü¾îÀÔ´Ï´Ù. ±×·¸´Ù¸é ³×Æ®¿÷ ÇÁ·Î±×·¡¹Ö¿¡¼ »ç¿ëµÇ´Â ¼ÒÄÏÀº ¾î¶² Àǹ̸¦ °¡Áú±î¿ä? ³×Æ®¿÷¿¡µµ ¹«¾ùÀΰ¡ Ç÷¯±×¿Í ¼ÒÄÏ °°ÀÌ ¿¬°áÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ÀÖ´Ù´Â ¶æÀϱî¿ä?
³×Æ®¿÷À» ÅëÇÏ¿© µÎ °³ÀÇ ÇÁ·Î±×·¥ÀÌ ¼·Î ¿¬°áµÇ·Á¸é ´ÙÀ½ ¿ä¼ÒµéÀÌ °®Ãß¾îÁ®¾ß ÇÕ´Ï´Ù.
¨ç Åë½Å ÇÁ·ÎÅäÄÝ : ¿¬°áµÉ µÎ ÇÁ·Î±×·¥ÀÌ ¼·Î Åë½ÅÇÒ ¶§ »ç¿ëÇÒ ±Ô¾à.
Åë½Å ÇÁ·ÎÅäÄÝ¿¡´Â ¸ÕÀú ¿¬°áÀ» ±¸¼ºÇÑ ´ÙÀ½ µ¥ÀÌÅ͸¦ ÁÖ°í¹Þ´Â ¿¬°áÇü ÇÁ·ÎÅäÄÝ(TCP ÇÁ·ÎÅäÄÝ)°ú ¿¬°áÀ» ±¸¼ºÇÏÁö ¾Ê°í µ¥ÀÌÅ͸¦ ÁÖ°í¹Þ´Â ºñ¿¬°áÇü ÇÁ·ÎÅäÄÝ(UDP ÇÁ·ÎÅäÄÝ)ÀÌ ÀÖ½À´Ï´Ù. ÀÚ¹Ù¿¡¼´Â java.net ÆÐÅ°ÁöÀÇ Socket, ServerSocket Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© ¿¬°áÇü Åë½ÅÀ» Áö¿øÇÏ°í, DatagramSocket Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© ºñ¿¬°áÇü Åë½ÅÀ» Áö¿øÇÕ´Ï´Ù.
¨è,¨é Áö¿ª°ú ¿ø°ÝÁöÀÇ È£½ºÆ® ÁÖ¼Ò : ÇÑÂÊ È£½ºÆ®ÀÇ ³×Æ®¿÷ ÁÖ¼Ò.
È£½ºÆ® ÁÖ¼Ò´Â ¾ÕÀÇ URL¿¡¼ º¸¾ÒµíÀÌ ¸¶Ä§Ç¥(.)·Î ±¸ºÐµÇ´Â ¿©·¯ ´Ü°èÀÇ ¹®ÀÚ¿·Î Ç¥ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. ½ÇÁ¦ ³×Æ®¿÷ ÁÖ¼Ò´Â ÀÌ ¹®ÀÚ¿À» ³× ´Ü°èÀÇ Á¤¼ö°ªÀ¸·Î º¯È¯ÇÏ¿© ÁöÁ¤ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î moon.daewoo.co.krÀ̶õ È£½ºÆ® À̸§Àº ½ÇÁ¦·Î´Â 165.133.1.5¶ó´Â ³× ´Ü°èÀÇ Á¤¼ö°ªÀ» °¡Áø ³×Æ®¿÷ ÁÖ¼Ò·Î º¯È¯µË´Ï´Ù.
¨ê,¨ë Áö¿ª°ú ¿ø°ÝÁöÀÇ ÇÁ·Î¼¼½º : È£½ºÆ® ¾È¿¡¼ ½ÇÇàµÇ´Â ÇÁ·Î¼¼½º¸¦ ÁöÁ¤.
º¸Åë Æ÷Æ® ¹øÈ£¸¦ »ç¿ëÇÏ¿© ÇÁ·Î¼¼½º¸¦ ÁöÁ¤ÇÏ°Ô µË´Ï´Ù. URL¿¡¼ Àá½Ã ¼³¸íÇßÁö¸¸ http ÇÁ·ÎÅäÄÝÀº 80, ftp ÇÁ·ÎÅäÄÝÀº 23°ú °°ÀÌ °¢ ÇÁ·Î¼¼½º(¼ºñ½º)°¡ »ç¿ëÇÒ Æ÷Æ® ¹øÈ£°¡ ÁöÁ¤µË´Ï´Ù. »ç¿ëÀÚ°¡ Æ÷Æ® ¹øÈ£¸¦ ÀÚ½ÅÀÇ ÇÁ·Î±×·¥¿¡ ºÎ¿©ÇÒ ¶§¿¡´Â 1024 ÀÌ»óÀÇ °ªÀ» Áà¾ß ÇÏ°í ÀÚ½ÅÀÇ È£½ºÆ®¿¡¼ ½ÇÇàµÇ´Â ´Ù¸¥ ÇÁ·Î¼¼½º¿Í Æ÷Æ®¹øÈ£°¡ Áߺ¹µÇÁö ¾Êµµ·Ï ÁÖÀÇÇØ¾ß ÇÕ´Ï´Ù.
¿¬°áÀ» ±¸¼ºÇÏ´Â ´Ù¼¸ °¡Áö ¿ä¼Ò Áß ÇÑÂÊ È£½ºÆ®¿¡¼ ÁöÁ¤ÇØ¾ß ÇÏ´Â ºÎºÐÀÎ ¨ç Åë½Å ÇÁ·ÎÅäÄÝ, ¨è Áö¿ª È£½ºÆ® ÁÖ¼Ò, ¨é Áö¿ª ÇÁ·Î¼¼½º ¼¼ °¡Áö ¿ä¼Ò¸¦ ÈçÈ÷ Àü¼Û ÁÖ¼Ò È¤Àº ¼ÒÄÏÀ̶ó°í ºÎ¸¨´Ï´Ù. Áï, ¼ÒÄÏÀº ³×Æ®¿÷¿¡¼ ¿¬°áÀ» ±¸¼ºÇϱâ À§ÇÑ ÇÑÂÊ ³¡À» ¶æÇÏ´Â °³³äÀ¸·Î »ç¿ëµÇ´Â °ÍÀÔ´Ï´Ù. ³×Æ®¿÷ ÇÁ·Î±×·¡¹ÖÀÇ ¼ÒÄÏ¿¡´Â ±¸¼ºµÈ ÇÑÂÊ ³¡°ú ´Ù¸¥ÂÊ ³¡À» ¼·Î °øÀ¯ÇÏ´Â Åë½Å ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ¿© ¿¬°áÇϱ⸸ ÇÏ¸é ³×Æ®¿÷ ¿¬°áÀÌ ±¸¼ºµÈ´Ù´Â Àǹ̰¡ ¼û¾î ÀÖ´Â °ÍÀÔ´Ï´Ù.
2.3 ¼¹ö/Ŭ¶óÀ̾ðÆ® Åë½Å ¸ðµ¨
¼ÒÄÏÀ» »ç¿ëÇÑ ÇÁ·Î±×·¥Àº º¸Åë ¼¹ö/Ŭ¶óÀ̾ðÆ® ¸ðµ¨À̶ó°í ÇÏ´Â ³×Æ®¿÷ Åë½Å ¸ðµ¨À» »ç¿ëÇÏ°Ô µË´Ï´Ù. ¼¹ö´Â ³×Æ®¿÷ ¿¬°á ¿äûÀ» ±â´Ù¸®´Â ÇÁ·Î¼¼½ºÀ̸ç Ŭ¶óÀ̾ðÆ®´Â ³×Æ®¿÷ ¿¬°áÀ» ¿äûÇÏ´Â ÇÁ·Î¼¼½º¸¦ ¶æÇÕ´Ï´Ù.
¼¹ö ÇÁ·Î¼¼½º´Â ƯÁ¤ÇÑ Æ÷Æ® ¹øÈ£¸¦ »ç¿ëÇÏ¿© ÀÚ½ÅÀÇ È£½ºÆ®¿¡¼ ¿¬°áÀÇ ¹ÝÀ» ÀǹÌÇÏ´Â ¼ÒÄÏÀ» ¿¾îµÎ°í ´©±º°¡°¡ ÀÌ Æ÷Æ® ¹øÈ£·Î Á¢¼ÓÇØ¿Ã ¶§±îÁö ±â´Ù¸³´Ï´Ù.
Ŭ¶óÀ̾ðÆ® ÇÁ·Î¼¼½º´Â ¼¹ö ÇÁ·Î¼¼½º°¡ Àִ ȣ½ºÆ®ÀÇ ÁÖ¼Ò¿Í ¼¹ö ÇÁ·Î¼¼½º°¡ »ç¿ëÇϴ ƯÁ¤ Æ÷Æ® ¹øÈ£¸¦ »ç¿ëÇÏ¿© ¼¹ö ÇÁ·Î¼¼½º¿¡°Ô ¿¬°áÀ» ¿äûÇÕ´Ï´Ù.
ÀÚ¹Ù¿¡¼ ¼¹ö ÇÁ·Î¼¼½ºÀÇ ±âº» ¿ªÇÒÀº ServerSocket Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© ±¸ÇöÇÒ ¼ö ÀÖÀ¸¸ç Ŭ¶óÀ̾ðÆ® ÇÁ·Î¼¼½ºÀÇ ±âº» ¿ªÇÒÀº Socket Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù.
´ÙÀ½ ±×¸²Àº ÀÚ¹Ù¿¡¼ ¿¬°áÇü(TCP) ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ¿© ¼¹ö/Ŭ¶óÀ̾ðÆ® ¸ðµ¨À» ±¸¼ºÇÒ ¶§ÀÇ ±âº» Åë½Å ¹æ¹ýÀ» º¸¿©ÁÝ´Ï´Ù.
<±×¸²> ÀÚ¹ÙÀÇ ¿¬°áÇü ¼¹ö/Ŭ¶óÀ̾ðÆ® Åë½Å ¸ðµ¨
2.3.1 ¼¹ö ÇÁ·Î±×·¥ÀÇ °ñ°Ý ±¸Çö
À§ ±×¸²ÀÇ ¼¹ö/Ŭ¶óÀ̾ðÆ® ¸ðµ¨¿¡ µû¶ó ¼¹ö ÇÁ·Î±×·¥ÀÇ °ñ°ÝÀ» Àâ¾Æº¸µµ·Ï ÇÕ´Ï´Ù.
¸ÕÀú ƯÁ¤ÇÑ Æ÷Æ®¸¦ »ç¿ëÇÏ´Â ¼¹ö ¼ÒÄÏ °´Ã¼¸¦ »ý¼ºÇÏ¿© Ŭ¶óÀ̾ðÆ®°¡ ÇØ´ç Æ÷Æ®·Î Á¢¼ÓÇØ¿À±â¸¦ ±â´Ù·Á¾ß ÇÕ´Ï´Ù.
// ¸ÕÀú ÁöÁ¤µÈ Æ÷Æ®·Î ¼¹ö ¼ÒÄÏÀ» »ý¼º
ServerSocket server = null;
int port = 7001; // ƯÁ¤ÇÑ Æ÷Æ® ¹øÈ£
try {
server = new ServerSocket(port);
} catch (IOException ie) {
System.err.println("Cannot create server socket:"+ie.toString( ));
}
ÀϹÝÀûÀÎ °æ¿ì ÇϳªÀÇ ¼¹ö ¼ÒÄÏÀº ¿©·¯ °³ÀÇ Å¬¶óÀ̾ðÆ® Á¢¼ÓÀ» µ¿½Ã¿¡ ó¸®ÇÒ ¼ö ÀÖµµ·Ï ±¸ÇöµË´Ï´Ù.
ÀÏ´Ü ¼¹ö ¼ÒÄÏÀ» »ý¼ºÇϸé accept( ) ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© Ŭ¶óÀ̾ðÆ®°¡ Á¢¼ÓÇØ¿Ã ¶§±îÁö ±â´Ù¸®´Ù°¡, ÀÏ´Ü Á¢¼ÓÀÌ µÇ¸é accept( ) ¸Þ¼ÒµåÀÇ ¸®ÅÏ °ªÀÎ »õ·Î¿î ¼ÒÄÏ °´Ã¼¸¦ »ç¿ëÇÏ¿© Á¢¼ÓµÈ Ŭ¶óÀ̾ðÆ®¿Í Åë½ÅÀ» ÇÏ¸é µË´Ï´Ù.
// ¹«ÇÑ ¹Ýº¹¹®À» µ¹¸é¼ Ŭ¶óÀ̾ðÆ®°¡ Á¢¼ÓÇØ¿À¸é °¢ Ŭ¶óÀ̾ðÆ®º°·Î
// ¿¬°áÀ» »ý¼ºÇÏ¿© ÁöÁ¤ÇÑ ÀÏÀ» ÇÑ ÈÄ ¿¬°áÀ» ´Ý½À´Ï´Ù.
while (true) {
Socket socket = null;
try {
// Ŭ¶óÀ̾ðÆ®°¡ Á¢¼ÓÇØ¿Ã ¶§±îÁö ¹«ÇÑÈ÷ ±â´Ù¸³´Ï´Ù.
// Ŭ¶óÀ̾ðÆ®¿Í ¿¬°áµÇ¸é »õ·Î¿î ¼ÒÄÏ °´Ã¼°¡ ¸®Åϵ˴ϴÙ.
socket = server.accept();
// doSomething( ) ¸Þ¼Òµå´Â ½ÇÁ¦ Åë½ÅÀ» ÇÏ´Â ¸Þ¼ÒµåÀÔ´Ï´Ù.
doSomething(socket);
} catch (IOException ie) {
System.err.println("IOException:"+ie.getMessage( ));
} finally {
try { socket.close(); } catch (IOException ie) { }
}
}
º¸Åë doSomething( ) ¸Þ¼Òµå´Â Ŭ¶óÀ̾ðÆ®¿Í ½ÇÁ¦·Î Åë½ÅÀ» ÇÏ´Â ºÎºÐÀ¸·Î ÀÚ¹Ù¿¡¼´Â ¼ÒÄÏ °´Ã¼·ÎºÎÅÍ ÀÔ·Â ¹× Ãâ·Â ½ºÆ®¸² °´Ã¼¸¦ ±¸ÇÏ¿© Åë½ÅÇÏ°Ô µÉ °ÍÀÔ´Ï´Ù.
InputStream in = socket.getInputStream( );
OutputStream out = socket.getOutputStream( );
2.3.2 Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ÀÇ °ñ°Ý ±¸Çö
Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ÀÇ °æ¿ì¿¡´Â ¼¹öÀÇ °æ¿ìº¸´Ù Á»´õ °£´ÜÇÑ °ñ°ÝÀ» °¡Áú °ÍÀÔ´Ï´Ù.
¸ÕÀú Socket Ŭ·¡½º »ý¼ºÀÚ¸¦ »ç¿ëÇÏ¿© ¼¹ö°¡ ÀÖ´Â ¿ø°Ý È£½ºÆ®ÀÇ Æ¯Á¤ Æ÷Æ®¿¡ Á¢¼ÓÀ» ½ÃµµÇÕ´Ï´Ù. º°´Ù¸¥ ¿¹¿Ü°¡ ¹ß»ýÇÏÁö ¾Ê°í »ý¼ºÀÚ°¡ ¸®ÅÏµÇ¸é ¿¬°áÀÌ ÀÌ·ç¾îÁø °ÍÀ̹ǷΠ»ý¼ºµÈ ¼ÒÄÏ °´Ã¼¸¦ »ç¿ëÇÏ¿© ¼¹ö¿Í Åë½ÅÇÏ¸é µË´Ï´Ù.
// ¸ÕÀú ÁöÁ¤µÈ È£½ºÆ® ÁÖ¼Ò¿Í Æ÷Æ®·Î ¼ÒÄÏÀ» »ý¼ºÇÕ´Ï´Ù.
Socket socket = null;
String host = "moon.daewoo.co.kr"; // ¼¹ö°¡ ÀÖ´Â ¿ø°Ý È£½ºÆ® ÁöÁ¤
int port = 7001; // ¼¹ö°¡ »ç¿ëÇϴ ƯÁ¤ Æ÷Æ® ¹øÈ£ ÁöÁ¤
try {
socket = new Socket(host, port);
// doSeveralThings() ¸Þ¼Òµå´Â ¼¹ö¿Í ¾à¼ÓÇß´ø ÀÏÀ» ÇÒ °ÍÀÔ´Ï´Ù.
doSeveralThings(socket);
} catch (UnknownHostException uhe) { // È£½ºÆ® ÁÖ¼Ò¸¦ ÀÌÇØÇÒ ¼ö ¾øÀ» ¶§
System.err.println("Unknown host:"+uhe.getMessage());
} catch (IOException ie) {
System.err.println("IOException:"+ie.getMessage());
} finally {
try { socket.close(); } catch (IOException ie) { }
}
2.4 ºê·Îµåij½ºÆ® ¼¹ö/Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ ±¸Çö
¼¹ö/Ŭ¶óÀ̾ðÆ® ¸ðµ¨À» ±¸ÇöÇÏ´Â ¿¹Á¦ ÇÁ·Î±×·¥À» ½ÇÁ¦·Î ÀÛ¼ºÇغ¾½Ã´Ù. ºê·Îµåij½ºÆ® ¼¹ö´Â ¿©·¯ °³ÀÇ Å¬¶óÀ̾ðÆ®¿Í µ¿½Ã¿¡ ¿¬°áµÇ¸é¼ °¢ Ŭ¶óÀ̾ðÆ® °£ÀÇ Åë½ÅÀ» Áß°³ÇÏ´Â ±â´ÉÀ» °¡Áý´Ï´Ù. ¼¹ö´Â ¾î´À ÇÑ Å¬¶óÀ̾ðÆ®°¡ ¸Þ½ÃÁö¸¦ º¸³»¸é ÀÌ ¸Þ½ÃÁö¸¦ ÇöÀç Á¢¼ÓµÈ ¸ðµç Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³»´Â ÀÏÀ» ÇÕ´Ï´Ù.
Ŭ¶óÀ̾ðÆ®´Â »ç¿ëÀÚ°¡ ÅؽºÆ®Çʵ忡 ÀÔ·ÂÇÑ ³»¿ëÀ» ¼¹ö·Î º¸³»¸ç ¶Ç, ¼¹ö·ÎºÎÅÍ ¹ÞÀº ¸Þ½ÃÁö¸¦ ÅؽºÆ®¿¡¸®¾î¿¡ µð½ºÇ÷¹ÀÌÇÏ´Â ¾ÖÇø´À¸·Î ±¸ÇöÇغ¸µµ·Ï ÇÕ´Ï´Ù.
2.4.1 ºê·Îµåij½ºÆ® ¼¹ö ÇÁ·Î±×·¥
ºê·Îµåij½ºÆ® ¼¹ö´Â ¿©·¯ ¸íÀÇ Å¬¶óÀ̾ðÆ®°¡ µ¿½Ã¿¡ Á¢¼ÓÇÒ ¼ö ÀÖÀ¸¸ç ÇöÀç Á¢¼ÓÀÌ À¯ÁöµÇ°í Àִ Ŭ¶óÀ̾ðÆ® ¸ñ·ÏÀ» ³»ºÎÀûÀ¸·Î °¡Áö°í ÀÖ´Ù°¡ ¾î´À Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍ ¸Þ½ÃÁö°¡ µµÂøÇϸé Ŭ¶óÀ̾ðÆ® ¸ñ·Ï¿¡ ÀÖ´Â ¸ðµç Ŭ¶óÀ̾ðÆ®¿¡°Ô ÇØ´ç ¸Þ½ÃÁö¸¦ º¸³»¾ß ÇÕ´Ï´Ù. ÀÌ ¶§ Ŭ¶óÀ̾ðÆ®µéÀÇ ¸ñ·ÏÀ» °ü¸®Çϱâ À§ÇØ java.util ÆÐÅ°ÁöÀÇ Vector Ŭ·¡½º¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Vector Ŭ·¡½º´Â Å©±â°¡ º¯ÇÒ ¼ö ÀÖ´Â °´Ã¼ ¹è¿À» À§ÇØ ÁÖ·Î »ç¿ëµÇ´Âµ¥ ¹è¿ÀÌ °´Ã¼¿Í ±âº» ÀÚ·áÇü ¸ðµÎ¿¡ »ç¿ëµÉ ¼ö ÀÖ´Â µ¥ ºñÇØ Vector Ŭ·¡½º´Â °´Ã¼¿¡¸¸ »ç¿ëµÉ ¼ö ÀÖ°í ±× Å©±â°¡ ÀÚµ¿À¸·Î º¯ÇÑ´Ù´Â Á¡¿¡¼ ¹è¿°ú ´Ù¸¨´Ï´Ù.
Vector Ŭ·¡½º µî¿¡ µî·ÏµÈ °´Ã¼µéÀ» Â÷·Ê·Î ¼øȸÇÏ´Â µ¥ À¯¿ëÇÑ ÀÎÅÍÆäÀ̽º·Î EnumerationÀÌ Àִµ¥ Enumeration ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ¿© Vector Ŭ·¡½º¿¡ µî·ÏµÈ String °´Ã¼µéÀ» Â÷·Ê·Î Ãâ·ÂÇÏ·Á¸é ´ÙÀ½°ú °°Àº ¹æ¹ýÀ» »ç¿ëÇÕ´Ï´Ù.
Vector vector=new Vector(); // º¤ÅÍ »ý¼º
... // º¤ÅÍÀÇ ¿ø¼ÒµéÀ» Ãß°¡ÇÏ´Â ºÎºÐ
for (Enumeration e = vector.elements(); e.hasMoreElements() ; ) {
System.out.println((String) e.nextElement());
}
ºê·Îµåij½ºÆ® ¼¹ö´Â ÀϹÝÀûÀÎ ¼ÒÄÏ ¼¹öÀÇ °ñ°ÝÀ» ±×´ë·Î °¡Áö¸ç, Á¢¼ÓÇÑ Å¬¶óÀ̾ðÆ®º°·Î ¾²·¹µå¸¦ »ý¼ºÇÏ¿© Ŭ¶óÀ̾ðÆ®°¡ ¾î¶² ¸Þ½ÃÁö¸¦ º¸³¾ ¶§±îÁö ±â´Ù·È´Ù°¡, ¸Þ½ÃÁö°¡ µµÂøÇÏ¸é ±× ¸Þ½ÃÁö¸¦ ¸ðµç Ŭ¶óÀ̾ðÆ®¿¡°Ô ºê·Îµåij½ºÆ®ÇÏ°Ô µË´Ï´Ù.
import java.io.*;
import java.net.*;
import java.util.*;
class BroadcastServer
{
final static int PORT = 8001;
ServerSocket server = null;
Vector clients = new Vector();
// ³»ºÎ Ŭ·¡½º·Î ¼±¾ðµÈ Client Ŭ·¡½º. °¢ Ŭ¶óÀ̾ðÆ®°ú Á¢¼ÓÀÌ ÀÌ·ç¾îÁø ¼ÒÄÏÀ» °ü¸®Çϸç
// Ŭ¶óÀ̾ðÆ®¸¶´Ù º°µµÀÇ ¾²·¹µå·Î ÀÌ·ç¾îÁý´Ï´Ù.
class Client extends Thread {
Socket socket = null;
BufferedReader in = null;
PrintWriter out = null;
// »ý¼ºÀÚ
Client (Socket socket) throws IOException {
this.socket = socket;
this.in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
this.out = new PrintWriter(
new OutputStreamWriter(socket.getOutputStream()),
true /* ÀÚµ¿ Ç÷¯½Ã ¸ðµå */);
start(); // Á¢¼ÓÀÌ ÀÌ·ç¾îÁø Ŭ¶óÀ̾ðÆ®¸¦ ó¸®ÇÒ ¾²·¹µå¸¦ ½ÇÇà½Ãŵ´Ï´Ù.
}
public void run() {
try {
while (true) {
// readLine()Àº µ¥ÀÌÅÍ°¡ µé¾î¿Ã ¶§±îÁö ±â´Ù¸®´Â
// ºí·ÎÅ· ¸Þ¼ÒµåÀÔ´Ï´Ù.
String line = in.readLine();
if (line == null) { // ³Î °ªÀº ½ºÆ®¸²ÀÇ ³¡À» °¡¸®Åµ´Ï´Ù.
close();
break;
}
// ¼¹öÀÇ Ç¥ÁØ Ãâ·ÂÀ¸·Î ¸Þ½ÃÁö Ãâ·Â
System.out.println(getName()+':'+line);
// ¸ðµç Ŭ¶óÀ̾ðÆ®¿¡°Ô ¸Þ½ÃÁö ºê·Îµåij½ºÆ®
BroadcastServer.this.broadcast(line);
}
} catch (IOException ie) {
System.err.println(getName()+":IOException. "+ie.getMessage());
close();
}
}
public void close() {
synchronized (BroadcastServer.this) {
try { if (in!=null) in.close(); } catch (Exception e) { }
if (out!=null) out.close();
try { if (socket!=null) socket.close(); } catch (Exception e) { }
socket=null;
}
}
}
public BroadcastServer() {
// ¸ÕÀú ÁöÁ¤µÈ Æ÷Æ®·Î ¼¹ö ¼ÒÄÏÀ» »ý¼ºÇÕ´Ï´Ù.
try {
server = new ServerSocket(PORT);
} catch (IOException ie) {
System.err.println("Cannot create server socket");
System.exit(1);
}
while (true) { // ¹«ÇÑ ¹Ýº¹¹® ¾È¿¡¼ Ŭ¶óÀ̾ðÆ®ÀÇ Á¢¼ÓÀ» ±â´Ù¸³´Ï´Ù.
try {
Socket socket = server.accept();
// Ŭ¶óÀ̾ðÆ®¸¦ ó¸®ÇÒ º°µµ ¾²·¹µå¸¦ »ý¼ºÇÏ°í
// Ŭ¶óÀ̾ðÆ®¸¦ º¤ÅÍ Å¬·¡½º¿¡ Ãß°¡ÇÕ´Ï´Ù.
Client client = new Client(socket);
synchronized (this) {
clients.addElement(client);
}
} catch (IOException ie) {
System.err.println("IOException :"+ie.getMessage());
}
}
}
public static void main(String args[]) {
new BroadcastServer();
}
// ¸ðµç Ŭ¶óÀ̾ðÆ®¿¡°Ô ¸Þ½ÃÁö¸¦ ºê·Îµåij½ºÆ®ÇÏ´Â ¸Þ¼Òµå
private synchronized void broadcast(String message) {
Vector v = new Vector(); // Áö¿ï Ŭ¶óÀ̾ðÆ®¸¦ Àá½Ã ÀúÀå
for (Enumeration enum=clients.elements();
enum.hasMoreElements(); )
{
Client client = (Client) enum.nextElement();
if (client == null)
continue;
if (client.socket == null) { // ¼ÒÄÏÀÌ ÀÌ¹Ì ´Ý±ä °æ¿ì
v.addElement(client); // enumerate ÁßÀ̹ǷΠ³ªÁß¿¡ Áö¿ì±â À§ÇØ ÀúÀå
continue;
}
client.out.println(message);
if (client.out.checkError()) { // ¿¡·¯ °Ë»ç
System.err.println("Error while sending message.");
client.close();
}
}
// ¿©±â¿¡¼ »èÁ¦ÇÒ ¸ñ·ÏÀ» ½ÇÁ¦·Î »èÁ¦
for (Enumeration enum = v.elements();
enum.hasMoreElements(); )
{
Client client = (Client) enum.nextElement();
clients.removeElement(client);
}
}
}
<¿¹Á¦> ºê·Îµåij½ºÆ® ¼¹ö ÇÁ·Î±×·¥
2.4.2 ºê·Îµåij½ºÆ® Ŭ¶óÀ̾ðÆ® ¾ÖÇø´
ºê·Îµåij½ºÆ® ¾ÖÇø´Àº ÀϹÝÀûÀÎ ¼ÒÄÏ Å¬¶óÀ̾ðÆ® ÇÁ·Î±×·¥ÀÇ ±¸Á¶¸¦ Å©°Ô ¹þ¾î³ªÁö ¾Ê½À´Ï´Ù. ´Ù¸¸ ¾ÖÇø´À¸·Î ±¸ÇöÇÒ °ÍÀ̱⠶§¹®¿¡ °í·ÁÇØ¾ß ÇÒ ¹®Á¦¸¦ ¤°í ³Ñ¾î°¡µµ·Ï ÇÕ´Ï´Ù. ÀÌÀü È£¿¡¼ ¾ÖÇø´À» ´Ù·ê ¶§ ¾ð±ÞÇß¾úÁö¸¸ Àß ±â¾ï³ªÁö ¾Ê´Â µ¶ÀÚµéÀ» À§ÇØ »ó±â½ÃÅ°ÀÚ¸é "¾ÖÇø´ ¹ÙÀÌÆ®Äڵ尡 Àִ ȣ½ºÆ® ÀÌ¿ÜÀÇ È£½ºÆ®¿ÍÀÇ ³×Æ®¿÷ Á¢¼Ó"Àº ±âº»°ªÀ¸·Î ±ÝÁöµÇ¾î ÀÖ½À´Ï´Ù.
½±°Ô ¸»ÇÏÀÚ¸é ¾ÖÇø´ÀÌ À§Ä¡ÇÏ°í ÀÖ´Â À¥ ¼¹ö ÀÌ¿ÜÀÇ È£½ºÆ®¿Í´Â ³×Æ®¿÷À¸·Î Á¢¼ÓÇÒ ¼ö ¾ø½À´Ï´Ù. ´Ù½Ã ¸»Çؼ ¾ÖÇø´°ú Á¢¼ÓÇÒ ¼ÒÄÏ ¼¹ö´Â ¾ÖÇø´ÀÌ À§Ä¡ÇÑ À¥ ¼¹ö¿Í °°Àº È£½ºÆ®¿¡¼ ½ÇÇàµÇ¾î¾ß ÇÕ´Ï´Ù. ¹°·Ð ¾ÖÇø´À» ÀÏ¹Ý ÀÀ¿ë ÇÁ·Î±×·¥Ã³·³ º¸¾È Á¦¾à ¾øÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Â ¾ÖÇø´ ¼¸íÀ̶õ ±â¼úÀ» »ç¿ëÇϰųª ÀÚ¹Ù 2¿¡ Ãß°¡µÈ ÆÛ¹Ì¼Ç ÁöÁ¤ ±â´ÉÀ» ¾²¸é ´Ù¸¥ È£½ºÆ®¿ÍÀÇ ¼ÒÄÏ Á¢¼Óµµ °¡´ÉÇÏÁö¸¸, ¹ø°Å·Î¿î ÀÏÀÏ °ÍÀÔ´Ï´Ù. ¿©±â¿¡¼´Â ¾ÖÇø´ÀÌ Á¸ÀçÇϴ ȣ½ºÆ®¿¡ ¼ÒÄÏ Á¢¼ÓÇÏ´Â °ÍÀ¸·Î °¡Á¤ÇÕ´Ï´Ù.
¾ÖÇø´ Ŭ·¡½ºÀÇ getCodeBase() ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© ´ÙÀ½°ú °°ÀÌ ¾ÖÇø´ÀÌ À§Ä¡ÇÑ À¥ ¼¹öÀÇ È£½ºÆ® À̸§À» ±¸ÇÒ ¼ö ÀÖ½À´Ï´Ù.
String hostname = getCodeBase().getHost();
´ÙÀ½Àº ºê·Îµåij½ºÆ® ¼¹ö¿¡ Á¢¼ÓÇÒ Å¬¶óÀ̾ðÆ® ¾ÖÇø´ ÇÁ·Î±×·¥ ÄÚµåÀÔ´Ï´Ù. Ư±âÇÒ °ÍÀº º°µµÀÇ ¾²·¹µå¸¦ »ç¿ëÇÏ¿© ¼¹ö°¡ º¸³»´Â ¸Þ½ÃÁö¸¦ Àоîµé¿© ÅؽºÆ®¿¡¸®¾î¿¡ µð½ºÇ÷¹ÀÌÇÏ´Â ÀÏÀ» Àü´ã½ÃÅ°°í ÀÖ´Ù´Â Á¡ÀÔ´Ï´Ù.
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.net.*;
import java.io.*;
public class BroadcastApplet extends Applet implements ActionListener
{
int port;
String host;
TextField inputField;
TextArea outputArea;
Socket socket;
BufferedReader in;
PrintWriter out;
Thread readingThread;
public void init() {
// ÄÄÆ÷³ÍÆ® ·¹À̾ƿô, ¹èÄ¡
inputField = new TextField();
outputArea = new TextArea();
setLayout(new BorderLayout());
add(inputField, "North");
add(outputArea, "Center");
String param=getParameter("PORT");
if (param==null)
port = 8001; // ±âº» Æ÷Æ® ¹øÈ£
else
port = Integer.parseInt(param);
host=getParameter("HOST");
if (host==null) // ±âº» È£½ºÆ®´Â ¾ÖÇø´ÀÌ Á¸ÀçÇϴ ȣ½ºÆ®
host = getCodeBase().getHost();
inputField.addActionListener(this);
validate();
}
public void start() {
if (socket == null)
connect();
readingThread = new Thread() {
public void run() {
if (socket == null)
return;
while (socket!=null &&
readingThread==Thread.currentThread()) {
try {
// readLine() ¸Þ¼Òµå´Â ¼¹ö·ÎºÎÅÍ
// ÀÔ·ÂÀÌ ÀÖÀ» ¶§±îÁö ºí·ÎÅ·µÈ´Ù.
String line = in.readLine();
appendLine(line);
} catch (IOException ie) {
appendLine("IOException:"+ie.getMessage());
closeSocket();
}
}
}
};
readingThread.start();
}
public void stop() {
readingThread=null;
closeSocket();
}
public void actionPerformed(ActionEvent ae) {
if (ae.getSource() instanceof TextField) {
String line = inputField.getText();
inputField.setText(""); // ÅؽºÆ®¿¡¸®¾î¸¦ Áö¿ó´Ï´Ù.
if (socket == null)
return;
try {
out.println(line);
if (out.checkError())
throw new IOException("Print error.");
} catch (IOException ie) {
closeSocket();
}
}
}
public void connect() {
try {
socket = new Socket(host, port);
in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(
new OutputStreamWriter(socket.getOutputStream()),
true /* ÀÚµ¿ Ç÷¯½Ã ¸ðµå */);
appendLine("Connected...");
} catch (UnknownHostException uhe) {
appendLine("Unknown host:"+uhe.getMessage());
} catch (IOException ie) {
appendLine("IOException:"+ie.getMessage());
}
}
public synchronized void closeSocket() {
try { if (in != null) in.close(); } catch (Exception e) { }
if (out != null) out.close();
try { if (socket != null) socket.close(); } catch (Exception e) { }
socket = null;
}
public synchronized void appendLine(String message) {
outputArea.append(message+"\n");
}
}
<¿¹Á¦> ºê·Îµåij½ºÆ® Ŭ¶óÀ̾ðÆ® ¾ÖÇø´ ÇÁ·Î±×·¥
Ŭ¶óÀ̾ðÆ® ¾ÖÇø´ ½ÇÇàÀ» À§ÇÑ HTML ¹®¼´Â ´ÙÀ½°ú °°Àº ³»¿ëÀ» Æ÷ÇÔÇÏ¸é µË´Ï´Ù.
<APPLET CODE=BroadcastApplet WIDTH=200 HEIGHT=200>
<PARAM NAME="PORT" VALUE=8001>
<PARAM NAME="HOST" VALUE="127.0.0.1">
</APPLET>
<±×¸²> ºê·Îµåij½ºÆ® ¼¹ö/Ŭ¶óÀ̾ðÆ® ½ÇÇà ¸ð½À
³×Æ®¿÷ ÇÁ·Î±×·¡¹ÖÀº ¾à¼ÓÀ» Áß½ÃÇÏ´Â ÇÁ·Î±×·¡¹Ö ºÐ¾ßÀÔ´Ï´Ù. ¼¹ö¿Í Ŭ¶óÀ̾ðÆ® °£ÀÇ ´ëÈ¿¡´Â ÀÏÁ¤ÇÑ ±Ô¾àÀÌ ÀÖ¾î À̸¦ ÁöÅ°Áö ¾ÊÀ» °æ¿ì, ¿¡·¯ »óȲÀ¸·Î ºüÁöµµ·Ï ¼³°èµÇ¾î¾ß ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ±Ô¾à ȤÀº ¾à¼ÓÀ» ÈçÈ÷ ÇÁ·ÎÅäÄÝÀ̶ó°í ºÎ¸¨´Ï´Ù. ¼¹ö/Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¡¹Ö¿¡¼´Â ÇÁ·ÎÅäÄÝÀ» ºÐ¸íÇÏ°í È¿À²ÀûÀ¸·Î, ¶Ç ´Ù¾çÇÑ »óȲÀ» °í·ÁÇÏ¿© ¼³°èÇØ¾ß ÈǸ¢ÇÑ °á°ú¸¦ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù.
ºê·Îµåij½ºÆ® ¼¹ö/Ŭ¶óÀ̾ðÆ®´Â Á¶±ÝÀÇ ±Ô¾àÀ» Ãß°¡Çϸé äÆà ¼¹ö/Ŭ¶óÀ̾ðÆ®·Î ¹ßÀü½Ãų ¼ö ÀÖ½À´Ï´Ù. Á÷Á¢ µµÀüÇغ¸±â ¹Ù¶ø´Ï´Ù.
Çѱ¹ ·ÎĶ·Î ½Ã°£ Ç¥ÇöÇϱ⠷ÎĶ(locale)Àº ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ´Â ȯ°æ Áß Áö¿ª°ú ¾ð¾î¿¡ °üÇÑ Á¤º¸¸¦ ¶æÇÕ´Ï´Ù. Áï, ´ëÇѹα¹À̶ó´Â Áö¿ª¿¡ ´ëÇÑ Á¤º¸¿Í ÇѱÛÀ̶ó´Â ¾ð¾î¿¡ ´ëÇÑ Á¤º¸¸¦ ¸»ÇÕ´Ï´Ù. ÀÚ¹Ù´Â ·ÎĶ Á¤º¸¸¦ Ç¥ÇöÇÏ´Â java.util ÆÐÅ°ÁöÀÇ Locale Ŭ·¡½º¸¦ Á¦°øÇÕ´Ï´Ù. ¿ì¸®°¡ º¸Åë »ç¿ëÇÏ´Â ·ÎĶÀº ´ëÇѹα¹À̶ó´Â Áö¿ªÀÇ Ãø¸é¿¡¼ º¸¸é Locale.KOREAÀÌ°í ÇѱÛÀ̶ó´Â ¾ð¾îÀÇ Ãø¸é¿¡¼ º¸¸é Locale.KOREANÀÔ´Ï´Ù. LocaleÀÇ »ý¼ºÀÚ¸¦ »ç¿ëÇÏ¿© ¿ì¸®°¡ »ç¿ëÇÏ´Â ·ÎĶÀ» Ç¥ÇöÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÒ ¼ö ÀÖ½À´Ï´Ù.
·ÎĶ »ý¼ºÀÚÀÇ ÀÎÀÚ·Î ÁÖ¾îÁö´Â ¾ð¾î°ª°ú Áö¿ª°ªÀº ±¹Á¦ Ç¥ÁØÈ ±â±¸ÀÎ ISO¿¡ ÀÇÇØ Á¤ÇØÁ® ÀÖ½À´Ï´Ù. ÇѱÛÀº "ko", ´ëÇѹα¹Àº "KR"·Î ÁöÁ¤µÇ¾î ÀÖ½À´Ï´Ù. ·ÎĶÀÌ ´Þ¶óÁö¸é ³¯Â¥¿Í ½Ã°£, µµ·®ÇüÀ» Ç¥ÇöÇÏ´Â ¹æ½ÄÀÌ ´Þ¶óÁý´Ï´Ù. ÀÌ·¸°Ô ·ÎĶ¸¶´Ù ´Ù¸¥ ¹æ½ÄÀ¸·Î ³¯Â¥, ½Ã°£, µµ·®Çü µîÀ» Ç¥½ÃÇÏ´Â ±â´ÉÀ» ´ã´çÇÏ´Â Àڹ٠Ŭ·¡½ºµéÀº ´ëºÎºÐ java.text ÆÐÅ°Áö¿¡ µé¾î ÀÖ½À´Ï´Ù. ÇÑ ¿¹·Î ³¯Â¥¿Í ½Ã°£À» Ç¥ÇöÇÏ´Â DateFormat Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© ÀÔ¸À¿¡ ¸Â´Â ¼½ÄÀ¸·Î ½Ã°£À» Ç¥ÇöÇغ¾½Ã´Ù. java.text ÆÐÅ°Áö¿¡ ÀÖ´Â FormatÀ¸·Î ³¡³ª´Â À̸§ÀÇ Å¬·¡½ºµéÀº º¸Åë ·ÎĶ¿¡ ÀÇÁ¸ÇÏ´Â Á¤º¸ÀÇ Çü½ÄµéÀ» ¼½ÄÈÇØÁִ Ŭ·¡½ºµé·Î format() ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© ¼½ÄÈµÈ ¹®ÀÚ¿À» ¸¸µå´Â µ¥ »ç¿ëµË´Ï´Ù. ´ÙÀ½Àº ÇöÀçÀÇ ±âº» ·ÎĶÀ» »ç¿ëÇÏ¿© ÇöÀç ½Ã°£À» ±âº» Çü½ÄÀ¸·Î Ãâ·ÂÇÏ´Â ÄÚµåÀÔ´Ï´Ù.
ÇÊÀÚÀÇ À©µµ¿ì 95¿¡¼ À§ ³»¿ëÀ» ½ÇÇàÇÏ¸é ´ÙÀ½°ú °°Àº °á°ú°¡ ³ª¿É´Ï´Ù.
Á»´õ Ä£ÀýÇÏ°Ô ½Ã°£ Á¤º¸¸¦ ³ªÅ¸³»·Á°í ÇÑ´Ù¸é DateFormat °´Ã¼ »ý¼º ºÎºÐÀ» ´ÙÀ½°ú °°ÀÌ º¯°æÇÏ¸é µË´Ï´Ù.
ÀÌÁ¦ °á°ú´Â ´ÙÀ½°ú °°ÀÌ ³ªÅ¸³³´Ï´Ù.
¸¸¾à »ç¿ëÇÏ´Â ·ÎĶ ȯ°æÀÌ ´Ù¸£´Ù¸é µ¿ÀÏÇÑ Äڵ尡 ´Ù¸¥ °á°ú¸¦ º¸¿©ÁÙ °ÍÀÔ´Ï´Ù. ·ÎĶÀÌ Locale.US·Î ÁöÁ¤µÇ¾î ÀÖ´Ù¸é ´ÙÀ½°ú °°Àº °á°ú°¡ ³ª¿É´Ï´Ù.
³¯Â¥/½Ã°£À» Ç¥ÇöÇÒ ¶§ ·ÎĶ°ú ´õºÒ¾î ´ëÇѹα¹¿¡ »ç´Â ÇÁ·Î±×·¡¸Ó°¡ °ü½ÉÀ» °¡Áö´Â ¹®Á¦´Â ŸÀÓÁ¸ÀÇ Ç¥Çö ¹®Á¦ÀÔ´Ï´Ù. ÈçÈ÷ Çѱ¹ Ç¥Áؽöó´Â ŸÀÓÁ¸Àº ±¹Á¦ÀûÀ¸·Î KST¶ó´Â À̸§À¸·Î Åë¿ëµÉ ¹ýÇÏÁö¸¸ JDK 1.2¿¡¼´Â ±â²¯ "Asia/Seoul"À̶ó´Â À̸§À¸·Î ¾î·Æ°Ô Á¦°øµË´Ï´Ù. "KST"¶ó´Â À̸§À̳ª "Çѱ¹ Ç¥ÁؽÃ"¶ó´Â À̸§ÀÇ Å¸ÀÓÁ¸ °´Ã¼¸¦ Çϳª »ý¼ºÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ SimpleTimeZone Ŭ·¡½º¸¦ »ç¿ëÇÏ¸é µË´Ï´Ù.
ÀÌ ¹æ¹ýÀº ´Ù»ç¿ëÀÚ, ´ÙÁß ·ÎĶ Áö¿ø ½Ã½ºÅÛÀÎ À¯´Ð½º ¼¹ö¿¡¼ ½ÇÇàµÇ´Â À¥ ¼¹öÂÊ ÇÁ·Î±×·¥ÀÎ ¼ºí¸´ µî¿¡¼ À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. |
¹®ÀÚ¿ÀÇ ÀÎÄÚµù º¯È¯ ÀÚ¹Ù ¹®ÀÚ¿ÀÇ ÀÎÄÚµùÀ» º¯È¯½ÃÅ°´Â °ÍÀº ¾î·ÆÁö ¾Ê½À´Ï´Ù. ¹ÙÀÌÆ® ¹è¿À» ÁöÁ¤µÈ ¹®ÀÚ ÀÎÄÚµù¿¡ µû¶ó String °´Ã¼·Î º¯È¯ÇÏ´Â String Ŭ·¡½º »ý¼ºÀÚ¸¦ »ç¿ëÇÏ¸é µË´Ï´Ù.
EUC_KR ÀÎÄÚµù¿¡ µû¶ó ¸¸µé¾îµÐ ÅؽºÆ® ÆÄÀÏ¿¡¼ ³»¿ëÀ» Àоî ÀÌ°ÍÀ» 8859_1 ÀÎÄÚµùÀ¸·Îµµ Ç¥ÇöÇغ¸°í EUC_KR ÀÎÄÚµùÀ¸·Îµµ Ç¥ÇöÇغ¸°Ú½À´Ï´Ù. ¿µ¾î¸¦ Æ÷ÇÔÇÑ ±âº» ¶óƾ ¹®ÀÚ¸¦ Ç¥ÇöÇÏ´Â 8859_1 ÀÎÄÚµùÀº ¸ðµç ¹®ÀÚ¸¦ 1¹ÙÀÌÆ®·Î ó¸®ÇÏÁö¸¸, EUC_KR ÀÎÄÚµùÀº ÇѱÛÀ» ó¸®Çϱâ À§ÇØ Æ¯Á¤ ¿µ¿ªÀÇ ¹®ÀÚÄÚµå´Â 2¹ÙÀÌÆ® ¹®ÀÚ¸¦ Çؼ®ÇÕ´Ï´Ù. µû¶ó¼ ÆÄÀϷκÎÅÍ ÀоîµéÀÎ ¹ÙÀÌÆ® ¹è¿ Áß Çѱۿ¡ ÇØ´çÇÏ´Â ºÎºÐÀ» 8859_1 ÀÎÄÚµù¿¡¼´Â µÎ °³ÀÇ 1¹ÙÀÌÆ® ¹®ÀÚ·Î Çؼ®ÇÏ°í EUC_KR ÀÎÄÚµù¿¡¼´Â ÇϳªÀÇ ÇÑ±Û ¹®ÀÚ·Î Çؼ®ÇÒ °ÍÀÔ´Ï´Ù. ¸ÕÀú ¿¹Á¦·Î ¾µ ÅؽºÆ® ÆÄÀÏÀ» ¸¸µì´Ï´Ù. ¿©±â¿¡¼´Â ¾ÆÁÖ °£´ÜÇÏ°Ô 10°³ÀÇ ¹®ÀÚ·Î ±¸¼ºµÈ ÅؽºÆ® ÆÄÀÏÀ» ¸¸µé¾î ÆÄÀÏ À̸§À» test.txt¶ó°í ÇÏ°Ú½À´Ï´Ù.
ÇÑ±Û À©µµ¿ì 95/98/NT µî¿¡¼ ÀÌ ÆÄÀÏÀ» ÀúÀåÇϸé ÀϹÝÀûÀ¸·Î EUC_KR ÀÎÄÚµù¿¡ µû¶ó ÀúÀåµÉ °ÍÀÔ´Ï´Ù.
´ÙÀ½Àº ÀÌ ÆÄÀÏÀ» Àоîµé¿© 8859_1 ÀÎÄÚµù°ú EUC_KR ÀÎÄÚµùÀ¸·Î °¢°¢ Çؼ®ÇØ ¹®ÀÚ¿À» Ãâ·ÂÇÏ´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù.
½ÇÇàÇغ¸¸é ´ÙÀ½°ú °°Àº °á°ú¸¦ º¼ ¼ö ÀÖ½À´Ï´Ù.
¹ÙÀÌÆ® ¹è¿À» 8859_1 ÀÎÄÚµùÀ¸·Î Çؼ®ÇÏ¿© º¯È¯ÇÑ ¹®ÀÚ¿Àº ÇѱÛÀ» µÎ °³ÀÇ ¹®ÀÚ·Î À߸ø Çؼ®ÇÏ¿´°í, EUC_KR ÀÎÄÚµùÀ¸·Î Çؼ®ÇÑ °æ¿ì¿¡¸¸ Á¦´ë·Î º¸¿©ÁÜÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô ÀÎÄÚµùÀ» À߸ø Çؼ®ÇÑ ¹®ÀÚ¿À» ´Ù½Ã ´Ù¸¥ ÀÎÄÚµùÀ¸·Î º¯È¯ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ´ÙÀ½Àº 8859_1·Î ÀÎÄÚµùµÈ À§ÀÇ ascii ¹®ÀÚ¿ º¯¼ö¸¦ EUC_KR ÀÎÄÚµùÀ¸·Î ´Ù½Ã º¯È¯ÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁÝ´Ï´Ù.
|
ÇÙ½É Ã¼Å© ¢Â ÀÚ¹Ù¿¡¼´Â ÀÔÃâ·ÂÀ» À§ÇØ ½ºÆ®¸²À» ÀÏ°üµÇ°Ô »ç¿ëÇÑ´Ù. ¢Â ÀÚ¹ÙÀÇ ÀÔÃâ·Â ½ºÆ®¸²¿¡´Â ÀϹÝÀûÀÎ µ¥ÀÌÅÍ ÀÔÃâ·Â¿¡ »ç¿ëµÇ´Â ¹ÙÀÌÆ® ÀÔÃâ·Â ½ºÆ®¸²°ú ¹®ÀÚ¿ ÀÔÃâ·ÂÀ» À§ÇÑ ¹®ÀÚ ÀÔÃâ·Â ½ºÆ®¸²ÀÌ ÀÖ´Ù. ¢Â ÇѱÛÀ» Æ÷ÇÔÇÑ ´Ù±¹¾î ȯ°æÀ» Áö¿øÇÏ´Â ¹®ÀÚ¿ ÀÔÃâ·ÂÀ» À§Çؼ´Â ¹®ÀÚ ÀÔÃâ·Â ½ºÆ®¸²À» »ç¿ëÇØ¾ß ÇÑ´Ù. ¢Â ÀÚ¹ÙÀÇ URL Ŭ·¡½º¸¦ »ç¿ëÇÏ¸é ½±°Ô HTTP¿Í FTP Àü¼Û ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¢Â ServerSocket°ú Socket Ŭ·¡½º´Â °¢°¢ Ŭ¶óÀ̾ðÆ®/¼¹ö ȯ°æÀ» À§ÇÑ ¼¹ö¿Í Ŭ¶óÀ̾ðÆ® ¼ÒÄÏÀ» Áö¿øÇÑ´Ù. |
ÇÊÀÚ ¿¬¶ôó : yoonforh@yahoo.com