Stream°ú Socket
ÀÛ¼ºÀÚ: realmove / ÀÛ¼ºÀÏ: 2000.5.4 / ´ë»ó: ÀÚ¹Ù ±âÃÊ
Â÷·Ê
1. Stream
1) Stream À̶õ?
2) Stream ÀÔ·Â
3) StreamÀÇ »ç¿ë
2. Socket
1) Socket À̶õ?
2) Project1: ¼¹ö / Ŭ¶óÀ̾ðÆ®
¼¹ö
Ŭ¶óÀ̾ðÆ®
µ¥ÀÌÅÍ Àü¼Û°ú ¼ö½Å
¿¹¿Ü»óȲ ó¸®
Design & Coding
3) Project2: °è»ê±â
ProtocolÀÇ Á¤ÀÇ
Class ¼³°è 1: Client
Class ±¸Çö 1: Client
Class ¼³°è 2: Server
Class ±¸Çö 2: Data Àü¼Û
Class ±¸Çö 3: Client monitoring
Âü°í ¿¹Á¦
4) Project3: äÆÃ ÇÁ·Î±×·¥
ÇÁ·ÎÅäÄÝ Á¤ÀÇ
¼¹ö ¼³°è1: ¼ÒÄÏ Áغñ¿Í Thread¸®½ºÆ® ¸¸µé±â
¼¹ö ¼³°è2: ¸®½ºÆ®¸¦ ÀÌ¿ëÇÏ¿© ¸ðµç thread¿¡ ¸Þ½ÃÁö Àü¼ÛÇϱâ
¼¹ö ¼³°è3: ServerThread±¸Çö
Ŭ¶óÀ̾ðÆ®1: ¼ÒÄÏ ¿¬°á, ¸Þ½ÃÁö Àü¼Û
Ŭ¶óÀ̾ðÆ®2: ¸Þ½ÃÁö ¹Þ±â
Âü°í ¿¹Á¦
--------------------------------------------------------------------------------
Stream for Data Transmision
1. ½ºÆ®¸²À̶õ?
stream
       n. 1 °³¿ï(brook), ½Ã³», °(river). a mountain stream °è·ù(Í¢êü). 2 È帧, ¼ö·ù, ºÐ·ù(ÝÆêü); ÇØ·ù; ±â·ù; ±¤¼±. FLOW ×¾åÞ the Gulf Stream ¸ß½ÃÄÚ ¸¸·ù a stream of tears È帣´Â ´«¹° down (up) [the] stream ÇÏ·ù(»ó·ù)¿¡(·Î). 3 ºñÀ¯Àû [¶§»ç»ó µûÀ§ÀÇ] È帧, °æÇâ, Çü¼¼(trend); »çÁ¶. the stream of history ¿ª»çÀÇ È帧 the stream of thought »çÁ¶. 4 ¿¬¼ÓµÇ´Â °Í, ²÷ÀÓ¾øÀÌ À̾îÁö´Â °Í(»ç¶÷); ¼âµµ. a stream of talk ±×Ä¥ ÁÙ ¸ð¸£´Â À̾߱â. 5 ÄÄÇ»ÅÍ ½ºÆ®¸² [µ¥ÀÌÅÍÀÇ È帧].
|
dic.naver.com¿¡¼ ã¾Æº¸´Ï±î ½ºÆ®¸²ÀÌ ÀÌ·¸°Ô ³ª¿À³×¿ä. ¸ðµç ÄÄÇ»ÅÍ ÇÁ·Î±×·¥Àº Åë½ÅÀ» À§Çؼ ½ºÆ®¸²À» »ç¿ëÇÕ´Ï´Ù. ÇϳªÀÇ ÇÁ·Î±×·¥¿¡¼´Â ±¤¿ª º¯¼ö¸¦ »ç¿ëÇϰųª ÇÔ¼ö¿¡ ÀÎÀÚ¸¦ Àü´ÞÇÏ´Â ¹æ½ÄÀ¸·Î ¾î¶² °ªÀ» ´Ù¸¥ ÇÔ¼ö·Î Àü´ÞÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ¼·Î ´Ù¸¥ µÎ °³ÀÇ ÇÁ·Î±×·¥ÀÎ °æ¿ì¿¡´Â ¾î¶³±î¿ä? µÎ ÇÁ·Î±×·¥Àº ¼·Î ¾î¶² ÇÔ¼ö°¡ ÀÖ´ÂÁöµµ ¸ð¸¦ »Ó´õ·¯ »ó´ëÆíÀÌ ½ÇÇàµÇ°í ÀÖ´ÂÁö ¶Ç´Â ¾î¶² ÀÏÀ» ÇÏ´ÂÁöÁ¶Â÷ ¾Ë ¼ö ¾ø½À´Ï´Ù. ±×·¯ÇÑ »óȲ¿¡¼ ÇϳªÀÇ ÇÁ·Î±×·¥¿¡¼ ´Ù¸¥ ÇÁ·Î±×·¥À¸·Î ¾î¶² °ªÀ» Àü´ÞÇϱâ À§Çؼ ½ºÆ®¸²À» »ç¿ëÇÕ´Ï´Ù.
¸¸ÀÏ ½ºÆ®¸²¿¡ ´ëÇØ¼ ¾Ë°í ÀÖ´Â »ç¶÷À̶ó¸é ¹Ù·Î SocketÀ¸·Î ³Ñ¾î°¡µµ µÉ °Í °°³×¿ä.
½ºÆ®¸²Àº ÀÚ¹Ù¿¡¼¸¸ Áö¿øÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó OSÂ÷¿ø¿¡¼ Áö¿øÀ» ÇÏ´Â ±â´ÉÀÔ´Ï´Ù. À̸»Àº ½ºÆ®¸² Åë½ÅÀ» Çϱâ À§ÇÑ µÎ ÇÁ·Î±×·¥ÀÌ ¹Ýµå½Ã ÀÚ¹Ù·Î ÀÛ¼ºµÉ ÇÊ¿ä´Â ¾ø´Ù´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. Çϳª´Â ÀÚ¹Ù·Î, ´Ù¸¥ Çϳª´Â C·Î ÀÛ¼ºµÉ ¼öµµ ÀÖ°í, ´Ù¸¥ ¾î¶² ¾ð¾î¸¦ »ç¿ëÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù´Â ÀǹÌÀÔ´Ï´Ù.
»ç½Ç À©µµ¿ì³ª À¯´Ð½º, ¸®´ª½º µîÀÇ OS¸¦ ¼³Ä¡ÇÏ¿© ÄÄÇ»Å͸¦ »ç¿ëÇÏ´Â »ç¶÷À̶ó¸é ´©±¸³ª Ç×»ó ½ºÆ®¸²À» »ç¿ëÇÕ´Ï´Ù. ¿¹¸¦ µé¾î À©µµ¿ìÀÇ µµ½ºÃ¢(command prompt) ¶Ç´Â À¯´Ð½º Äֿܼ¡¼ ȸ鿡 ±ÛÀÚ¸¦ Âï´Â °ÍÀ̳ª, ÇÁ¸°ÅÍ¿¡ ÇÁ¸°Æ®¸¦ ÇÏ´Â °ÍÀÌ ±×·¸½À´Ï´Ù. ¿ì¸®´Â °£´ÜÇÏ°Ô System.out.println("³»¿ë..."); ¶ó´Â ¸í·ÉÀ¸·Î ȸ鿡 Âï½À´Ï´Ù. ±×·¯³ª ½ÇÁ¦·Î println()¸Þ¼Òµå¿¡¼´Â ÁÖ¾îÁø ÀÎÀÚÀÇ °ªÀ» Àû´çÇÑ Àå¼Ò¿¡ ½ºÆ®¸²À» »ç¿ëÇÏ¿© Âß º¸³»ÁÖ°Ô µÇÁÒ. ½ºÆ®¸², Áï ÇϳªÀÇ ¿¬¼ÓÀûÀÎ È帧À¸·Î º¸³»´Â °ÍÀÔ´Ï´Ù. ȸ鿡 Ãâ·ÂÇϱâ À§Çؼ´Â ȸéÃâ·ÂÀ» ´ã´çÇÏ´Â À§Ä¡¿¡ ½ºÆ®¸²À¸·Î º¸³»¸é µÇ°í, ÇÁ¸°ÅÍ¿¡ Ãâ·ÂÇÏ°í ½Í´Ù¸é ÇÁ¸°ÅÍÃâ·ÂÀ» ´ã´çÇÏ´Â À§Ä¡¿¡ ½ºÆ®¸²À¸·Î º¸³»¸é µË´Ï´Ù. ÈÀÏ¿¡ ÀúÀåÇÏ´Â °Í, Çϴϸé äÆÃÇÁ·Î±×·¥Ã³·³ µÎ ÇÁ·Î±×·¥ÀÌ Åë½ÅÀ» ÇÏ´Â °Í, ¸ðµÎ »ç½ÇÀº ±×·± ¸ÞÄ«´ÏÁòÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ´ÙÀ½Àº UNIX¿¡¼ ÆÄÀÌÇÁ¶óÀÎÀ̶ó´Â ±â´É ¼Ó¿¡¼ ½ºÆ®¸²ÀÌ ¾î¶»°Ô »ç¿ëµÇ´ÂÁö¸¦ º¸¿©ÁÖ´Â ¿¹ÀÔ´Ï´Ù.
UNIX¸¦ »ç¿ëÇØº» »ç¶÷À̶ó¸é ÆÄÀÌÇÁ¶óÀÎÀ» ¾Ë°í ÀÖÀ»
°ÍÀÔ´Ï´Ù. windows NTÀÇ ¸í·Éâ¿¡¼µµ Áö¿øÇÏ´Â ±â´ÉÀε¥, ls´Â µµ½º¿¡¼ dir°ú °°Àº ±â´ÉÀ» ÇÏÁÒ? SHELL> ls | more ¿Í °°ÀÌ °°ÀÌ ¸í·ÉÀ» ³»¸®¸é ¾î¶»°Ô µÉ±î¿ä? ÈÀÏÀÌ ¸¹Àº °æ¿ì ls¶ó°í ±×³É Çϸé ÀÐÀ» »õµµ ¾øÀÌ È¸éÀÌ Âß ½ºÅ©·Ñ µÇÁÒ. ÇÏÁö¸¸ ¾Õ¿¡¼¿Í °°ÀÌ Çϸé ÇÑ È¸é ¸¸Å¾¿¸¸ Ãâ·ÂµÇ°Ô µË´Ï´Ù. ½ÇÁ¦·Î ÀÌ ÀÛ¾÷Àº µÎ °³ÀÇ ÇÁ·Î±×·¥ÀÌ µ¹°í ÀÖ´Â °ÍÀÔ´Ï´Ù. ls¶ó´Â ÇÁ·Î±×·¥°ú more¶ó´Â ÇÁ·Î±×·¥ÀÌÁÒ. ±×³É ls¶ó°í ÃÆÀ» °æ¿ì¿¡´Â °á°ú¸¦ ȸéÃâ·ÂÀ» ´ã´çÇÏ´Â °÷¿¡ ½ºÆ®¸²À¸·Î º¸³»Áö¸¸ Áö±Ýó·³ ÆÄÀÌÇÁ¶óÀÎÀ¸·Î ¿¬°áÇϸé, ls´Â °á°ú¸¦ ½ºÆ®¸²À¸·Î º¸³»°Ô µÇ°í, À̰ÍÀ» moreÈ£¶ó´Â ÇÁ·Î±×·¥¿¡¼ ½ºÆ®¸²À¸·Î ¹Þ¾Æ¼ ȸ鿡 ÇÑ ÆäÀÌÁö¾¿ º¸¿©ÁÖ°Ô µÇ´Â °ÍÀÔ´Ï´Ù. µÎ ÇÁ·Î±×·¥ÀÌ Åë½ÅÀ» ÇÏ´Â °æ¿ì ÁßÀÇ ´ëÇ¥ÀûÀÎ ¿¹°¡ ¹Ù·Î ÀÌ·¯ÇÑ ÆÄÀÌÇÁ¶óÀÎÀÌÁÒ. Á»´õ ³ª¾Æ°¡¸é ÆÄÀÌÇÁ¶óÀÎÀ» ¿©·¯ °³ »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. SHELL> ls | grep txt | more ÁüÀÛÇÏ´Ù½ÃÇÇ À̹ø¿¡´Â ÇÁ·Î±×·¥ÀÌ 3°³°¡ µ¹°Ô µË´Ï´Ù. ls°¡ ÈÀÏÀÇ ¸í·ÉÀ» »Ì¾Æ¼ ½ºÆ®¸²À¸·Î º¸³»¸é, ±×°ÍÀ» grepÀ̶ó´Â ¸í·ÉÀÌ ¹Þ¾Æ¼ ±×Áß txt¶ó´Â ¹®ÀÚ¿À» Æ÷ÇÔÇÏ´Â ¶óÀθ¸À» °ñ¶ó¼ ´Ù½Ã ½ºÆ®¸²À¸·Î º¸³À´Ï´Ù. ¸¶Áö¸·À¸·Î more¶ó´Â ÇÁ·Î±×·¥ÀÌ ¾Õ¿¡¼¿Í °°ÀÌ ½ºÆ®¸²À¸·Î ¹Þ¾Æ¼ ¾Õ¿¡¼¿Í °°ÀÌ ÇÑ È¸é¾¿ Ãâ·ÂÇÏ°Ô µË´Ï´Ù.
 |
2. ½ºÆ®¸² ÀÔ·Â/ ½ºÆ®¸² Ãâ·Â
½ºÆ®¸²¿¡´Â »ç½Ç ¿©·¯ Á¾·ù°¡ ÀÖ½À´Ï´Ù. byte½ºÆ®¸²,¹®ÀÚ¿½ºÆ®¸²,µ¥ÀÌÅͱ׷¥½ºÆ®¸² µîÀÌ ±×°ÍÀÔ´Ï´Ù. ¿©±â¼´Â »ç½Ç ¹®ÀÚ¿(String)½ºÆ®¸²¸¸À» ´Ù·ç·Á°í ÇÕ´Ï´Ù. byte½ºÆ®¸²°ú ¹®ÀÚ¿ ½ºÆ®¸²Àº 12¶ó´Â Á¤¼ö°¡ "12"·Î °¡´À³Ä(¹®ÀÚ¿½ºÆ®¸²) ¾Æ´Ï¸é 0C(12)ÀÎ ¼ýÀÚ(byte½ºÆ®¸²)À¸·Î °¡´À³ÄÀÇ Â÷À̰¡ ÀÖÀ»»Ó °ÅÀÇ ºñ½ÁÇÕ´Ï´Ù. µ¥ÀÌÅͱ׷¥ ½ºÆ®¸²Àº ¾à°£ ´Ù¸£Áö¸¸ ¹®ÀÚ¿ ½ºÆ®¸²À» ¾Ë°í³ª¸é ±Ý¹æÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.
¾ÕÀÇ UNIXÀÇ ÆÄÀÌÇÁ¶óÀÎ ¿¹Á¦¸¦ º¸°í ¾Ë¾ÆÃ¦ »ç¶÷µµ ÀÖÀ»Å×Áö¸¸, ½ºÆ®¸²Àº ÀԷ°ú Ãâ·ÂÀÌ ÀÖ½À´Ï´Ù. Áï ½ºÆ®¸²À» º¸³»´Â °Í°ú ¹Þ´Â °Í, µÎ °¡Áö µ¿ÀÛÀÌ ÀÖÀ» ¼ö ÀÖ´Ù´Â À̾߱âÀÔ´Ï´Ù. ÇÁ¸°ÅÍ¿¡ Ãâ·ÂÇÏ´Â °æ¿ì, ÇÁ·Î±×·¥¿¡¼´Â ÇÁ¸°ÅͽºÆ®¸²¿¡ º¸³»´Â(Ãâ·Â) ¿ªÇÒÀ» ÇÒ °ÍÀ̰í, ÇÁ¸°ÅÍ´Â ±×°ÍÀ» ½ºÆ®¸²¿¡¼ ¹Þ¾Æ¼(ÀÔ·Â) ÀμâÇÏ°Ô µÇ°ÚÁÒ. ¾ÕÀÇ ÆÄÀÌÇÁ¶óÀÎÀÇ °æ¿ì, ¾Õ¿¡ ÀÖ´Â ÇÁ·Î±×·¥¿¡¼ ½ºÆ®¸²À¸·Î Ãâ·ÂÀ» Çϸé, µÚ¿¡ ÀÖ´Â ÇÁ·Î±×·¥¿¡¼ ±×°ÍÀ» ¹Þ°Ô µÇ´Â °ÍÀÔ´Ï´Ù.
3. StreamÀÇ »ç¿ë
C¿Í °°Àº ´Ù¸¥ ¾ð¾î¿Í ¸¶Âù°¡Áö·Î ÀÚ¹Ù¿¡¼µµ InputStream°ú OutputStreamÀ» Áö¿øÇϰí ÀÖ½À´Ï´Ù. Áï ÀÌ Å¬·¡½ºµéÀ» ÀÔ·Â ¶Ç´Â Ãâ·ÂÇϰíÀÚÇÏ´Â Àû´çÇÑ °´Ã¼¿¡ ¿¬°á½ÃÄÑÁØ ´ÙÀ½ read³ª write ¸Þ¼Òµå µîÀ» »ç¿ëÇÏ¿© ÀԷ°ú Ãâ·ÂÀ» ÇÏ°Ô µÇ´Â °ÍÀÔ´Ï´Ù. ¸¸ÀÏ Å°º¸µå·ÎºÎÅÍ ÀÔ·ÂÀ» ¹Þ¾Æ¼ ȸ鿡 Ãâ·ÂÇϰíÀÚÇϸé,
InputStream in=System.in;
OutputStream out=System.out;
¿Í °°ÀÌ ¼±¾ðÇÏ¿©, in.read()¹®À¸·Î ³»¿ëÀ» ÀÔ·Â ¹Þ¾Æ¼ out.write()¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© Ãâ·ÂÇÒ ¼ö ÀÖ´Ù´Â ¸»ÀÔ´Ï´Ù. ¸¸¾à in°ú outÀÌ °¢°¢ ÈÀÏÀ̳ª, ÇÁ¸°ÅÍ µî¿¡ ¿¬°áµÇ¾î ÀÖ´Ù¸é ¹°·Ð ÈÀÏ¿¡¼ ³»¿ëÀ» Àаųª ¾µ ¼ö ÀÖ°í, ÇÁ¸°ÅÍ¿¡ Ãâ·ÂÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
ÇÏÁö¸¸ ¿©±â¿¡¼´Â ½ºÆ®¸²À» »ç¿ëÇÏ´Â ÀϹÝÀûÀÎ ¹æ¹ý¿¡ ´ëÇØ¼´Â ¼³¸íÇÏÁö ¾Ê°í, ¹Ù·Î ¼ÒÄÏÀ¸·Î ³Ñ¾î°¡µµ·Ï ÇϰڽÀ´Ï´Ù. ÀÚ¹Ù¿¡¼´Â ȸ鿡 Ãâ·ÂÇϱâ À§Çؼ ÄܼÖ(ȸé)À» »ç¿ëÇÏ´Â °æ¿ì´Â °ÅÀÇ ¾ø½À´Ï´Ù. ÇÏÁö¸¸ ÄܼÖ(Űº¸µå)¿¡¼ ÀԷ¹ޱâ À§ÇÑ °æ¿ì³ª, ÇÁ¸°ÅÍ¿¡ Ãâ·ÂÇϰíÀÚÇÏ´Â °æ¿ì, ÈÀÏÀÇ ³»¿ëÀ» Àаųª ¾²´Â °æ¿ì¿¡´Â ¹Ýµå½Ã ½ºÆ®¸²À» »ç¿ëÇÕ´Ï´Ù. ¶ÇÇÑ ¹Ù·Î µÚ¿¡¼ ´Ù·ê, TCP/IP ProtocolÀ» ÀÌ¿ëÇÑ ÀÎÅͳݿ¡¼ÀÇ Åë½Å¿¡¼µµ ¹°·Ð ½ºÆ®¸²À» »ç¿ëÇÕ´Ï´Ù.
--------------------------------------------------------------------------------
Socket in TCP/IP protocol
1. Socket
¿©±â¼ºÎÅͰ¡ À̹ø ±Û¿¡¼ÀÇ º»·ÐÀÔ´Ï´Ù. »ç½Ç swingÀ̳ª awt°°Àº Ãß»óÀ©µµ¿ìŸŶÀ» »ç¿ëÇϸé Űº¸µå·ÎºÎÅÍ ÀԷ¹޴ °ÍÀ» Á÷Á¢ ÀÛ¼ºÇÒ Çʿ䵵 ¾ø°í, ÇÁ¸°ÅÍ Ãâ·Â ºÎºÐµµ »ç½Ç ³²ÀÌ ÀÛ¼ºÇØ ³õÀº Äڵ带 º¹»çÇØ¼ ¾à°£ ¼öÁ¤ÇÏ¸é ½±°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÈÀÏ ÀÔÃâ·Âµµ ½ºÆ®¸²À» Á¦´ë·Î ¼³Á¤¸¸ ÇØ³õÀ¸¸é ȸ鿡 Ãâ·ÂÇϵíÀÌ °£´ÜÇÏ°Ô ÀԷ°ú Ãâ·ÂÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ socketÀ» ÀÌ¿ëÇÑ ÇÁ·Î±×·¥¸¸Àº ±×·¸Áö°¡ ¾Ê½À´Ï´Ù. ¹°·Ð °³³äÀº ½ºÆ®¸²À» »ç¿ëÇÏ´Â ´Ù¸¥ ÀÛ¾÷µé°ú Å©°Ô ´Ù¸£Áö ¾ÊÁö¸¸ ±â¼úÀûÀÎ ¸é¿¡ ÀÖ¾î¼ ¿øÇÏ´Â ±â´ÉÀ» ±¸ÇöÇÏ´Â °ÍÀÌ ±×¸® ½±Áö¸¸Àº ¾Ê±â ¶§¹®ÀÔ´Ï´Ù.
ÀÌÁ¦ºÎÅÍ Á¤½ÅÀ» ¶È¹Ù·Î Â÷¸®¼¼¿ä. À̱ۿ¡¼´Â ¼ÒÄÏÀÇ ±¸Á¶³ª TCP/IP¿Í °°Àº ÀϹÝÀûÀÎ ³×Æ®¿öÅ© Á¤º¸¿¡ ´ëÇØ¼´Â »ý·«Çϵµ·Ï ÇϰڽÀ´Ï´Ù. ¹Ì¸® ¾Ë°í ÀÖ¾î¾ß ÇÑ´Ù´Â ¾ê±â´Â ¾Æ´Ï°í ÀÚ¼¼È÷´Â ¸ô¶óµµ µÈ´Ù´Â ¸»ÀÔ´Ï´Ù. À̱ۿ¡¼´Â ¸ÕÀú ¼ÒÄÏÀ» Á¤ÀÇÇØ¼ ½ºÆ®¸²À» »ç¿ëÇÏ¿© ÀԷ°ú Ãâ·ÂÀ» ¹Þ´Â °ÍÀ» °£´ÜÈ÷ ±¸ÇöÇÏ´Â ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇØº¸°í, ¸¶Áö¸·¿¡ °¡¼´Â ÇϳªÀÇ ¼¹ö¿¡ ¿©·¯ °³ÀÇ Å¬¶óÀÌ¾ðÆ®°¡ Á¢¼ÓÇÏ´Â ¸ÖƼ Ŭ¶óÀÌ¾ðÆ® Ã¤ÆÃÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇϵµ·Ï ÇϰڽÀ´Ï´Ù.
ÇÁ·ÎÁ§Æ®1. ¼¹ö¿Í Ŭ¶óÀ̾ðÆ®
¿©±â¼ ¿Ï¼ºµÉ ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°Àº ¼ø¼·Î ÀÛµ¿À» ÇÏ°Ô µË´Ï´Ù.
1. ¼¹ö°¡ ¼ÒÄÏÀ» »ý¼ºÇÏ°í ¿¬°áÀ» ±â´Ù¸°´Ù.
2. Ŭ¶óÀÌ¾ðÆ®¿¡¼ ¼¹öÀÇ ¼ÒÄÏ¿¡ ¿¬°áÇÑ´Ù.
3. Ŭ¶óÀÌ¾ðÆ®¿¡¼ µ¥ÀÌÅ͸¦ Àü¼Û´Ù.
4. ¼¹ö¿¡¼ µ¥ÀÌÅ͸¦ ¹Þ¾Æ¼ ȸ鿡 Ãâ·ÂÇÑ´Ù.
5. ¼¹ö¿Í Ŭ¶óÀ̾ðÆ®ÀÇ ¼ÒÄÏ ¿¬°áÀ» ²÷´Â´Ù.
ÀÌ ÇÁ·ÎÁ§Æ®¿¡¼´Â ¹°·Ð µÎ °³ÀÇ ÇÁ·Î±×·¥À» ÀÛ¼ºÇØ¾ß ÇϰÚÁÒ. ¼¹ö Âʰú Ŭ¶óÀÌ¾ðÆ® ÂÊÀÔ´Ï´Ù.
°¢°¢ SocketServer.java ¿Í SocketClient.java ·Î Çϱâ·Î ÇÏÁÒ.
¿¹Á¦ ÇÁ·Î±×·¥: SocketServer.java / SocketClient.java
¿ì¼±Àº À§ÀÇ ¿¹Á¦ ÇÁ·Î±×·¥À» ´Ù¿î¹Þ¾Æ¼ ½ÇÇà½ÃÄѺ¸±â¸¦ ¹Ù¶ø´Ï´Ù. ÄܼÖ(À©µµ¿ì¿¡¼´Â ¸í·É ÇÁ·ÒÇÁÆ® = ÇÑ±Û MS-DOS)¸¦ µÎ °³¸¦ ¶ç¿ö¾ß°ÚÁÒ. ¾Æ¹« Äֿܼ¡¼³ª µÎ ÇÁ·Î±×·¥À» ÄÄÆÄÀÏ ÇÕ´Ï´Ù.
SHELL> javac SocketServer.java
SHELL> javac SocketClient.java
ÄÄÆÄÀÏ µÈ ÈÄ ½ÇÇà½Ãŵ´Ï´Ù. ÇϳªÀÇ Äֿܼ¡¼ ¼¹ö¸¦ ¸ÕÀú ½ÇÇà½Ãŵ´Ï´Ù. ÆÄ¶ó¹ÌÅÍ·Î Æ÷Æ®°ªÀ» Áִµ¥, ÁÖÁö ¾ÊÀ¸¸é 5777¹øÀÌ ÀâÈ÷°Ô µË´Ï´Ù. Æ÷Æ®¹øÈ£´Â 3000¹ø ÀÌ»óÀÇ °ªÀ» ÁÖ´Â°Ô ÁÁ½À´Ï´Ù.
SHELL> java SocketServer 6000
±×·¯¸é Æ÷Æ®¹øÈ£¿Í Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ±â´Ù¸°´Ù´Â ¸Þ½ÃÁö°¡ ³ª¿À°Ô µË´Ï´Ù. 6000Àº Æ÷Æ® ¹øÈ£ÀÔ´Ï´Ù. ÀÌ °ªÀº »ý·«°¡´ÉÇÏ°í »ý·«Çϸé 5777¹ø Æ÷Æ®¸¦ »ç¿ëÇÏ°Ô µË´Ï´Ù. ±×·¯¸é Ŭ¶óÀÌ¾ðÆ®¸¦ ½ÇÇà½Ãŵ´Ï´Ù. ÆÄ¶ó¹ÌÅÍ´Â IP¿Í Æ÷Æ®¹øÈ£¸¦ ÁÝ´Ï´Ù.
SHELL> java SocketClient 6000 211.35.136.174
Æ÷Æ®¹øÈ£´Â ¹°·Ð ¾ÕÀÇ ¼¹ö¿¡¼ ¼³Á¤ÇÑ Æ÷Æ®¹øÈ£¿Í °°¾Æ¾ß ÇϰÚÁÒ. IP´Â ÀÚ½ÅÀÇ ÄÄÇ»ÅÍ ¾ÆÀÌÇǸ¦ ÁÖ¸é µË´Ï´Ù. IP¸¦ ÁÖÁö ¾ÊÀ¸¸é 127.0.0.1¿¡ ¿¬°áÇϴµ¥, º¸Åë ÀÌ ¹øÈ£´Â ·ÎÄà ȣ½ºÆ®, Áï ÀÚ±â ÀÚ½ÅÀ» ÀǹÌÇÕ´Ï´Ù. ¸¸¾à ÀÌ ¹øÈ£·Î µÇÁö ¾Ê°Å³ª ´Ù¸¥ ÄÄÇ»ÅÍ¿¡¼ SocketServer¸¦ ½ÇÇà½ÃÄ×´Ù¸é IP¸¦ ¹Ýµå½Ã ½áÁÖ¾î¾ß ÇϰÚÁÒ. ¾Æ¹«Æ° ¼¹ö¿Í Æ÷Æ® ¹øÈ£°¡ ÀÏÄ¡Çϰí IP¸¦ Àû´çÈ÷ ÁÖ¾ú´Ù¸é Ŭ¶óÀÌ¾ðÆ®´Â ¼¹ö¿¡ ¿¬°áÇÏ¿© ¿±ÛÀÚÀÇ µ¥ÀÌÅ͸¦ º¸³½ ÈÄ Á¾·áÇÏ°Ô µË´Ï´Ù. ¼¹öµµ ¼ÒÄÏÀ» ²÷°í Á¾·áÇÏ°Ô µË´Ï´Ù.
À§ÀÇ ¿¹Á¦¸¦ ½ÇÇà½ÃÄѺ¸¾Ò´Ù¸é, ¾ÆÁ÷ ¼Ò½º´Â º¸Áö ¸»°í °øºÎ¸¦ ½ÃÀÛÇØº¾½Ã´Ù. ¼ÒÄÏÀº TCPÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ¿© Åë½ÅÀ» Çϴµ¥ ¾²ÀÎ´Ù°í ¾Õ¿¡¼ ¾ê±âÇß½À´Ï´Ù. µû¶ó¼ ¼ÒÄÏÀÇ ±âº»Àº IP¿Í port°ÚÁÒ. À̰͵éÀÌ °¢°¢ ¹«¾ùÀ» ÀǹÌÇÏ´ÂÁö´Â ¾ËÁö ¸øÇصµ »ó°ü¾ø½À´Ï´Ù. ¾Æ¹«Æ° IP´Â ÄÄÇ»Å͸¶´Ù °¡Áø °íÀ¯ÇÑ ÁÖ¼ÒÀ̰í, port´Â Åë½ÅÀ» À§ÇÑ ¿¬°á ¶óÀΰú °°Àº °ÍÀ̶ó°í¸¸ ¾Ë°í ÀÖÀ¸¸é µË´Ï´Ù. ¾Æ¹«Æ° ¼ÒÄÏÀ» »ç¿ëÇÏ¿© ¾î¶² ÇÁ·Î±×·¥°ú ¿¬°áÀ» Çϱâ À§Çؼ´Â ±× ÇÁ·Î±×·¥ÀÌ ÀÖ´Â ÄÄÇ»ÅÍÀÇ IP¿Í ¼ÒÄÏÀ» ¸¸µç port¹øÈ£¸¦ ¾Ë°í ÀÖ¾î¾ß ÇÑ´Ù´Â °Í¸¸ ±â¾ïÇÏ¸é µË´Ï´Ù.
1) ¼¹ö ¼ÒÄÏ ÁغñÇϱâ( SocketServer.java )
Åë½ÅÀ» Çϱâ À§Çؼ´Â ¸ÕÀú ¼¹ö¿¡¼ ¼ÒÄÏÀ» ÁغñÇØ¾ß ÇÕ´Ï´Ù. ÀÚ¹Ù¿¡¼´Â ±×°ÍÀ» À§ÇØ ServerSocketÀ̶ó´Â Ŭ·¡½º°¡ Á¦°øµË´Ï´Ù. ´ÙÀ½°ú °°ÀÌ Ãʱâȸ¦ ÇÏ¸é ¼¹ö ¼ÒÄÏÀÌ ¸¸µé¾îÁý´Ï´Ù.
À̰ÍÀº java.net ÆÐŰÁö¿¡ µé¾îÀÖ½À´Ï´Ù.
ServerSocket ¼ÒÄϺ¯¼öÀ̸§=new ServerSocket(Æ÷Æ®¹øÈ£);
Æ÷Æ®¹øÈ£´Â Á¤¼öÀ̰í, ¼ÒÄϺ¯¼öÀ̸§Àº ¾Æ¹«°ÍÀ̳ª º¯¼ö·Î ¾µ ¼ö ÀÖ´Â °ÍÀ» ½áÁÖ¸é µË´Ï´Ù. ¿¹¸¦ µé¸é ServerSocket srvSocket=new ServerSocket(5777); ¶ó°í ¼±¾ðÇÒ ¼ö ÀÖ°ÚÁÒ.
´ÙÀ½Àº ÀÌ ¼¹ö¼ÒÄÏÀ» »ç¿ëÇÏ¿© Ŭ¶óÀÌ¾ðÆ®¿Í Åë½ÅÇÒ ´Ù¸¥ ¼ÒÄÏÀ» ¸¸µé¾îÁÖ´Â ÀÛ¾÷ÀÔ´Ï´Ù. ¼¹ö ÂÊ¿¡¼´Â ¹Ýµå½Ã µÎ °³ÀÇ ¼ÒÄÏÀÌ ÇÊ¿äÇÕ´Ï´Ù. Çϳª´Â ¼¹ö¿ë ¼ÒÄÏÀε¥ À̰ÍÀ¸·Î´Â Åë½ÅÀ» ÇÒ ¼ö°¡ ¾ø°í ´ÜÁö Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ±â´Ù¸³´Ï´Ù. µû¶ó¼ Ŭ¶óÀÌ¾ðÆ®¿Í ¿¬°áÀÌ µÇ¸é ½ÇÁ¦·Î Åë½ÅÀ» Çϱâ À§Çؼ´Â ¼ÒÄÏÀ» Çϳª ´õ ¸¸µé¾î¼ ¿¬°áÇØÁÖ¾î¾ß ÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.
ÀÌ ¼ÒÄÏÀº ¼¹ö¼ÒÄÏ.accept()¸í·ÉÀ¸·Î ¸¸µé¾îÁÙ ¼ö ÀÖ½À´Ï´Ù.
Socket soc=srvSocket.accept();
¿©±â¼ srvSocketÀº ¾Æ±î ¼±¾ðÇØÁØ ¼¹ö¼ÒÄÏÀÇ À̸§ÀÌ µË´Ï´Ù. Ŭ·¡½ºÀÇ À̸§ÀÌ SocketÀÓÀ» ´«¿©°Ü º¸¾Æ¾ß ÇÕ´Ï´Ù. Ŭ¶óÀÌ¾ðÆ®¿¡¼µµ ÀÌ ¼ÒÄÏÀ» »ç¿ëÇÏ¿© ¿¬°áÇÏ°Ô µË´Ï´Ù.
´ÙÀ½Àº ÀÔ·ÂÀ» À§ÇÑ ½ºÆ®¸²À» ¼±¾ðÇÏ´Â ºÎºÐÀÔ´Ï´Ù. ¹°·Ð ¸¸µé¾î ³õÀº ¼ÒÄÏ¿¡¼ ½ºÆ®¸²À» ¾ò¾î¿Í¾ß ÇϰÚÁÒ. ½ºÆ®¸²Àº java.io ÆÐŰÁö¿¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.
InputStream is=soc.getInputStream();
ÀÌ·¸°Ô is´Â ½ºÆ®¸²º¯¼ö À̸§À̰í, soc´Â ¾Õ¿¡¼ ¼±¾ðÇÑ ¼ÒÄÏÀÇ À̸§ÀÔ´Ï´Ù. ÀÌ·¸°Ô µÇ¸é ÀԷ½ºÆ®¸²ÀÌ ¾ò¾îÁ³½À´Ï´Ù. ±×¸®°í³ª¼, ÀÌ ½ºÆ®¸²¿¡¼ ÀÔ·ÂÀ» ¹Þ±âÀ§Çؼ´Â ÀÌ ½ºÆ®¸²À» ÀÐÀ» ¼ö ÀÖ´Â Reader¸¦ Á¤ÀÇÇØ¾ß¸¸ ÀÐÀ» ¼ö°¡ ÀÖ°ÚÁÒ. ¸¶Ä¡ ºñµð¿ÀÅ×ÀÌÇÁ¿Í VTR°ú °°Àº °ü°èÀÔ´Ï´Ù. VTR¿¡ ºñµð¿À Å×ÀÌÇÁ¸¦ ³Ö¾îÁÖ¾î¾ß ÇϰÚÁÒ.
InputStreamReader isr=new InputStreamReader(is);
¿©±â¼ is´Â ¾Õ¿¡¼ ¼±¾ðÇÑ inputstreamÀ̰í, isrÀº InputStreamReaderÀÇ À̸§ÀÔ´Ï´Ù. À̰ÍÀ¸·Î ¼¹öÂÊ¿¡¼ ¼ÒÄÏÀ» ÁغñÇÏ´Â °ÍÀº ¸ðµÎ ³¡³µ½À´Ï´Ù. µ¥ÀÌÅ͸¦ Àбâ À§Çؼ´Â InputStreamReader¿¡ ÀÖ´Â read()¸Þ¼Òµå¸¦ »ç¿ëÇÏ¸é µË´Ï´Ù.
Áï, int a=isr.read();¿Í °°ÀÌ Çϸé a¿¡ ÇÑ ±ÛÀÚ°¡ ÀԷµ˴ϴÙ. int°ªÀ¸·Î ³Ñ¾î¿À´Âµ¥, ¹®ÀÚ·Î ¹Ù²Ù±â À§Çؼ´Â Çüº¯È¯(type casting)À» ÇØÁÖ¸é µÇ°ÚÁÒ.
char a=(char) isr.read(); ¿Í °°ÀÌ ÇÏ¸é µÇ°ÚÁÒ.
µé¾î¿À´Â ¹®ÀÚµéÀ» ÇϳªÀÇ ¹®ÀÚ¿¿¡ ÀúÀåÇϱâ À§Çؼ´Â str=str+(char)isr.read(); ¿Í °°ÀÌ ¹®ÀÚ¿¿¡ ´õÇØÁÖ¸é µË´Ï´Ù.
2) Ŭ¶óÀÌ¾ðÆ® ¼ÒÄÏ (SocketClient.java)
Ŭ¶óÀÌ¾ðÆ® ¼ÒÄÏÀº ¼¹ö ¼ÒÄϺ¸´Ù ÈξÀ ½±½À´Ï´Ù. ¼¹ö ¼ÒÄÏÀº Çʿ䰡 ¾ø°í, InputStreamÀ» OutputStreamÀ¸·Î, InputStreamReader¸¦ OutputStreamWriter·Î ¹Ù²Ù±â¸¸ ÇÏ¸é µË´Ï´Ù.
¸ÕÀú ¼ÒÄÏÀ» ¸¸µé¾î¾ß°ÚÁÒ. ¾Õ¿¡¼ »ý¼ºÇÑ ¼¹öÀÇ IP¿Í port¹øÈ£¸¦ ¾Ë°í ÀÖ¾î¾ß ÇÕ´Ï´Ù.
Socket soc=new Socket("127.0.0.1", 5777);
¿©±â¼ "127.0.0.1"Àº IPÁÖ¼ÒÀÔ´Ï´Ù. ¾Õ¿¡¼ ¼³¸íÇÑ´ë·Î À̰ÍÀº ÀÚ±â ÀÚ½ÅÀ» ÀǹÌÇÕ´Ï´Ù. ¸¸¾à ¼¹ö°¡ ´Ù¸¥ ÄÄÇ»ÅÍ¿¡ ÀÖ´Ù¸é ±× ÄÄÇ»ÅÍÀÇ IP¸¦ Àû¾î¾ß ÇÕ´Ï´Ù. 5777Àº Æ÷Æ®¹øÈ£ÀÔ´Ï´Ù. soc´Â ¹°·Ð ¼ÒÄÏÀÇ À̸§À¸·Î º¯¼ö·Î ¾µ ¼ö ÀÖ´Â °ÍÀ» Àû¾îÁÖ¸é µË´Ï´Ù. ¿©±â¼ ¾Æ±î ´«¿©°ÜºÁ¾ß ÇÑ´Ù´ø °ÍÀ» ±â¾ïÇØ¼ Socket°ú µ¿ÀÏÇÑ Å¬·¡½º¸¦ »ç¿ëÇϰí ÀÖ´Ù´Â °ÍÀ» È®ÀÎÇϼ¼¿ä.
´ÙÀ½Àº ÀÌ ¼ÒÄÏ¿¡¼ ½ºÆ®¸²À» »ý¼ºÇÏ´Â °ÍÀÔ´Ï´Ù. ¼¹ö·Î µ¥ÀÌÅ͸¦ º¸³»´Â °ÍÀÌ´Ï±î ´ç¿¬È÷ InputStreamÀÌ ¾Æ´Ï¶ó OutputStreamÀ» »ç¿ëÇØ¾ß ÇϰÚÁÒ.
OutputStream os=soc.getOutputStream();
ÀÌ ¹®ÀåÀÌ Àß ÀÌÇØ°¡ ¾È°¡¸é ¾ÕÀÇ ¼¹ö ÂÊÀÇ InputStreamÀ» ¸¸µå´Â ºÎºÐÀ» Àо¼¼¿ä. ÀÌÁ¦ ¾Õ¿¡¼¿Í ¸¶Âù°¡Áö·Î OutputStreamWriter¸¦ ¸¸µé¾îÁà¾ß ÇϰÚÁÒ.
OutputStreamWriter osw=new OutputStreamWriter(os);
ÀÌ·¸°Ô Çϸé writer±îÁö ¹«»çÈ÷ ¸¸µé¾îÁ³½À´Ï´Ù. ÀÌÁ¦ µ¥ÀÌÅ͸¦ Àü¼ÛÇϱâ À§Çؼ´Â write()¸Þ¼Òµå¸¦ »ç¿ëÇÏ¸é µË´Ï´Ù. ±¸Ã¼ÀûÀ¸·Î ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö´Â ´ÙÀ½¿¡¼ ¹è¿ì±â·Î ÇսôÙ.
3) ½ºÆ®¸²À» ÅëÇÑ µ¥ÀÌÅÍÀÇ ÀÔÃâ·Â
¾Õ¿¡¼ InputStreamReader¿Í OutputStreamReader¸¦ ¸¸µé¾ú½À´Ï´Ù. ÀÌÁ¦ ±× Ŭ·¡½º¿¡ ±¸ÇöµÈ ¸Þ¼Òµå(read, write)¸¦ »ç¿ëÇØ¼ ±×³É ÀÐ°í ¾²¸é µË´Ï´Ù.
ÀÚ¹Ù ½ºÆå ¿¡¼ InputStreamReader¿Í OutputStreamReader¸¦ ã¾Æ º¸¼¼¿ä.
ã±â°¡ ½±Áö´Â ¾Ê°ÚÁö¸¸, ¾ÕÀ¸·Î ÀÚ¹Ù °øºÎ¸¦ Çϱâ À§Çؼ´Â ÇÏ·ç¿¡µµ ¼ö½Ê¹ø ¾¿ ÇØ¾ß ÇÏ´Â ÀÏÀÌ´Ï±î ½º½º·Î ã¾Æº¸¼¼¿ä.
InputStreamReader¿¡ º¸´Ï±î read ¸Þ¼Òµå°¡ µÎ °³·Î Á¤ÀǵǾî Àֳ׿ä.
- int read();
- void read(char[] chr, int offset, int length);
¾ÕÀÇ °ÍÀº ¼³¸í¿¡ ÇÑ ±ÛÀÚ¸¦ ¾ò¾î¿Â´Ù°í ÀûÇôÀֳ׿ä. Áï, a=isr.read();¶ó°í Çϸé a¿¡´Â ÇÑ ±ÛÀÚ¸¸ µé¾î°¡ ÀÖ´Ù´Â ¶æÀÔ´Ï´Ù. a´Â Á¤¼öÇü(int)À̾î¾ß ÇÕ´Ï´Ù. À̰ÍÀ» ¹®ÀÚ·Î ¹Ù²Ù±â À§Çؼ´Â Çüº¯È¯(type casting)À» ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. µÚÀÇ °ÍÀº ¸î ¹øÂ° ±ÛÀÚ(offset)ºÎÅÍ ¸î ±ÛÀÚ(length)¸¦ ¾ò¾î¿Í¼ charÀÇ ¹è¿¿¡ ³Ö´Â´Ù´Â ÀǹÌÀÎ °Í °°½À´Ï´Ù.
public static void main(String args[]) {
InputStreamReader isr=new InputStreamReader(new ServerSocket(5777).accept().getInputStream());
String str="";
for (int i=0; i<10; i++) {
str="str+(char)isr.read();"
}
System.out.println(str);
isr.close();
}
ÀÚ ÇÁ·Î±×·¥ÀÌ Çϳª ¿Ï¼ºµÇ¾ú½À´Ï´Ù. InputStreamReader¸¦ ¸¸µé±â À§ÇØ ServerSocketÀ» ¸¸µé°í ±×°ÍÀÇ accept()¸Þ¼Òµå¸¦ ÀÌ¿ëÇØ¼ SocketÀ» ¸¸µé°í ´Ù½Ã InputStreamÀ» ¸¸µå´Â ¸ðµç °úÁ¤À» ±×³É ÇÑ ÁÙ·Î ³¡³Â½À´Ï´Ù. °ýÈ£ÀÇ °¡Àå ¾ÈÂʺÎÅÍ Â÷±ÙÂ÷±Ù Àо¸é ¾Õ¿¡¼ ¼³¸íÇÑ ¼ø¼·Î ¸¸µé¾îÁÖ¾ú´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½¿¡´Â strÀ» StringÀ¸·Î ¼±¾ðÇØÁÖ°í for¹®À¸·Î ¿°³ÀÇ ¹®ÀÚ¸¦ Àоî¿Í¼ str¿¡ ´õÇØÁÖ°í¼ ´Ù½Ã strÀ» Ãâ·ÂÇÏ´Â ÇÁ·Î±×·¥À̳׿ä.
ÁÖÀÇÇØ¾ß ÇÒ Á¡Àº ÀÌ ÄÚµå´Â ½ÇÇàµÇÁö ¾Ê´Â´Ù´Â Á¡ÀÔ´Ï´Ù. ¹Ù·Î ´ÙÀ½¿¡¼ ÇÒ exception󸮸¦ º¸°í³ª¸é ÀÌ Äڵ带 ¼öÁ¤ÇÏ¿© ½ÇÇà½Ãų ¼ö ÀÖ½À´Ï´Ù. Àû´çÇÑ ÆÐŰÁö(java.io, java.net)¸¦ importÇϰí, exceptionÀ» ó¸®Çؼ, ÀÌ Å¬·¡½º¸¦ SocketServer.java Ŭ·¡½º¿¡ ³Ö¾îÁÖ¸é ¼¹ö´Â ¿Ï¼ºµË´Ï´Ù.
Ŭ¶óÀÌ¾ðÆ®ºÎºÐÀº Á»´õ ½±½À´Ï´Ù.
public static void main(String args[]) {
OutputStreamWriter osw=new
OutputStreamWriter(new Socket("127.0.0.1",5777).getOutputStream());
String str="0123456789";
osw.write(str,0,10);
osw.flush();
osw.close();
}
¾Æ±î¿Í ¸¶Âù°¡Áö·Î spec¿¡¼ ã¾Æº¸¸é OutputStreamWriterŬ·¡½º¿¡´Â write()°¡ ¿©·¯ °³·Î Á¤ÀǵǾî ÀÖ½À´Ï´Ù. ÇÑ ±ÛÀÚ¾¿ Àü¼ÛÇÏ´Â °Íµµ ÀÖ°í, Áö±Ýó·³ »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. Áö±ÝÀº strÀÇ 0¹øÂ° ±ÛÀÚºÎÅÍ 10°³ÀÇ ±ÛÀÚ¸¦ Àü¼ÛÇ϶ó´Â ÀǹÌÀÔ´Ï´Ù. osw.flush();´Â ±ÛÀÚ¸¦ ½ÇÁ¦·Î Àü¼ÛÇ϶ó´Â ÀǹÌÀÔ´Ï´Ù. À̰ÍÀ» ½áÁÖÁö ¾ÊÀ¸¸é ¸Þ½ÃÁö¸¦ ¹Þ´Â ÂÊ¿¡¼ ½ÇÁ¦·Î ÀÐÀ» ¼ö°¡ ¾ø½À´Ï´Ù.
¹æ±Ý ÇØº¸´Ï±î, À§ÀÇ ÄÚµåµéÀº ÀüºÎ ½ÇÇàÀÌ µÇ³×¿ä. ¹°·Ð exception󸮸¦ ÇØÁà¾ß ÇÕ´Ï´Ù. ±×·³ ½Ã°£ ³¶ºñÇÏÁö ¸»°í ¾î¼ exception󸮸¦ ¹è¿öº¾½Ã´Ù.
4) exceptionó¸®
exceptionÀº ´Ü¾î ¶æ ±×´ë·Î ¿¹¿Ü»óȲÀ» ÀǹÌÇÕ´Ï´Ù. ¸¸¾à ¼¹ö¿¡¼ ¼¹ö¼ÒÄÏÀ» ¸¸µå´Âµ¥ »ç¿ëÇϰíÀÚÇÏ´Â Æ÷Æ®(¿¹¸¦ µé¸é 5777)°¡ »ç¿ëÁßÀ̶ó°í ÇØº¾½Ã´Ù. ±×·¯¸é ¼ÒÄÏÀ» ¸¸µé ¼ö°¡ ¾ø°ÚÁÒ. ÇÏÁö¸¸ À̰ÍÀº ÄÄÆÄÀÏÇÒ¶§´Â ¿¡·¯°¡ ³ªÁö ¾Ê½À´Ï´Ù. ÄÄÆÄÀÏÇÒ¶§ Æ÷Æ®¸¦ »ç¿ëÇÏ´ÂÁö¸¦ °Ë»çÇØº¸´Â °ÍÀº Àǹ̰¡ ¾ø°ÚÁÒ? ÄÄÆÄÀÏÇÒ¶§´Â Æ÷Æ®°¡ »ç¿ëÁßÀÌ ¾Æ´Ï´õ¶óµµ ½ÇÇàÇÒ¶§ »ç¿ëÁßÀÏ ¼öµµ ÀÖÀ¸´Ï±î¿ä. Ŭ¶óÀÌ¾ðÆ®¿¡¼ ¼ÒÄÏÀ» ¸¸µé¶§µµ ¸¶Âù°¡ÁöÀÔ´Ï´Ù. ¸¸¾à ¼¹ö¸¦ ½ÇÇà½ÃŰÁö ¾ÊÀº »óȲÀ̶ó¸é, Ŭ¶óÀÌ¾ðÆ®¸¦ ¾Æ¹«¸® Àß ÀÛ¼ºÇؼ ½ÇÇà½ÃŰ´õ¶óµµ ¼ÒÄÏÀ» ¿¬°áÇÒ ¼ö°¡ ¾ø°ÚÁÒ. ÀÌ·¯ÇÑ »óȲÀ» ¿¹¿Ü»óȲ(exception)À̶ó°í ÇÕ´Ï´Ù. ¿¹¿Ü»óȲÀº ¿À·ù(error)¿Í´Â ÀüÇô ´Ù¸¥ °ÍÀÔ´Ï´Ù. ¿¡·¯´Â »ç¿ëÀÚ°¡ ÄÚµùÇÒ¶§ ½Ç¼öÇØ¼ ÄÄÆÄÀÏÁ¶Â÷ ¾ÈµÇ´Â »óȲÀÌÁö¸¸, ¿¹¿Ü»óȲÀº ÄÚµùÀº ÀߵǾú´õ¶óµµ ½Ã½ºÅÛÀÇ »óȲ¿¡ µû¶ó¼ ¹ß»ýÇÏ´Â °ÍÀÔ´Ï´Ù. ¿¹ÄÁ´ë, ¿¡·¯´Â ÄÄÆÄÀÏÇÒ¶§, ¿¹¿Ü»óȲÀº ½ÇÇàÇÒ¶§ ¹ß»ýÇÑ´Ù´Â °ÍÀÔ´Ï´Ù.
¿¹¿Ü»óȲÀ» Àß Àâ¾ÆÁÖ´Â °ÍÀº ´ë´ÜÈ÷ Áß¿äÇÕ´Ï´Ù. Áö±Ýó·³ ¼¹ö ¼ÒÄÏÀ» ¸¸µé¾úÀ»¶§ ¿¹¿Ü»óȲÀÌ ¹ß»ýÇÏ¿© ½Ã½ºÅÛÀÇ ÀÚ¿ø(¸Þ¸ð¸®, CPU»ç¿ë µî)À» ¹ÝȯÇÏÁö ¾Ê´Â´Ù¸é ÄÄÇ»Å͸¦ ÀçºÎÆÃÇϱâ Àü¿¡´Â °è¼ÓÇØ¼ ½Ã½ºÅÛÀÇ ÀÚ¿øÀ» Àâ¾Æ¸Ô±â ¶§¹®¿¡ ½Ã½ºÅÛÀ» ´À·ÁÁö°ÔÇÏ´Â ¿øÀÎÀÌ µÉ ¼ö ÀÖÁÒ. ÀÚ¹Ù¿¡¼´Â ¹°·Ð ±×·± ÀÏÀÌ ¹ß»ýÇÏÁö ¾Ê½À´Ï´Ù. ÀÚ¹Ù ¹öÃß¾ó ¸Ó½Å(java.exe)À» ÅëÇØ¼ ½ÇÇàÀÌ µÇ±â ¶§¹®¿¡ java.exe°¡ ½ÇÇàÀ» ÁßÁöÇÏ¸é ¸ðµç ÀÚ¿øÀº ÀÚµ¿À¸·Î ¹ÝȯµÇ±â ¶§¹®ÀÔ´Ï´Ù. ÇÏÁö¸¸ C¿Í °°Àº ÇÁ·Î±×·¥¿¡¼´Â ¿¹¿Ü»óȲ¿¡¼ ÀûÀýÈ÷ ÀÚ¿øÀ» ¹ÝÈ¯ÇØÁÖÁö¾ÊÀ¸¸é ¾Õ¿¡¼ ¼³¸íÇÑ ÀÏÀÌ ¹ß»ýÇÏ°Ô µË´Ï´Ù.
¾Æ¹«Æ° ¿¹¿Ü »óȲÀ» Àâ¾ÆÁÖ´Â °ÍÀº ÇÁ·Î±×·¥ÀÇ ½Å·Ú¼ºÀ» ³ôÀ̴µ¥¿¡ ¸Å¿ì Áß¿äÇÕ´Ï´Ù. ¼ÒÄÏÀ» ¸¸µé ¼ö ¾øÀ»¶§´Â ÃÖ¼ÒÇÑ ¼ÒÄÏÀ» ¸¸µé ¼ö ¾ø´Ù´Â ¸Þ½ÃÁö Á¤µµ´Â Ãâ·ÂÇØÁÖ´Â°Ô ÇÁ·Î±×·¡¸ÓÀÇ ´ç¿¬ÇÑ Àǹ«°ÚÁÒ. ÀÌ ¼ÒÄÏ ÇÁ·Î±×·¥(SocketServer.java Socket Client.java)¿¡¼ ¿¹¿Ü»óȲÀ» ¹ß»ý½Ãų ¼ö ÀÖ´Â ¸Þ¼Òµå´Â Å©°Ô µÎ °¡Áö°¡ ÀÖ½À´Ï´Ù. ù°´Â, 1.¼ÒÄÏÀ» ¸¸µé¶§, ¾Õ¿¡¼ ¼ÒÄÏÀ» ¸¸µé ¼ö ¾ø´Ù´Â ¿¹¿Ü»óȲÀÌ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù. µÑ°´Â, 2.µ¥ÀÌÅ͸¦ ÀԷ¹ްųª Ãâ·ÂÇÒ¶§ Áß°£¿¡ ¼ÒÄÏÀÌ ²÷°å°Å³ª ÇÏ´Â »óȲ¿¡¼ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù. µû¶ó¼ SocketServer.java / SocketClient.java¿¡¼´Â °¢°¢ ÃÖ¼ÒÇÑ µÎ °¡Áö ¾¿ÀÇ ¿¹¿Ü󸮸¦ ÇØÁÖ¾î¾ß ÇϰÚÁÒ.
¿¹¿Ü»óȲÀÇ Ã³¸®´Â try ¿Í catch¹®À¸·Î ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. finallyÀ̶ó´Â ¿¹¾à¾îµµ ÀÖÁö¸¸ À̰ÍÀº ¿©±â¼ »ý·«Çϱâ·Î ÇÏÁÒ. »ç¿ë ¹æ¹ýÀº C¿¡¼¿Í ¿ÏÀüÈ÷ µ¿ÀÏÇÕ´Ï´Ù. ¿¹¿Ü»óȲÀÌ ¹ß»ýÇÒ ¼ö ÀÖ´Â ¸Þ¼Òµå¸¦ try { }·Î °¨½Î°í¼ ¿¹¿Ü»óȲÀº catch¿¡¼ Àâ¾Æ¼ ó¸®ÇÏ´Â °ÍÀÔ´Ï´Ù. Á÷Á¢ Äڵ带 ¸¸µé¾î º¾½Ã´Ù.
public static void main(String args[]) {
try {
// ¾Æ±î ±× ³»¿ëµé....
} catch (IOException e) {
System.out.println("ExceptionÀÌ ¹ß»ýÇß½À´Ï´Ù.");
}
}
ÀÌ·¸°Ô ÇÏ¸é µË´Ï´Ù. IOExceptionÀº ¿©·¯ °¡Áö ¿¹¿Ü»óȲÁß IO(Input/Output)¿¡ °ü°èµÈ ¿¹¿Ü»óȲÀ» Àâ¾Æ³»¶ó´Â ÀǹÌÀÔ´Ï´Ù. ½ºÆ®¸²ÀÌ´Ï±î ¿¹¿Ü»óȲÀº IO¿¡ °ü°èµÈ °ÍÀ̰ÚÁÒ. ÀÌ·¯¸é ½ÇÇàÀ» ÁÖ-¿í ÇÏ´Ù°¡ ¹º°¡ ¿¹¿Ü»óȲÀÌ ¹ß»ýÇϸé catch´ÙÀ½¿¡ ÀÖ´Â ¹®ÀåÀ» ½ÇÇàÇÏ°í ³Ñ¾î°£´Ù´Â ÀǹÌÀÔ´Ï´Ù. ¿©±â¼´Â "ExceptionÀÌ ¹ß»ýÇß½À´Ï´Ù."¶ó´Â ¸Þ½ÃÁö¸¦ Ãâ·ÂÇϰÚÁÒ.
¹°·Ð ÀÌ·¸°Ô Çϸé Àß µ¹¾Æ°¡Áö¸¸ ÀÌ»óÀûÀÎ ¿¹¿Ü󸮶ó°í´Â ÇÒ ¼ö ¾ø½À´Ï´Ù. ¿Ö³Ä¸é ¿¹¿Ü»óȲÀ» ¹ß»ýÇÒ ¼ö ÀÖ´Â ºÎºÐÀº µÎ ºÎºÐÀε¥, ±×³É ÀüüÀûÀ¸·Î try catch·Î ¹¾î¹ö·Á¼ ¾î´À °÷¿¡¼ ¿¹¿Ü»óȲÀÌ ¹ß»ýµÇ´õ¶óµµ ±×³É "Exc.."¶ó´Â ¸Þ½ÃÁö¸¸ Ãâ·ÂÇÏ°í ³¡³»¹ö·Á¼, »ç¿ëÀÚ´Â µµ´ëü ¾î´À ºÎºÐ¿¡¼ ¿¹¿Ü»óȲÀÌ ¹ß»ýÇß´ÂÁö¸¦ ¾Ë ¼ö ¾ø´Ù´Â Á¡ÀÔ´Ï´Ù. ÀÌ·¸°Ô µÇ¸é ÇÁ·Î±×·¡¸Ó´Â ÄÚµå Áß ¾îµð°¡ Ʋ·È´ÂÁö ¾Ë ¼ö ¾ø°í, ¶Ç´Â »ç¿ëÀÚ´Â ÀÚ½ÅÀÌ ¹» À߸øÇß´ÂÁö¸¦ ¾Ë ¼ö°¡ ¾ø°ÚÁÒ. µû¶ó¼ °¡Àå ÀÌ»óÀûÀÎ ¹æ¹ýÀº try - catch¸¦ ¿¹¿Ü¸¦ ¹ß»ýÇÒ ¼ö ÀÖ´Â ºÎºÐµé¿¡¼ °¢°¢ ½áÁÖ¾î¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ÀÌ·¸°Ô ÇÏ¸é ¾î¶² ºÎºÐ¿¡¼ ¿¹¿Ü »óȲÀÌ ¹ß»ýÇß´ÂÁö¸¦ ¾Ë ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù.
//SocketClient.java
import java.io.*; // Stream, Reader, Writer¸¦ »ç¿ëÇϱâ À§ÇØ
import java.net.*; // SocketÀ» »ç¿ëÇϱâ À§ÇØ
public class SocketClient {
public static void main(String args[]) {
OutputStreamWriter osw=null;
try {
osw=new OutputStreamWriter(new Socket("127.0.0.1",5777).getOutputStream());
} catch (IOException e) {
System.out.println("¼ÒÄÏÀ» ¸¸µå´Â µ¥¿¡ ½ÇÆÐÇß½À´Ï´Ù.");
System.exit(-1);
}
String str="0123456789";
try {
osw.write(str,0,10);
osw.flush();
} catch (IOException e) {
System.out.println("µ¥ÀÌÅÍ Àü¼Û¿¡ ½ÇÆÐÇß½À´Ï´Ù.");
}
try {
osw.close();
} catch (IOException e) {
System.out.println("¼ÒÄÏÀ» ´Ý´Âµ¥ ½ÇÆÐÇß½À´Ï´Ù.");
}
}
}
ÀÌÁ¦´Â ¿ÏÀüÇÑ ÇÁ·Î±×·¥ÀÌ ÀÛ¼ºµÇ¾ú½À´Ï´Ù. ¸·»ó ÄÚµùÇØº¸´Ï ¿¹¿Ü»óȲ(exception)ÀÌ µÎ ºÎºÐÀÌ ¾Æ´Ï¶ó ¼¼ ºÎºÐ¿¡¼ ¹ß»ýÇÒ ¼ö ÀÖ±º¿ä. ¼ÒÄÏÀ» ´Ý´Â ºÎºÐµµ »ý°¢À» ÇØ¾ß ÇϰÚÁÒ. ù¹øÂ° ¿¹¿Ü󸮿¡¼ System.exit(-1);Àº ÇÁ·Î±×·¥À» Á¾·áÇ϶ó´Â ÀǹÌÀÔ´Ï´Ù. ¼ÒÄÏÀÌ »ý¼ºµÇÁö ¾Ê¾Ò´Ù¸é µÚ¿¡ ÀÖ´Â µ¥ÀÌÅ͸¦ Àü¼ÛÇÏ´Â ºÎºÐÀ̳ª ¼ÒÄÏÀ» ´Ý´Â ºÎºÐÀÌ ÀüºÎ Àǹ̰¡ ¾ø´Â ÀÏÀÌ µÇ°ÚÁÒ. µû¶ó¼ ¼ÒÄÏÀÌ »ý¼ºµÇÁö ¾Ê¾Ò´Ù¸é ÇÁ·Î±×·¥À» Á¾·áÇÏ´Â °ÍÀÌ ÁÁ°ÚÁÒ.
¼¹öÂÊÀº °¢ÀÚ°¡ ÀÛ¼ºÇØ º¼ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. Ŭ·¡½º¸¦ ¸¸µé¾î¼ Àû´çÇÑ ÆÐŰÁö¸¦ importÇÏ°í ¿¹¿Ü󸮸¸ ÇØÁÖ¸é ¼¹öµµ Àß ÀÛµ¿µÉ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.
±×¸®°í³ª¼ ¿©·¯ °¡Áö »óȲÀ» Ã¼Å©ÇØº¸¼¼¿ä.
- ¼¹ö¸¦ µ¹¸®Áö ¾Ê´Â »óȲ¿¡¼ Ŭ¶óÀÌ¾ðÆ®¸¸ ½ÇÇàÇØº¸±âµµ Çϰí,
- ¼¹ö¸¦ Çϳª µ¹¸®°í, ¶È°°Àº Æ÷Æ®¸¦ »ç¿ëÇÏ´Â ¼¹ö¸¦ ÇÑ ¹ø ´õ ½ÇÇàÇØº¸¼¼¿ä.
5) ÁøÂ¥·Î ¸¸µé¾îº¸±â
¾Õ¿¡¼ µåµð¾î ¿ÏÀüÈ÷ µ¿ÀÛÇÏ´Â ¼ÒÄÏ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ¿´½À´Ï´Ù. ¼·Î ¿ÏÀüÈ÷ µ¶¸³ÀûÀÎ µÎ ÇÁ·Î±×·¥ÀÌ ¼·Î Åë½ÅÀ» ÇÏ´Â °ÍÀÌ ´ë´ÜÈ÷ ½Å±âÇÏÁÒ? »ç½Ç ÇÁ·Î±×·¡¹Ö¿¡¼ Á¦ÀÏ Àç¹ÌÀÖ´Â ºÎºÐÀº À©µµ¿ì ÇÁ·Î±×·¡¹Ö(swing, awt)ÇÏ°í ¼ÒÄÏ ÇÁ·Î±×·¡¹ÖÀÎ °Í °°½À´Ï´Ù. ÇÏÁö¸¸ ÀÌ·¸°Ô ¸¸µé¸é »ç½Ç µ¿ÀÛÀº ÇϰÚÁö¸¸, °´Ã¼ÁöÇâ¾ð¾îÀÎ ÀÚ¹Ù ÇÁ·Î±×·¥À̶ó°í ¸»Çϱâ Èûµé°ÚÁÒ.
¿Ö³Ä¸é ÀÏ´Ü Å¬·¡½º¸¦ »ç¿ëÇÏÁö ¾Ê¾Ò½À´Ï´Ù. Ŭ·¡½º´Â »ç½Ç main¸Þ¼Òµå¸¦ »ç¿ëÇÏ·Á°í ±×³É ½áÁØ °Í »ÓÀÌÁö, ¸¸µé¾î³õÀº Ŭ·¡½º¸¦ ¾îµð¿¡¼µµ »ç¿ëÇÏÁö ¾Ê¾Æ¼, »ç½Ç CÇÁ·Î±×·¥°ú º°·Î ´Þ¶ó º¸ÀÌÁö ¾Ê½À´Ï´Ù. ±×·¡µµ °´Ã¼ÁöÇâ¾ð¾îÀε¥ ÀÚÁ¸½ÉÀÌ ÀÖÁö...
Ŭ·¡½º¸¦ Á¦´ë·Î ±¸ÇöÇÏÁö ¸øÇÑ ÀÌ ÇÁ·Î±×·¥Àº Ŭ·¡½ºÀÇ ÀåÁ¡µéÀ» »ç¿ëÇÒ ¼ö ¾øÀ½À» ÀǹÌÇÕ´Ï´Ù. ´Ù¸¥ Ŭ·¡½º¿¡¼ »ç¿ëÇÏ´Â °ÍÀº ¿ÏÀüÈ÷ ºÒ°¡´ÉÇÕ´Ï´Ù.
±×·³ °úÁ¦·Î »ý°¢Çϰí, Á¦´ë·ÎµÈ °´Ã¼ÁöÇâ ¹æ½Ä¿¡ ÀÇÇØ ÇÁ·Î±×·¡¹ÖÀ» ÇØº¸¼¼¿ä. ±× ÇÑ ¿¹°¡ óÀ½¿¡ Á¦½ÃÇß´ø SocketServer.java / SocketClient.java°¡ µÉ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. ÇÑ ¹ø ÇØº¸´Ù°¡ Àß ¾ÈµÇ¸é Á¦°¡ ÀÛ¼ºÇÑ ÇÁ·Î±×·¥À» Âü°íÇØ¼ ¹Ýµå½Ã Á÷Á¢ ÄÚµùÇØº¸¼¼¿ä.
ÇÁ·ÎÁ§Æ® 2. °è»ê±â ÇÁ·Î±×·¥
À̹ø¿¡ ÀÛ¼ºÇÒ ÇÁ·Î±×·¥Àº °è»ê±â ÇÁ·Î±×·¥ÀÔ´Ï´Ù. Ŭ¶óÀÌ¾ðÆ®¿¡¼ µÎ Á¤¼ö(int)¿Í ¿¬»êÀÚ(+,-,*,/)¸¦ º¸³»¸é ¼¹ö¿¡¼ ¹Þ¾Æ¼ °è»êÇÑ ÈÄ °á°ú°ªÀ» Ŭ¶óÀÌ¾ðÆ®¿¡ º¸³»´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù. ÀÌ ÇÁ·Î±×·¥Àº ¾ÕÀÇ ÇÁ·Î±×·¥°ú´Â Â÷À̰¡ ÀÖ½À´Ï´Ù.
- ¾ÕÀÇ ÇÁ·Î±×·¥¿¡¼ ÇϳªÀÇ ³»¿ëÀÌ Àü¼ÛµÇ°í ³ª¸é ¼¹ö¿Í Ŭ¶óÀÌ¾ðÆ®°¡ Á¾·áµÇ¾úÁö¸¸,
À̹ø ÇÁ·Î±×·¥¿¡¼´Â ÇϳªÀÇ °è»êÀÌ ÀÔ·ÂµÇ°í ³ª¼µµ ¼¹ö´Â °è¼ÓÇØ¼ Ŭ¶óÀ̾ðÆ®ÀÇ ÀÔ·ÂÀ»
±â´Ù¸®°Ô µË´Ï´Ù. À̰ÍÀº ÇϳªÀÇ ¼¹ö¿¡ ¿©·¯ Ŭ¶óÀÌ¾ðÆ®°¡ Á¢¼ÓÇÒ ¼öµµ ÀÖÀ½À» ÀǹÌÇÕ´Ï´Ù.
- ÀϹæÀûÀ¸·Î Ŭ¶óÀÌ¾ðÆ®¿¡¼ ¼¹ö·Î Àü¼ÛÀ» ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, Ŭ¶óÀÌ¾ðÆ®´Â ¼¹ö¿¡ ¸í·ÉÀ» ÀÔ·Â
ÇÏ°í ³ª¼ ¼¹ö·ÎºÎÅÍÀÇ °á°ú¸¦ ±â´Ù¸®°Ô µË´Ï´Ù.
- ÀԷ¹ÞÀº ³»¿ëÀ» ±×´ë·Î Ãâ·ÂÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, ¾î´À °ÍÀÌ ¼öÀÌ°í ¾î´À °ÍÀÌ ¿¬»êÀÚÀÎÁö¸¦
±¸º°Çؾ߸¸ ÇÑ´Ù.
À̹ø ÇÁ·ÎÁ§Æ®¿¡¼´Â ¼¼ °¡Áö¸¦ ¹è¿ì°Ô µË´Ï´Ù.
- ÇÁ·ÎÅäÄÝÀ» ±¸¼ºÇÏ´Â ¹æ¹ý
- ´Ù¸¥ Á¾·ùÀÇ Reader¿Í Writer / TokenizerÀÇ »ç¿ë
- Àü¼Û°ú ¼ö½ÅÀ» µ¿½Ã¿¡ ÇÏ´Â °Í
- ¼¹ö¿¡¼ ¾²·¹µå¸¦ »ç¿ëÇÏ¿© °è¼ÓÇØ¼ ¿¬°áÀ» ±â´Ù¸®´Â °Í
- ¼ÒÄÏÀÇ ¿¬°áÀÌ ²÷¾îÁ³À»¶§ ¼¹ö¿¡¼µµ ¼ÒÄÏ ¿¬°áÀ» ²÷´Â °Í
1) ÇÁ·ÎÅäÄÝÀÇ Á¤ÀÇ
¸ÕÀú, Åë½Å±Ô¾à(ÇÁ·ÎÅäÄÝ)À» ¸ÕÀú Á¤ÀÇÇØº¾½Ã´Ù. TCP/IP³ª Netbeui°°Àº °ÍµéÀ» ÇÁ·ÎÅäÄÝÀ̶ó°í ÇÕ´Ï´Ù. ÇÁ·ÎÅäÄÝÀº º¸³»´Â Ãø°ú ¹Þ´Â Ãø¿¡¼ ¹Ì¸® ¾à¼ÓÇÑ ÀÏÁ¤ÇÑ Çü½Ä °°Àº °ÍÀ» ÀǹÌÇÕ´Ï´Ù. ¹°·Ð ¿ì¸®°¡ Á¤ÀÇÇÑ ÇÁ·ÎÅäÄÝÀÌ TCP/IP°°Àº ¼öÁØÀº ¾Æ´ÏÁö¸¸ ¾Æ¹«Æ° ¼¹ö¿Í Ŭ¶óÀÌ¾ðÆ®°¡ ¾î¶°ÇÑ Çü½ÄÀ¸·Î ¼·Î¸¦ ±¸ºÐÇÒ °ÍÀÎÁö¸¦ ¾à¼ÓÇØ¾ß Çϴϱî ÀÏÁ¾ÀÇ ÇÁ·ÎÅäÄÝÀ̶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÁ·ÎÅäÄÝÀ» Àß Á¤ÀÇÇÏ´Â °ÍÀº ¼ÒÄÏ Åë½ÅÀÇ ±âº»ÀÔ´Ï´Ù. ÇÁ·ÎÅäÄÝÀ» ¾ó¸¶³ª Àß Á¤ÀÇÇÏ´À³Ä¿¡ µû¶ó¼ ÇÁ·Î±×·¡¹ÖÀÌ ´ë´ÜÈ÷ ¾î·Á¿ï ¼öµµ ÀÖ°í, ½¬¿öÁú ¼öµµ ÀÖ½À´Ï´Ù. ÇÁ·ÎÅäÄÝÀ» À߸ø Á¤ÀÇÇϸé ÇÁ·Î±×·¥ Áß¿¡ ÇÁ·ÎÅäÄÝÀ» ¹Ù²Ù¾î¾ß ÇÏ´Â °æ¿ìµµ »ý±æ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·± °æ¿ì¿¡´Â µ¥ÀÌÅ͸¦ Àü¼ÛÇϰųª ¼ö½ÅÇÏ´Â ºÎºÐÀ» ´Ù½Ã ´Ù ¹Ù²Ù¾îÁÖ¾î¾ß ÇϹǷΠº¸Åë Èûµç ÀÏÀÌ ¾Æ´Ï°ÚÁÒ.
¾Æ¹«Æ° ÀÏ´Ü ¾î¶»°Ô ÇØ¾ßÇÒÁö »ý°¢Çغ¾½Ã´Ù. ¼ÒÄÏÀ» ÅëÇØ¼ º¸³»Áú ÆÐŶ(ÇÑ ¹«´õ±âÀÇ µ¥ÀÌÅÍ)Àº µÎ Á¾·ù°¡ Àֳ׿ä. ¿ì¼±, Ŭ¶óÀÌ¾ðÆ®¿¡¼ ¼¹ö¿¡ º¸³»´Â °è»êÀ» ¿äûÇÏ´Â ÆÐŶÀÔ´Ï´Ù. ¿©±â¿¡´Â ¿¬»êÀÚ¿Í µÎ Á¤¼ö°¡ µé¾î°¡°ÚÁÒ. ´ÙÀ½Àº, ¼¹ö¿¡¼ Ŭ¶óÀÌ¾ðÆ®¿¡°Ô º¸³»´Â °è»ê°á°ú ÀÔ´Ï´Ù. ¿©±â¿¡´Â °á°ú°ª¸¸ µé¾î°¡¸é µÇ°ÚÁÒ...¶ó°í »ý°¢ÇÏ¸é ¾ÈµË´Ï´Ù. exceptionó¸®! À̰ÍÀº ÇÁ·Î±×·¡¸ÓÀÇ ¿¹ÀÇÀÔ´Ï´Ù. Ŭ¶óÀÌ¾ðÆ®°¡ ¿äûÇÑ °ªÀÌ À߸øµÇ¾úÀ» °æ¿ì, ¿¹¸¦ µé¾î Á¤¼ö°¡ ¾Æ´Ñ ¹®ÀÚ³ª ¼Ò¼ö¸¦ ÀÔ·ÂÇ߰ųª, Á¤¼ö°¡ µÎ °³°¡ µÇÁö ¾Ê¾ÒÀ»¶§, ¾Ë ¼ö ¾ø´Â ¿¬»êÀÚ¸¦ º¸³ÂÀ» ¶§, 0À¸·Î ³ª´©·Á°í ÇßÀ»¶§... µîµîÀÇ °æ¿ì¿¡ ¼¹ö´Â ¿äûÇÑ °è»êÀÌ À߸øµÇ¾ú´Ù°í ¿¡·¯¸Þ½ÃÁö¸¦ º¸³¾ ¼ö ÀÖ¾î¾ß ÇϰÚÁÒ.
Ŭ¶óÀÌ¾ðÆ®¿¡¼ ¼¹ö¿¡ º¸³»´Â °ÍÀº ¿¬»êÀÚ¿Í µÎ Á¤¼öÀÔ´Ï´Ù. ¿¬»êÀÚ¿¡´Â +,-,*,/ ³× Á¾·ù°¡ ÀÖÁÒ. ÇÁ·ÎÅäÄÝÀ» ±¸¼ºÇÏ´Â ¹æ¹ýÀº º¸Åë ¸¹ÀÌ ¾²´Â °ÍÀÌ ÅäÅ«ÀÇ Áß°£ Áß°£¿¡ ±¸ºÐÀÚ¸¦ ³Ö°Å³ª, ¾Æ´Ï¸é ÇϳªÀÇ ÅäÅ«ÀÌ ÀÏÁ¤ÇÑ ¼öÀÇ byte¸¦ Â÷ÁöÇÏ°Ô ÇÏ´Â °ÍÀÔ´Ï´Ù.
ºÐ¸®ÀÚ¸¦ ÀÌ¿ëÇÑ ÅäÅ«ÀÇ ±¸¼º¿¹: +:123:456:\
ÀÌ °æ¿ì¿¡´Â ÆÐŶÀÇ Å©±â¸¦ ¾Ë ¼ö ¾ø±â ¶§¹®¿¡ ÆÐŶÀÇ ³¡¿¡ Àû´çÇÑ ¹®ÀÚ·Î ³¡ÀÓÀ» ¾Ë·ÁÁÖ´Â ¹®ÀÚ¸¦ ³Ö¾î¾ß ÇÕ´Ï´Ù. Áö±ÝÀº \¸¦ »ç¿ëÇß½À´Ï´Ù. ¸¸¾à ¹®ÀåÀÇ ³¡À» ³ªÅ¸³»´Â ¹®ÀÚ³ª ºÐ¸®ÀÚ(Delemeter)¸¦ 1À̳ª 2°°Àº ¼ýÀÚ·Î ¾´´Ù¸é ¾î¶³±î¿ä? ¾Æ¸¶ ÁøÂ¥¼ýÀÚ¸¦ ºÐ¸®ÀÚ³ª ÆÐŶÀÇ ³¡À¸·Î Âø°¢ÇÏ´Â °æ¿ì°¡ »ý±æ °ÍÀÔ´Ï´Ù. µû¶ó¼ ½ÇÁ¦ µ¥ÀÌÅÍ ¼Ó¿¡´Â Æ÷Ç﵃ ¼ö ¾ø´Â ¹®ÀÚ¸¦ »ç¿ëÇÏ¿© ºÐ¸®ÀÚ·Î »ç¿ëÇØ¾ß ÇϰÚÁö¿ä. Áö±ÝÀº :°¡ ºÐ¸®ÀÚÀÔ´Ï´Ù. ÆÐŶÀ» ¹Þ´Â °è»ê±â¼¹ö¿¡¼´Â \°¡ ³ªÅ¸³¯¶§ ±îÁö Çϳª¾¿ ÀÐÀº ´ÙÀ½, ÀÐÀº µ¥ÀÌÅ͸¦ :¸¦ ±âÁØÀ¸·Î ²÷¾îÁÖ¾î¾ß ÇϰÚÁÒ.
ÀÏÁ¤ÇÑ °ø°£À» Â÷ÁöÇÏ°Ô ÇÏ´Â ¿¹:+ 0123 0456
ÀÌ °æ¿ì¿¡´Â Å©±â¸¦ Á¤È®È÷ ¾Ë ¼ö Àֱ⠶§¹®¿¡ ºÐ¸®ÀÚ³ª ÆÐŶÀÇ ³¡À» ³ªÅ¸³»´Â ¹®ÀÚ µîÀº µ¡ºÙÀÏ Çʿ䰡 ¾ø½À´Ï´Ù. ¹Þ´Â ÂÊ¿¡¼´Â ù¹øÂ° ±ÛÀÚ´Â ¿¬»êÀÚÀ̰í, ´ÙÀ½ ³×±ÛÀÚ´Â ¼ýÀÚ, ´ÙÀ½ ³× ±ÛÀÚ´Â ´ÙÀ½ ¼ýÀÚ¶ó´Â °ÍÀ» ¹Ù·Î ¾Ë ¼ö°¡ ÀÖÁÒ. ÇÏÁö¸¸, ÀÌ·¸°Ô ÇÏ¸é ³ªÁß¿¡ 4ÀÚ¸®¼ö ÀÌ»óÀ» Â÷ÁöÇÏ´Â °è»ê±â ÇÁ·Î±×·¥À¸·Î ¹Ù²Ù±â À§Çؼ´Â ÇÁ·ÎÅäÄÝÀ» ´Ù½Ã Á¤ÀÇÇØ¾ß ÇÒ °ÍÀÔ´Ï´Ù. ¶ÇÇÑ °æ¿ì¿¡ µû¶ó¼´Â °ø°£ÀÇ ³¶ºñµµ ¾ÆÁÖ ½ÉÇÕ´Ï´Ù. 1À» ³ªÅ¸³»±â À§Çؼµµ 4ÀÚ¸®¸¦ »ç¿ëÇØ¾ß ÇϹǷΠ±×¸¸Å µ¥ÀÌÅÍÀÇ ¾çµµ ¸¹¾ÆÁö°í Àü¼Û ¼Óµµµµ ´À·ÁÁö°ÚÁÒ.
ÇÁ·ÎÅäÄÝÀ» ±¸¼ºÇϱâ À§Çؼ´Â ¿©·¯ °¡Áö¸¦ °í·ÁÇØ¾ß ÇÕ´Ï´Ù. ¿ì¼± »ç¿ëÇÏ´Â ¾ð¾î¿¡¼ ±¸Çö °¡´ÉÇØ¾ß Çϰí, ¾ð¾î¿¡¼ Áö¿øÇÏ´Â ±â´Éµé·Î ½±°Ô ±¸ÇöÇÒ ¼ö ÀÖ¾î¾ß Çϸç, °°Àº ³»¿ëÀ» ³ªÅ¸³»±â À§Çؼ ÆÐŶÀÇ Å©±â°¡ ³Ê¹« Ä¿ÁöÁö ¾Ê¾Æ¾ß Çϸç, µ¡ºÙ¿© ÀÌÈÄÀÇ È®À强±îÁöµµ °í·ÁÇØ¾ß ÇÕ´Ï´Ù. ¾Õ¼ ¾ê±âÇßµíÀÌ ÇÁ·ÎÅäÄÝÀ» Àß Á¤ÀÇÇÏ°í ³ª¸é ¾ÕÀ¸·ÎÀÇ °æ·Î°¡ ¼øÅºÇØÁö´Â °ÍÀÌÁÒ.
»ç½Ç ÀÌ ÇÁ·ÎÁ§Æ®¿¡ °¡Àå ÀûÇÕÇÑ ÇÁ·ÎÅäÄÝÀº ÇÁ·ÎÁ§Æ®1¿¡¼ »ç¿ëÇß´ø °ÍÀÔ´Ï´Ù. InputStreamReader¿Í OutputStreamWriter¿¡¼´Â ±âº»ÀûÀ¸·Î Á¤¼ö¸¦ ±âº»À¸·Î µ¥ÀÌÅ͸¦ Àü¼ÛÇÏ°í ¼ö½ÅÇÏ´Â ¸Þ¼ÒµåµéÀÌ ÀÖ½À´Ï´Ù. µû¶ó¼ ¾Õ¿¡ ¿¬»êÀÚ¸¦ º¸³»°í, ´ÙÀ½¿£ ±×³É µÎ Á¤¼ö(int)¸¦ Àü¼ÛÇÏ¸é ¹Þ´Â ÂÊ¿¡¼µµ ¸¶Âù°¡Áö·Î ¹Þ´Â °ÍÀº read()¿Í write()¸Þ¼Òµå·Î °£´ÜÈ÷ ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. ¹Ù·Î Á¤¼ö·Î Àü¼ÛÇϱ⠶§¹®¿¡ ±×´ë·Î µ¥ÀÌÅ͸¦ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, À§ÀÇ µÎ ¹æ½ÄÀº ¹ÞÀ»¶§ ¹®ÀÚ¿(String)·Î ¹Þ¾Æ¾ß Çϱ⠶§¹®¿¡ ÀÌ°Íµé ´Ù½Ã Á¤¼ö(int)·Î ¹Ù²Ù¾îÁÖ´Â °úÁ¤ÀÌ ÇÊ¿äÇÕ´Ï´Ù.
±×·¯³ª À̹ø ÇÁ·ÎÁ§Æ®¿¡¼´Â ù¹øÂ°ÀÇ delemeter¸¦ »ç¿ëÇÏ´Â ¹æ½ÄÀ» »ç¿ëÇϵµ·Ï ÇϰڽÀ´Ï´Ù. °¡Àå ¸¹ÀÌ ¾²ÀÌ´Â ¹æ½ÄÀ̱⠶§¹®ÀÏ »Ó´õ·¯, ÀÚ¹Ù¿¡¼ Á¦°øÇÏ´Â StringTokenizer¿Í BufferedReader(Writer)¸¦ »ç¿ëÇØº¸±â À§ÇؼÀÔ´Ï´Ù. ÀÚ¹Ù¿¡¼´Â ºÐ¸®ÀÚ¿¡¼ ÅäÅ«À» ºÐ¸®Çس»´Âµ¥¿¡ StringTokenizer¶ó´Â Ŭ·¡½º¸¦ »ç¿ëÇÏ¸é ¾ÆÁÖ °£´ÜÈ÷ ±¸ÇöÇÒ ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù. ¶ÇÇÑ BufferedReader´Â InputStreamReader¿Í ´Ù¸£°Ô ÇÑ ¶óÀÎÀ» ÀÐÀ» ¼ö ÀÖ´Â ±â´É(readLine())À» Á¦°øÇϱ⠶§¹®¿¡, ¾ÆÁÖ Æí¸®ÇÕ´Ï´Ù. ¶ÇÇÑ ´Ù¸¥ ¾ð¾î¿ÍÀÇ Åë½Å¿¡¼ InputStreamReader¿Í OutputStreamWriter´Â ÇѱÛ󸮿¡¼ °¡²û ¹®Á¦°¡ ¹ß»ýÇϴµ¥¿¡ ¹ÝÇØ, BufferedReader(Writer)´Â ÇѱÛ󸮿¡ ´ë´ÜÈ÷ À¯¸®ÇÕ´Ï´Ù.
Ŭ¶óÀÌ¾ðÆ®¿¡¼ ¼¹ö¿¡ º¸³¾¶§, ºÐ¸®ÀÚ´Â À§¿¡¼¿Í °°ÀÌ ':'¸¦ »ç¿ëÇϵµ·Ï ÇϰڽÀ´Ï´Ù. ±×¸®°í ÆÐŶÀº ÇѶóÀÎ ´ÜÀ§·Î º¸³»¸é ¹Þ´Â ÂÊ¿¡¼ readLine()À» ÀÌ¿ëÇÏ¿© ¹ÞÀ¸¸é µÇ°ÚÁÒ. "¿¬»êÀÚ:Á¤¼ö:Á¤¼ö" ÀÇ ¼ø¼·Î º¸³»¸é µÉ °Í °°³×¿ä.
¼¹ö¿¡¼µµ ºÐ¸®ÀÚ :¸¦ »ç¿ëÇÕ´Ï´Ù. ¼º°ø(s)ÀÎÁö ½ÇÆÐÀÎÁö(f)¸¦ ¸ÕÀú º¸³»°í, ´ÙÀ½¿¡´Â ¼º°øÀÌ¸é °á°ú°ªÀ» ½ÇÆÐÀÌ¸é ¿¡·¯¸Þ½ÃÁö¸¦ º¸³»µµ·Ï ÇÕ´Ï´Ù. Áï, ¼º°øÀ̸é "s:°á°ú°ª", ½ÇÆÐÀ̸é "f:¿¡·¯¸Þ½ÃÁö"ÀÇ Çü½ÄÀÌ µÇ°ÚÁÒ.
2) Ŭ·¡½º ¼³°è1 : Ŭ¶óÀ̾ðÆ®
Ŭ¶óÀÌ¾ðÆ® ºÎºÐÀº ¾Õ¿¡¼ ÇÁ·ÎÁ§Æ®1°ú º°¹Ý ´Ù¸£Áö ¾Ê½À´Ï´Ù. ¼ÒÄÏÀ» ¿¬°áÇÏ´Â ºÎºÐÀº ¿ÏÀüÈ÷ µ¿ÀÏÇϰí, ´ÜÁö ÆÐŶÀ» º¸³½ ´ÙÀ½ ´Ù½Ã ¼¹ö¿¡¼ º¸³½ ÆÐŶ(°á°ú°ª)À» ¼ö½ÅÇÏ´Â ºÎºÐÀÌ Ãß°¡µÉ »ÓÀÔ´Ï´Ù. À̹ø ÇÁ·ÎÁ§Æ®¿¡¼´Â ¾Õ¿¡¼¿Í °°ÀÌ ´ëÃæ ±â´É¸¸À» ±¸ÇöÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ÃÖ´ëÇÑ Å¬·¡½º¸¦ È¿À²ÀûÀ¸·Î ¼³°èÇØº¸µµ·Ï ÇϰڽÀ´Ï´Ù. ÇÁ·ÎÁ§Æ®1¿¡¼ Ŭ·¡½º ¼³°è¸¦ ´Ù½Ã ÇØ¼ ÇÑ ¹ø ÀÛ¼ºÇغ¸¶ó°í Çߴµ¥ ±×¸»´ë·Î ½ÇÁ¦·Î ÇÁ·Î±×·¡¹ÖÀ» ÇØº¸¾Ò´Ù¸é, À̹ø ÇÁ·ÎÁ§Æ®µµ º°·Î ¾î·ÆÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. Ŭ·¡½ºÀÇ °³³äÀ» ÀÌÇØÇÏ´Â °ÍÀº ¾î·ÆÁö ¾ÊÁö¸¸, ½ÇÁ¦·Î ÇÁ·ÎÁ§Æ®¿¡ Àû¿ëÇÏ´Â µ¥¿¡´Â ÀûÀÝÀº °í¹ÎÀÌ ÇÊ¿äÇÕ´Ï´Ù. ÇÁ·ÎÁ§Æ®1¿¡¼ Ŭ·¡½º ¼³°è¸¦ ÇØº¸¾Ò´Ù¸é ±×·± °í¹ÎµéÀ» ÇÑ ¹ø ÀÌ»ó¾¿ ÇØº¸¾ÒÀ» °ÍÀ̰í, ¾î¶»°Ô Çϸé È¿À²ÀûÀÎ ¼³°è°¡ µÉÁö ¸¹ÀÌ »ý°¢Çغ¸¾ÒÀ» °ÍÀÔ´Ï´Ù.
Ŭ¶óÀ̾ðÆ®ÀÇ Å¬·¡½º¸¦ ±¸¼ºÇÏ´Â ¹æ¹ýÀº ¿©·¯ °¡Áö°¡ ÀÖ½À´Ï´Ù. ¸ÕÀú »ý¼ºÀÚ¿¡¼ ¾î¶² ÀÏÀ» ÇØ¾ß ÇÏ´ÂÁö¸¦ »ý°¢Çغ¼ ¼ö ÀÖ½À´Ï´Ù. »ý¼ºÀÚ¿¡¼ IP¿Í portÀ» ¹Þ¾Æ¼ ¼ÒÄÏ ¿¬°á±îÁö ¸ðµÎ ÇÏ°Ô ÇÒ ¼ö ÀÖ°í, »ý¼ºÀÚ´Â ¾Æ¹« Àϵµ ÇÏÁö ¾Ê°í ¼ÒÄÏ ¿¬°áÀº ±×°ÍÀ» ´ã´çÇÏ´Â ´Ù¸¥ ¸Þ¼Òµå¸¦ Á¤ÀÇÇØ¼ »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
¶ÇÇÑ °è»êÀ» ´ã´çÇÏ´Â ¸Þ¼Òµå ¶ÇÇÑ ¾î¶»°Ô ÀÎÀÚ¸¦ ¹Þ¾Æ¾ß ÇÏ°í ¾î¶»°Ô ¹ÝȯÀ» ÇÒ °ÍÀÎÁö¸¦ °í·ÁÇØ¾ß ÇÕ´Ï´Ù. µÎ Á¤¼ö¿Í ¿¬»êÀÚ¸¦ ¸ðµÎ StringÀ¸·Î ¹ÞÀ» ¼öµµ ÀÖ°í, µÎ Á¤¼ö´Â Á¤¼ö(int)·Î ¿¬»êÀÚ´Â StringÀ̳ª char·Î ¹ÞÀ» ¼öµµ ÀÖ½À´Ï´Ù. °è»ê °á°ú ¶ÇÇÑ StringÀ¸·Î ¹ÝȯÇÒ ¼öµµ ÀÖ°í, Á¤¼öÇüÀ¸·Î ¹ÝȯÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
Exceptionó¸® ¶ÇÇÑ °í·ÁÀÇ ´ë»óÀÔ´Ï´Ù. ¾îµð¿¡¼ exceptionÀ» ó¸®ÇÒÁö°¡ ¹®Á¦ÀÔ´Ï´Ù. ¸¸¾à µ¥ÀÌÅ͸¦ Àü¼ÛÇÏ´Â µ¥¿¡ ¹®Á¦°¡ »ý°å´Ù¸é ±×ÀÚ¸®¿¡¼ ¹Ù·Î ¿¹¿Ü»óȲÀ» ó¸®ÇÒ °ÍÀÎÁö, ¾Æ´Ï¸é ÀÚ½ÅÀ» È£ÃâÇÑ °÷À¸·Î exceptionÀ» ³Ñ°Ü¼ °Å±â¼ È£ÃâÇÏ°Ô ÇÒ °ÍÀÎÁö.... ¿©·¯ °¡Áö ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù.
»ç½Ç Ŭ·¡½º¸¦ Àß ¼³°èÇÏ°íµµ ½ÇÁ¦·Î ÄÚµù¿¡ µé¾î°¡¸é ¼³°èÇÒ¶§ ¹Ìó »ý°¢ÇÏÁö ¸øÇÑ ºÎºÐÀÌ »ý°¢³ª¼ ¼³°è¸¦ ´Ù½Ã ¼öÁ¤ÇØ¾ß ÇÏ´Â °æ¿ì°¡ ÇÑ µÎ ºÎºÐÀÌ ¾Æ´Ò °ÍÀÔ´Ï´Ù. À̰ÍÀº ¹¹ ÇÁ·Î±×·¡¹ÖÀ» ¸¹ÀÌ ÇØº¸°í Ŭ·¡½º ¼³°è¿¡ Àͼ÷ÇØÁö°í know-how¸¦ ½×¾ÆÇÏ´Â ¹æ¹ý¹Û¿¡´Â ´Þ¸® Áö¸§±æÀÌ ¾ø½À´Ï´Ù. ÇÏÁö¸¸ ºÐ¸íÈ÷ ¸»ÇÒ ¼ö ÀÖ´Â °ÍÀº, Ŭ·¡½º ¼³°è¸¦ °í·ÁÇÏÁö ¾Ê°í Àû´çÈ÷ µÇ´Â´ë·Î ÄÚµùºÎÅÍ ½ÃÀÛÇØ¼´Â ¾ðÁ¨°¡ ¾î·Á¿ò¿¡ ºÀÂøÇÏ°Ô µÉ °ÍÀ̶ó´Â Á¡ÀÔ´Ï´Ù.
Example=Sample=...: Á¦°¡ ÇÑ ¼³°è´Â ´ÙÀ½°ú °°½À´Ï´Ù. »ý¼ºÀÚ¿¡¼´Â ¾Æ¹«·± ÀÏÀ» ÇÏÁö ¾Ê°Ô ÇÏ¿´½À´Ï´Ù. ±×¸®°í ¼ÒÄÏÀ» ¿¬°áÇÏ´Â ¸Þ¼Òµå(void socket_connect())¸¦ µû·Î ¸¸µé¾î¼ ¿©±â¿¡¼ Reader¿Í Writer±îÁö Àâ°Ô ÇÏ¿´½À´Ï´Ù. °è»êÀº void calcul(int x, int y, String op)¿¡¼ ÇÏ°Ô ÇÏ¿´½À´Ï´Ù. º¸´Ù½ÃÇÇ ÀÎÀÚ´Â Á¤¼ö µÎ °³¿Í ¿¬»êÀÚ¸¦ StringÀ¸·Î ³Ö°Ô ÇÏ¿´½À´Ï´Ù. ¹Ýȯ°ªÀº ¾ø½À´Ï´Ù. À̰ÍÀº °á°ú´Â Á¤¼ö·Î ¿¡·¯´Â ¹®ÀÚ¿·Î ¹ÝȯµÇ¾î¾ß Çϱ⠶§¹®¿¡ °è»êÇÏ´Â ¸Þ¼Òµå¿¡¼´Â ¹Ýȯ°ªÀ» ÁÖÁö ¾Ê°í, °á°ú´Â int getResult()¸Þ¼Òµå¿¡¼ ¿¡·¯¸Þ½ÃÁö´Â String getError()¿¡¼ ¾òÀ» ¼ö ÀÖµµ·Ï ÇÏ¿´½À´Ï´Ù. °è»êÀÌ ¿¡·¯ ¾øÀÌ Àß µÇ¾ú´ÂÁö´Â boolean isSuccess()·Î ¾Ë ¼ö ÀÖ½À´Ï´Ù.
- public CalculClient(String ServerIP, int port);
- public void socket_connect();
- public void calcul(int x, int y, String operator);
- public boolean isSuccess();
- public int getResult();
- public String getError();
°¢°¢ÀÇ ¸Þ¼Òµå¿¡ ´ëÇØ¼´Â µû·Î ¼³¸íÀÌ ÇÊ¿äÇÏÁö ¾ÊÀ» µíÇÏ´Ù. ¼ÒÄÏ ¿¬°áÀº socket_connect()¿¡¼ Çϰí, ¼¹ö¿¡ µ¥ÀÌÅ͸¦ Àü¼ÛÇØ¼ °á°ú°ªÀ» ¹Þ´Â ÀÏÀº calcul()¸Þ¼Òµå¿¡¼ ÇÏ°Ô µË´Ï´Ù. À̰ÍÀ» ±¸ÇöÇϱâ À§Çؼ ÇÊ¿äÇÑ ÀνºÅϽº(Ŭ·¡½º º¯¼ö)´Â ´ÙÀ½°ú °°´Ù.
- private int result=0; // °á°ú°ªÀÌ ÀúÀåµË´Ï´Ù.
- private String error; // ¿¡·¯ ¸Þ½ÃÁö°¡ ÀúÀåµË´Ï´Ù.
- private boolean success; // °è»êÀÌ ¼º°øÇϸé true, ¿¡·¯°¡ ³ª¸é false
- private String ip; // ¼¹öÀÇ IP¸¦ ÀúÀåÇÕ´Ï´Ù.
- private int port; // ¼ÒÄÏÀÇ Æ÷Æ®¸¦ ÀúÀåÇÕ´Ï´Ù.
- private Socket socket; // ¼ÒÄÏÀÔ´Ï´Ù.
- private BufferedReader; // µ¥ÀÌÅ͸¦ ÀÐÀ» ReaderÀÔ´Ï´Ù.
- private BufferedWriter; // µ¥ÀÌÅ͸¦ Àü¼ÛÇÒ WriterÀÔ´Ï´Ù.
±×¸®°í IOExceptionÀº ¸ðµÎ ÀÚ½ÅÀ» È£ÃâÇÑ °÷¿¡°Ô ´øÁ®ÁÖ±â·Î Çß½À´Ï´Ù. ±× ¹æ¹ýÀº ´ÙÀ½¿¡ ¼³¸íÀ» Çϱâ·Î Çϱ¸¿ä, ¾Æ¹«Æ° socket_connect()³ª calcul()µîÀ» È£ÃâÇÏ°í¼´Â ExceptionÀ» ¹Þ¾Æ¼ ó¸®ÇÏ´Â ¹®ÀåÀ» ¸¸µé¾îÁÖ¾î¾ß ÇϰÚÁÒ.
¿©±â¼ isSuccess()¿Í getResult(), getError()¸Þ¼Òµå´Â ¾ÆÁÖ °£´ÜÇϸ®¶ó »ý°¢ÇÕ´Ï´Ù. ±×³É °¢°¢, success, result, error°ªÀ» returnÇØÁֱ⸸ ÇÏ¸é µÇ°ÚÁÒ.
public boolean isSuccess() {
return success;
}
public int getResult() {
return result;
}
public String getError() {
return error;
}
|
3) Ŭ·¡½ºÀÇ ±¸Çö1: Ŭ¶óÀ̾ðÆ®
Á¤¼ö x, y¿Í ¹®ÀÚ¿·ÎµÈ ¿¬»êÀÚ(+,-,*,/)¸¦ ÀԷ¹޾Ƽ ¼¹ö¿¡ °è»êÀ» ¿äûÇÏ´Â ÆÐŶÀ» º¸³»°í¼ °á°ú¸¦ ¹Þ¾Æ¼ ºÐ¼®ÇÏ´Â ºÎºÐÀ» ÇØº¾½Ã´Ù.
int x, y;¿¡´Â °¢ ¼ö°¡ µé¾î°¥ °ÍÀ̰í, String op¿¡´Â +,-,*,/ ÁßÀÇ Çϳª°¡ µé¾î°¥ °ÍÀÔ´Ï´Ù. ¾Õ¿¡¼ ¼³°èÇÑ ÆÐŶÀÇ ±¸Á¶¸¦ ±â¾ïÇØ³»º¸¼¼¿ä. 13+24¸¦ °è»êÇϱâ À§Çؼ´Â " +:13:24: "¶ó´Â ÆÐŶÀ» ¸¸µé¾î¾ß ÇÕ´Ï´Ù. ÆÐŶÀº ¾ÆÁÖ °£´ÜÇÏ°Ô ¸¸µé ¼ö Àְڳ׿ä. ±×³É ½ºÆ®¸µ¿¡ ´õÇϱ⸸ ÇÏ¸é µÇ´Ï±î¿ä.
String packet=op+":"+x+":"+y+":";
op´Â StringÀ̰í ":"µµ StringÀÌ´Ï±î ´õÇÏ´Â °ÍÀÌ ÀÌÇØ°¡ µÇÁö¸¸ ¿©±â¿¡ x¸¦ ´õÇÏ´Â °ÍÀº ¾óÇÍ ÀÌÇØ°¡ µÇÁö ¾Ê½À´Ï´Ù. x´Â Á¤¼öÀε¥ ¹®ÀÚ¿¿¡ ´õÇϰí ÀÖÀ¸´Ï±î¿ä. ÀÚ¹ÙÀÇ ÀÌ»óÇÑ Á¡ ÁßÀÇ ÇϳªÀε¥, ¾Æ¹«Æ° String¿¡´Â Á¤¼ö(int), ¼Ò¼ö(float)¸¦ ´õÇØµµ StringÀÌ µÇ°í, ½ÉÁö¾î boolean°ªÀ» ´õÇØµµ ±×³É ¹®ÀÚ¿¿¡ ´õÇØÁý´Ï´Ù. Á» ÀÌ»óÇϱä ÇÏÁö¸¸ ¾Æ¹«Æ° Áö±ÝÀº »ç¿ëÇϱ⿡ ¾ÆÁÖ Æí¸®Çϱº¿ä. ´ÙÀ½¿£ ¸¸µç ÆÐŶÀ» Àü¼ÛÇÑ ´ÙÀ½, °á°ú°ªÀ» ¹Ýȯ ¹Þ´Â °ÍÀ» ÇØº¾½Ã´Ù.
bw.write(packet);
bw.newLine();
bw.flush(); // ÆÐŶÀ» Àü¼ÛÇÑ´Ù.
String result=br.readLine(); // °á°ú·Î ¼¹ö¿¡¼ ³¯¾Æ¿Â ÆÐŶÀ» ¹Þ´Â´Ù.
bw.newLine()°ú bw.flush()°¡ ÇÏ´Â ¿ªÇÒ¿¡ ´ëÇØ¼´Â Àú¹ø¿¡ ¼³¸íÀ» ÇÏ¿´½À´Ï´Ù. ¼¹öÂÊ¿¡¼ ¶óÀÎ ´ÜÀ§·Î Àб⠶§¹®¿¡ ¶óÀÎÀÌ ³¡³µ´Ù´Â Ç¥½Ã¸¦ ÇØÁÖ¾î¾ß Çϰí, ¹öÆÛ¿¡ ½×¾ÆµÐ ÆÐŶÀ» Àü¼ÛÇ϶ó´Â ¸í·ÉÀ» ³»·ÁÁÖ¾î¾ß¸¸ ÇÕ´Ï´Ù.
¼¹ö¿¡ ÆÐŶÀ» Àü¼ÛÇÑ ´ÙÀ½¿¡ ¹Ù·Î, readLine()À» ½á¼ °á°ú°ªÀ» ¾ò´Â ±º¿ä. ½ÇÇàÀ» ½Ã۸é bw.flush()±îÁö ½ÇÇàÀ» ÇÏ°í¼ ¼¹ö°¡ µ¥ÀÌÅ͸¦ º¸³¾¶§ ±îÁö ±â´Ù¸®´Ù°¡ ¼¹ö¿¡¼ ÆÐŶÀ» º¸³»¸é readLine()¿¡¼ ÇÑ ¶óÀÎÀ» ÀÐ°í¼´Â ÁøÇàµË´Ï´Ù. ÄÚµå»óÀ¸·Î´Â ºÙ¿©½áÁÖ¾úÁö¸¸, ½ÇÁ¦·Î´Â bw.flush()¿Í br.readLine()»çÀÌ¿¡´Â ¸¹Àº ½Ã°£ÀÌ °É¸®´Â °ÍÀ̰í, ¸¸¾à ¼¹ö¿¡¼ µ¥ÀÌÅ͸¦ º¸³»Áö ¾Ê´Â´Ù¸é ÀÌ ºÎºÐ¿¡¼ Á¤ÁöÇØ ÀÖ°Ô µË´Ï´Ù.
¼¹ö¿¡¼ Àü¼ÛÇÑ °á°ú°ª(result)¸¦ ºÐ¼®Çغ¾½Ã´Ù. ¼¹ö¿¡¼´Â ¼º°øÇßÀ» °æ¿ì " s:°á°ú°ª ", ½ÇÆÐÇßÀ» °æ¿ì " f:¿¡·¯¸Þ½ÃÁö " ¿Í °°ÀÌ ÆÐŶÀ» º¸³»°Ô µË´Ï´Ù. ¾Õ¿¡¼ 13+24¶ó´Â ¸Þ½ÃÁö¸¦ º¸³Â´Ù¸é, " s:37"À̶ó´Â ÆÐŶÀÌ ³¯¾Æ¿À°ÚÁÒ. ¸¸¾à 3/0À» °è»êÇ϶ó´Â ÆÐŶÀ» º¸³»¸é "f:0À¸·Î ³ª´ ¼ö ¾ø½À´Ï´Ù."¶ó´Â ¸Þ½ÃÁö°¡ ³¯¾Æ¿É´Ï´Ù. ±×·¯¸é Ŭ¶óÀÌ¾ðÆ®¿¡¼ ±×°ÍÀ» ÀûÀýÈ÷ ºÐ¼®Çؼ ¼º°øÀÌ¸é °á°ú°ª 37À», ½ÇÆÐÀÌ¸é ¿¡·¯¸Þ½ÃÁö¸¦ ³»º¸³»¸é µË´Ï´Ù.
ÆÐŶÀ» ºÐ¼®Çϱâ À§Çؼ´Â StringTokenizer¸¦ »ç¿ëÇÕ´Ï´Ù. ÇÁ·ÎÁ§Æ®2¸¦ ½ÃÀÛÇÏ¸é¼ ÀÌ Å¬·¡½º¸¦ »ç¿ëÇÏ°Ú´Ù°í ¾ê±âÇß´ø °ÍÀÌ ±â¾ï³¯ °ÍÀÔ´Ï´Ù. À̸§ ±×´ë·Î StringÀ» TokenÀ¸·Î ¸¸µé¾îÁÖ´Â ÀÏÀ» ÇÕ´Ï´Ù. tokenÀ̶õ ´Ü¾î¿Í ºñ½ÁÇÑ °ÍÀ̶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. Àǹ̸¦ °¡Áö´Â µ¥ÀÌÅÍ ´ÜÀ§´Ï±î¿ä. ¼¹ö¿¡¼ ³¯¾Æ¿À´Â ÆÐŶÀº ÅäÅ«À» 2°³ °¡Áö°í ÀÖ½À´Ï´Ù. ¼º°ø(s)ÀÎÁö ½ÇÆÐ(f)ÀÎÁö¸¦ ¶æÇÏ´Â °Í°ú, °á°ú°ª ¶Ç´Â ¿¡·¯¸Þ½ÃÁö ÀÔ´Ï´Ù. "s:37"À̶ó¸é s¿Í 37ÀÌ ÅäÅ«ÀÌ µË´Ï´Ù. StringTokenizer¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀº ¸Å¿ì °£´ÜÇÕ´Ï´Ù. »ý¼ºÀÚ¿¡ ½ºÆ®¸µ°ú ºÐ¸®ÀÚ(Token Delemeter)¸¦ ³Ö¾îÁÖ¸é nextToken()À̶ó´Â ¸Þ¼Òµå·Î ÅäÅ«À» Çϳª¾¿ ºÐ¸®ÇØ ³¾ ¼ö ÀÖ½À´Ï´Ù.
int re=0;
String error="";StringTokenizer st=new StringTokenizer(result, ":");
String success=st.nextToken();
if ( success.equals("s") ) {
re=Integer.parseInt(st.nextToken());
} else {
error=st.nextToken();
}
¾ÆÁÖ °£´ÜÇÏÁÒ? ½ºÆ®¸µ ÅäÅ©³ªÀÌÀú¸¦ ¸¸µç ´ÙÀ½, ÅäÅ«À» ÇÑ ºÐ¸®Çؼ ±×°ÍÀÌ "s"ÀÌ¸é ´ÙÀ½ ÅäÅ«À» ºÐ¸®Çؼ Á¤¼ö·Î ¹Ù²Û ´ÙÀ½ °á°ú°ª¿¡ ³Ö°í, "s"°¡ ¾Æ´Ï¸é ´ÙÀ½ ÅäÅ«À» ¿¡·¯¸Þ½ÃÁö¿¡ ³Ö´Â °ÍÀÔ´Ï´Ù.
4) Ŭ·¡½º ¼³°è2 : ¼¹ö
¼¹ö ÂÊÀº ¾à°£ ¾î·Æ½À´Ï´Ù. °è¼ÓÇØ¼ Ŭ¶óÀ̾ðÆ®ÀÇ µ¥ÀÌÅ͸¦ ±â´Ù¸®´Ù°¡ ¹Þ¾Æ¼ °è»êÀ» ÇÏ´Â ºÎºÐÀÌ Thread¸¦ »ç¿ëÇÏ¿© ±¸ÇöµÇ¾î¾ß Çϱ⠶§¹®ÀÔ´Ï´Ù. ±× ÀÌÀ¯´Â thread¸¦ »ç¿ëÇϸé ÇϳªÀÇ ¼¹ö¿¡ ¿©·¯ °³ÀÇ Å¬¶óÀÌ¾ðÆ®°¡ °¢°¢ µ¶¸³ÀûÀ¸·Î Á¢¼ÓÇÒ ¼ö ÀÖ°í, CPUÁ¡À¯À²À» ÁÙÀÏ ¼ö ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù. ¾Æ¹«Æ° ±×³É ¼¹ö Ŭ·¡½º¸¦ ¼³°èÇØº¸ÀÚ°í ¸»ÇÏ¸é ³Ê¹« ÀÜÀÎÇÑ ÀÏÀÌ µÉ °Í °°À¸´Ï±î, ¼¹ö°¡ µ¹¾Æ°¡´Â ¸ÞÄ«´ÏÁòÀº ÇÔ²² °øºÎÇØº¸°í¼ ±¸Ã¼ÀûÀΠŬ·¡½ºÀÇ ¼³°è´Â °¢ÀÚ ÇØº¸°í¼ Ŭ·¡½º ±¸Çö ºÎºÐ¿¡¼ ÀúÀÇ ¼³°è¿Í ºñ±³Çغ¸µµ·Ï ÇսôÙ.
Thread´Â process¿Í ºñ½ÁÇÕ´Ï´Ù. process ¾È¿¡¼ µ¹¾Æ°¡´Â º°°³ÀÇ process °°Àº °ÍÀÔ´Ï´Ù. À©µµ¿ì³ª ¸®´ª½º, À¯´Ð½º¿Í °°Àº ¸ÖƼŽºÅ· ¿î¿µÃ¼Á¦¿¡¼ ¿¡¼ ¿©·¯ °³ÀÇ process°¡ µ¹ ¼ö ÀÖ´Â °Íó·³ ÇϳªÀÇ ÇÁ·Î¼¼½º¿¡¼µµ ¿©·¯ °³ÀÇ thread°¡ µ¹ ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ process¿Í threadÀÇ Â÷ÀÌÁ¡Àº ¹®¸Æ±³È¯(context switching)ÀÌ ÀϾÁö ¾Ê´Â´Ù´Â °ÍÀÔ´Ï´Ù. context¶õ ÇϳªÀÇ ÇÁ·Î¼¼½º°¡ µ¹¾Æ°¡´Â ȯ°æÀ̶ó°í º¼ ¼ö ÀÖ½À´Ï´Ù. º¸Åë ·¹Áö½ºÅÍ º¯¼öµéÀÇ °ªÀ» ¸»Çϴµ¥, ÇϳªÀÇ process´Â ÇϳªÀÇ context¸¦ °¡Áö°Ô µÇ¹Ç·Î, µÎ °³ÀÇ ÇÁ·Î¼¼½º°¡ ¹ø°¥¾Æ ½ÇÇàµÇ±â À§Çؼ´Â °è¼ÓÇØ¼ context switchingÀÌ ÀϾ¾ß ÇÕ´Ï´Ù. ±×·¯³ª thread´Â process³»ºÎ¿¡¼ µ¹±â ¶§¹®¿¡ ¹®¸Æ±³È¯Àº ÀϾÁö ¾Ê½À´Ï´Ù. ¾Æ¹«Æ° ÀÚ¼¼ÇÑ °ÍÀº ¾Ë Çʿ䰡 ¾ø°í ¾Æ¹«Æ° ÇϳªÀÇ ÇÁ·Î±×·¥¿¡¼ ¿©·¯ °³ÀÇ thread°¡ µ¹¸é¼ Multi TaskingÀ» ÇÒ ¼ö°¡ ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù. |
±×·¯³ª ¼¹öµµ ¼ÒÄÏÀ» ¿°í -> stream°ú Reader¸¦ ¾ò¾î³½ ÈÄ -> µ¥ÀÌÅ͸¦ Àаí -> °è»êÇÑ °á°ú°ªÀ» Àü¼ÛÇÑ´Ù´Â ±âº» ±¸Á¶´Â º¯ÇÔÀÌ ¾ø½À´Ï´Ù. À̹ø¿¡´Â ÀÌ °úÁ¤ÀÌ °è¼ÓÇØ¼ ¹Ýº¹µÈ´Ù´Â Á¡ÀÌ ´Ù¸¦ »ÓÀÌÁÒ. ¼¹öÀ̱⠶§¹®¿¡ °¡Àå ¾Õ ºÎºÐ¿¡ ¼¹ö¼ÒÄÏÀ» ¸¸µå´Â ºÎºÐÀ» ´õ Ãß°¡ÇØ¾ß ÇÒ °Í °°±º¿ä. ±â¾ïÇϽðÚÁö¸¸, ¼ÒÄÏ ¿¬°áÀº °¡Àå ¸ÕÀú ¼¹ö ¼ÒÄÏÀ» ¸¸µç ÈÄ, ¿©±â¿¡¼ ¼ÒÄÏÀ» ¾ò¾î³»°í Ŭ¶óÀÌ¾ðÆ® ÂÊ¿¡¼´Â ÀÌ ¼ÒÄÏ¿¡ ¿¬°áÀ» ÇÕ´Ï´Ù. ¾Æ¹«Æ° ±âº» ±¸Á¶´Â ºñ½ÁÇÒ Å×´Ï ¼¹öÂʵµ Ŭ·¡½º ¼³°è¸¦ ÇØº¾½Ã´Ù.
°¡Àå ¸ÕÀú ÇØ¾ßÇÒ ÀÏÀº Àû´çÇÑ Æ÷Æ®¿¡ ¼¹ö ¼ÒÄÏÀ» ¸¸µå´Â ÀÏÀÔ´Ï´Ù. »ý¼ºÀÚ¿¡¼ ÇØµµ ÁÁ°í ¸Þ¼Òµå¸¦ Çϳª ¸¸µé¾îµµ ÁÁ½À´Ï´Ù.
ServerSocket srvSocket=new ServerSocket(6000);
°ú °°Àº ½ÄÀ¸·Î ÇÏ¸é µÇ°ÚÁÒ. ´ÙÀ½¿¡ ÇÒ ÀÏÀº ¼¹ö ¼ÒÄÏ¿¡¼ accept()¸Þ¼Òµå¸¦ ÀÌ¿ëÇØ¼ Ŭ¶óÀÌ¾ðÆ®¿Í ¿¬°áÇÒ ¼ÒÄÏÀ» ¸¸µå´Â ÀÏÀÔ´Ï´Ù.
Socket socket=srvSocket.accept();
¿Í °°ÀÌ ÇÏ¸é ¼ÒÄÏÀ» ¿ ¼ö ÀÖ½À´Ï´Ù. ¿©±â±îÁö´Â ÇÁ·ÎÁ§Æ®1¿¡¼¿Í °°Áö¸¸, ¿©±â¼ºÎÅÍ Thread¸¦ »ç¿ëÇÕ´Ï´Ù. ¿©±â¼ ¸¸µé¾îÁØ ¼ÒÄÏÀ» ÀÎÀÚ·Î ³Ö¾î¼ Stream°ú Reader, Writer¸¦ ¸¸µå´Â ÀÏÀº Thread¸¦ Çϳª »ý¼ºÇؼ ÀÏÀ» ¸Â±â´Â °ÍÀÌÁÒ. ¼¹ö´Â °è¼ÓÇØ¼ ´Ù¸¥ Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ±â´Ù¸®°í, Ŭ¶óÀÌ¾ðÆ®¿ÍÀÇ µ¥ÀÌÅÍ ¼Û¼ö½ÅÀº »ý¼ºµÈ Thread°¡ ¸Ã°Ô µÇ´Â °ÍÀÔ´Ï´Ù.
Áï, ¼¹ö´Â ¼¹ö ¼ÒÄÏÀ» ¸¸µé¾î, Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ±â´Ù¸®´Ù°¡, Ŭ¶óÀÌ¾ðÆ®°¡ ¿¬°áÀÌ µÇ¸é, Thread¸¦ Çϳª »ý¼ºÇؼ ¸¸µé¾îÁø socketÀ» ³Ñ°ÜÁÖ°í³ª¼´Â thread¸¦ ½ÃÀÛ½ÃŰ°í¼ ´Ù½Ã ´Ù¸¥ Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ±â´Ù¸®°Ô µË´Ï´Ù.
Áö±Ý±îÁöÀÇ °úÁ¤À» Á¤¸®ÇØ º¾½Ã´Ù.
ServerSocket srv=new ServerSocket(port); // ¼¹ö ¼ÒÄÏÀ» ¸¸µì´Ï´Ù. port´Â Æ÷Æ® ¹øÈ£
while (true) {
Socket socket=srv.accept(); // Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ±â´Ù¸³´Ï´Ù.
// ¿¬°áµÇ¸é ´ÙÀ½ÇàÀ¸·Î ÁøÇàµË´Ï´Ù.
ServerThread t=new ServerThread(socket); // Thread¸¦ »ý¼º. À̶§ ¼ÒÄÏÀ» ÀÎÀÚ·Î ³Ñ±è.
t.start(); // »ý¼ºµÈ Thread¸¦ ±¸µ¿½Ãŵ´Ï´Ù.
}
¼¹ö Ŭ·¡½º¿¡¼ ÇÒ ÀÏÀº ÀÌÁ¤µµ°¡ ´ÙÀÔ´Ï´Ù. ¼¹ö ¼ÒÄÏÀ» ¸¸µé°í¼´Â, Ŭ¶óÀÌ¾ðÆ® ¼ÒÄÏÀ» ¿¬°áÇØ¼ Thread¸¦ »ý¼ºÇؼ ±¸µ¿½ÃŰ´Â ÀÏÀº ¹«ÇÑ·çÇÁ·Î µ¹°í ÀÖ´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. while (Á¶°Ç) { Ç׸ñ } ¹®Àº °ýÈ£ ¾ÈÀÇ Á¶°ÇÀÌ ¼º¸³µÇ¸é ºí·°À¸·Î ½ÎÀÎ Ç׸ñµéÀÌ °è¼ÓÇØ¼ ½ÇÇàµÇ´Âµ¥, °ýÈ£ ¾ÈÀÇ Á¶°ÇÀÌ true´Ï±î Àý´ë·Î ³¡³¯ ÀÏÀÌ ¾ø´Â ¹«ÇÑ ·çÇÁ°ÚÁÒ. ¹°·Ð Control-C¸¦ ´©¸£¸é Á¾·áµË´Ï´Ù. ¾Æ¹«Æ° ÀÌ ºÎºÐÀº ¹«ÇÑ ·çÇÁ·Î µ¹°í Àִµ¥, µû¶ó¼ ¼¹ö´Â °è¼ÓÇØ¼ µ¹¸é¼ Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ±â´Ù¸®´Ù°¡ Ŭ¶óÀÌ¾ðÆ®°¡ ¿¬°áµÇ¸é socketÀ» ¿¬°áÇϰí Thread¸¦ ¸¸µé¾î¼ socketÀ» ³Ñ°ÜÁÖ´Â ÀÏÀ» ¹Ýº¹ÇÏ°Ô µÇ°ÚÁÒ. ¹«ÇÑÈ÷ ¸¹Àº Ŭ¶óÀÌ¾ðÆ®µéÀÌ ¿¬°áµÉ ¼ö ÀÖ½À´Ï´Ù. ÀÚ¹Ù°¡ ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö¿¡ °ÇÑ ÀÌÀ¯ ÁßÀÇ Çϳª°¡ Thread¿¡µµ ÀÖ½À´Ï´Ù. ÇϳªÀÇ ¼¹ö¿¡ ¸¹Àº Ŭ¶óÀÌ¾ðÆ®µéÀÌ ¿¬°áµÇ´õ¶óµµ À̵éÀ» µû·Î °ü¸®ÇÒ Çʿ䰡 ¾ø½À´Ï´Ù. ±×³É °¢°¢ º°°³ÀÇ thread¸¦ ¸¸µé¾îÁֱ⸸ Çϸé thread³»¿¡¼ ¾Ë¾Æ¼ ÀÏÀ» Çϱ⠶§¹®ÀÔ´Ï´Ù.

Threadclass¿¡¼´Â °á°ú°ªÀ» Àü¼ÛÇÑ ÈÄ ´Ù½Ã óÀ½À¸·Î °¡¼ Ŭ¶óÀ̾ðÆ®ÀÇ µ¥ÀÌÅÍ Àü¼ÛÀ» ±â´Ù¸®°Ô µË´Ï´Ù. ¼¹ö´Â ·çÇÁ¸¦ µ¹¸é¼ Ŭ¶óÀÌ¾ðÆ® thread¸¦ ±¸µ¿ÇÑ ÈÄ ´Ù½Ã ´Ù¸¥ Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ±â´Ù·Á, ¿¬°áÀÌ ÀÖ´Ù¸é »õ·Î¿î thread¸¦ ´Ù½Ã »ý¼ºÇÕ´Ï´Ù.
ServerThread´Â ±¸ÇöÇØ¾ß Çϴ Ŭ·¡½ºÀÔ´Ï´Ù. »ç½Ç ¾î·Á¿î ºÎºÐÀº À̺κÐÀÌÁÒ. ¹°·Ð ´Ù¸¥ À̸§À» ½áµµ ÀüÇô »ó°üÀº ¾ø½À´Ï´Ù. ±×·³ ServerThread°¡ ÇØ¾ß ÇÏ´Â ÀÏÀ» ¤¾î º¾½Ã´Ù. Ŭ¶óÀÌ¾ðÆ®¿¡¼ ¿¬°áµÈ ¼ÒÄÏÀ» ³Ñ°Ü¹Þ¾ÒÀ¸´Ï±î ÀÌ ¼ÒÄÏ¿¡¼ StreamÀ» ¸¸µé¾î¼ StreamReader¿Í Writer¸¦ ¸¸µé¾î³»¾ß ÇÕ´Ï´Ù.
InputStream is=socket.getInputStream();
OutputStream os=socket.getOutputStream();
InputStreamReader isr=new InputStreamReader(is);
OutputStreamWriter osw=new OutputStreamWriter(os);
±×·¯³ª ¿ì¸®´Â BufferedReader¿Í BufferedWriter¸¦ »ç¿ëÇϱâ·Î Çß½À´Ï´Ù. ¸¸µé¾î³õÀº InputStreamReader¿Í Writer¸¦ BufferedReader¿Í WriterÀÇ »ý¼ºÀÚ¿¡ ³Ö¾î ÁÖ¸é µË´Ï´Ù.
BufferedReader br=new BufferedReader(isr);
BufferedWriter bw=new BufferedWriter(osw);
is, isr, br / os, osw, bw °°Àº ¸¹Àº º¯¼öµéÀ» ¸¸µé±â ±ÍÂúÀº¸é ±×³É ÇÑ ¹ø¿¡ ³¡³»¹ö¸®´Â ¹æ¹ýµµ ÀÖ½À´Ï´Ù.
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
ÀÌÁ¦ ³²Àº ÀÏÀº br.readLine()¿¡¼ ÆÐŶÀ» ÀÐ¾î¼ °á°ú¸¦ °è»êÇÑ ÈÄ bw.write()¸¦ ÀÌ¿ëÇØ¼ Àü¼ÛÇϱ⸸ ÇÏ¸é µË´Ï´Ù.
String packet=br.readLine();
String result=analyzePacket(packet); // ÆÐŶÀ» ó¸®ÇÑ´Ù. String result¿¡ °á°ú °ªÀÌ ÀúÀåµÈ´Ù.
bw.write(result);
bw.newLine();
bw.flush();
ÀÌ·¸°Ô Çϰí exception 󸮸¸ ÇÏ¸é »ç½Ç»ó ¼ÒÄÏ ¿¬°á ºÎºÐÀº ¸ðµÎ ³¡³³´Ï´Ù. ³²Àº ÀÛ¾÷Àº ½ÇÁ¦ ÇÁ·Î±×·¡¹Ö¿¡¼ ¸¹ÀÌ ÇÏ°Ô µÇ´Â ÀÏÀε¥, ¹®ÀÚ¿(String)·Î ÀÔ·ÂµÈ µ¥ÀÌÅ͸¦ ºÐ¼®ÇÏ¿© Á¤¼ö¿Í ¿¬»êÀÚ·Î ³ª´©°í¼ °á°ú¸¦ °è»êÇÑ ´ÙÀ½, Ŭ¶óÀÌ¾ðÆ®¿¡ Àü¼ÛÇÒ ÆÐŶÀ» ¸¸µå´Â ÀÏÀÔ´Ï´Ù. ¹Ù·Î analyzePacket()¸Þ¼Òµå¿¡¼ ÇÒ ÀÏÀÌÁÒ. ¾Õ¿¡¼ ÇÁ·ÎÅäÄÝÀ» Á¤ÀÇÇϰí, ¼ÒÄÏÀ» Buffered·Î ÇÒ °ÍÀÎÁö ±×³É StreamReader, Writer·Î ÇÒ °ÍÀÎÁö¸¦ °í¹ÎÇß´ø ¹®Á¦´Â ¹Ù·Î ÀÌ ºÎºÐÀ» ½±°ÔÇÒ ¼ö ÀÖµµ·Ï Çϱâ À§Çؼ¶ó°í ÇØµµ Ʋ¸° ¸»ÀÌ ¾Æ´Õ´Ï´Ù. Áö±ÝÀº µ¥ÀÌÅͰ¡ Àû¾î¼ ¸¹ÀÌ ¾î·Á¿öÁö°Å³ª ½¬¿öÁöÁö´Â ¾ÊÁö¸¸, µ¥ÀÌÅÍ ·®ÀÌ ¸¹°Å³ª µ¥ÀÌÅÍÀÇ Á¾·ù°¡ ´Ù¾çÇϸé ÇÁ·Î±×·¡¹Ö¿¡¼ °¡Àå ¾î·Á¿î ºÎºÐÀº ¹Ù·Î ÀÌ ºÎºÐÀÌ µË´Ï´Ù.
5) Ŭ·¡½º ±¸Çö2: ¼¹ö µ¥ÀÌÅÍ ¼ö½Å°ú Àü¼Û
¼¹ö ¼ÒÄÏÀ» ¸¸µé°í Ŭ¶óÀÌ¾ðÆ® ¼ÒÄÏÀ» ¿¬°áÇØ¼ ¾²·¹µå·Î ¿¬°á½ÃŰ´Â °Í ±îÁö´Â Áö±Ý±îÁö ¼³¸íÀÌ µÇ¾ú´Ù. ÇÑ ¹ø ½ÇÁ¦ ÄÚµù°ú ºñ½ÁÇÏ°Ô ¾Ë°í¸®ÁòÀ» ±×·Áº¸ÀÚ. ¼¹ö Ŭ·¡½ºÀÎ CalculServer.java¿¡¼ ÇÒ ÀÏÀº °£´ÜÇÕ´Ï´Ù. ±× ¾Ë°í¸®ÁòÀº ¾Õ¿¡¼ ¼³¸íÇÏ¿´½À´Ï´Ù. ÇÏÁö¸¸ ¾î¶² ÀÏÀ» ¾î¶² ¸Þ¼Òµå¿¡¼ ÇØ¾ßÇÏ°í ¹Û¿¡¼´Â ¾î¶»°Ô È£ÃâÇØÁÙ °ÍÀÎÁö ÇÏ´Â ÀϵéÀº Ŭ·¡½º ¼³°è¿¡¼ °¢ÀÚ ÇØº¸¾ÒÀ» °ÍÀÔ´Ï´Ù. ±×·³ Á¦°¡ ÇÑ Å¬·¡½º ¼³°è¸¦ º¸¿©µå¸®°Ú½À´Ï´Ù. ¹¹ Ç¥ÁؾÈÀ̶ó°í ÇÒ ¼ö´Â ¾øÀ»Å×´Ï±î ´Ù¸£´õ¶óµµ ³Ê¹« »ó½ÉÇÏÁö´Â ¸¶¼¼¿ä.
// CalculServer.java
public class CalculServer {
public void socket_connection(int port); // ¼¹ö ¼ÒÄÏ »ý¼º
public void listening(); // Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ±â´Ù¸®°í,
// ¿¬°áµÇ¸é thread¸¦ ±¸µ¿
}
class ServerThread extends Thread {
public void run(); // ¼ÒÄÏ¿¡¼ reader, writer¸¦ ¾ò¾î¼ µ¥ÀÌÅ͸¦ ¹Þ´Â´Ù.
// analyzePacket()À» È£ÃâÇÏ¿© °á°ú¸¦ ¾ò¾î Àü¼ÛÇÑ´Ù.
public String analyzePacket(String inputPacket);
// ÆÐŶ ³»¿ëÀ» ºÐ¼®ÇÏ¿© °è»êÇϰí
// Ŭ¶óÀÌ¾ðÆ®¿¡ Àü¼ÛÇÒ ÆÐŶÀ» ¸¸µé¾î ¹ÝȯÇÑ´Ù.
}
ÀÌ·¸°Ô º¸´Ï±î Ŭ¶óÀÌ¾ðÆ® Å¬·¡½ºº¸´Ù ´õ °£´ÜÇϳ׿ä. ÇÏÁö¸¸ ³»¿ëÀº ±×¸® ½±Áö ¾Ê½À´Ï´Ù. analyzePacket()¸Þ¼Òµå¸¦ ±¸ÇöÇÏ´Â °ÍÀÌ ½±Áö°¡ ¾Ê°ÚÁÒ? "+:13:24"¶ó´Â StringÀ» ºÐ¼®Çؼ "s:37"À̶ó´Â StringÀ» ¸¸µé¾î³¾ ¼ö ÀÖ¾î¾ß Çϴϱî¿ä.
¾Æ¹«Æ° Ŭ·¡½º µÎ °³·Î ±¸ÇöµÇ¾î Àֳ׿ä. ServerThreadŬ·¡½º´Â CalculServerŬ·¡½º ¾È¿¡ Æ÷ÇÔ µÇ¾îµµ ÁÁ°í Áö±Ýó·³ ¹Û¿¡ ³ª¿ÍÀ־ »ó°ü¾ø½À´Ï´Ù. ÇÏÁö¸¸ publicŬ·¡½º´Â CalculServerŬ·¡½º Çϳª¹Û¿¡ ¾ø¾î¾ß ÇÕ´Ï´Ù. ServerThreadµµ ¾Æ¿¹ ServerThread.java¶ó´Â ´Ù¸¥ ÈÀÏ¿¡ ±¸ÇöÇÏ´Â °ÍÀº »ó°ü¾ø½À´Ï´Ù.
ServerThreadŬ·¡½º´Â Thread¸¦ »ó¼ÓÇϰí Àֳ׿ä. ÀÌ·¸°Ô µÇ¸é ÀÌ Å¬·¡½º´Â thread°¡ µÇ´Â °ÍÀÔ´Ï´Ù. CalculServerŬ·¡½º¿¡¼ ServerThreadŬ·¡½º¸¦ »ý¼ºÇؼ start()¸Þ¼Òµå¸¦ È£ÃâÇϸé ÀÚµ¿À¸·Î ServerThreadÀÇ run()¸Þ¼Òµå°¡ È£ÃâµË´Ï´Ù. Ŭ¶óÀÌ¾ðÆ®¿¡¼ µ¥ÀÌÅ͸¦ ÀԷ¹޾Ƽ, analyzePacket()¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© °á°ú°ªÀ» ¸¸µé¾î¼ Ŭ¶óÀÌ¾ðÆ®¿¡ º¸³»ÁÖ¸é µË´Ï´Ù. ÀÌ °úÁ¤Àº ¹°·Ð ·çÇÁ·Î µ¹°í ÀÖ¾î¾ß Çϰí, ¸¸¾à Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀÌ Á¾·áµÇ¸é ·çÇÁ°¡ ³¡³ª¸é¼ run()¸Þ¼Òµåµµ Á¾·áµÇ¾î¾ß ÇÕ´Ï´Ù. run()¸Þ¼ÒµåÀÇ ½ÇÇàÀÌ ³¡³ª¸é thread´Â ÀÚµ¿À¸·Î ³¡³ª°Ô µË´Ï´Ù. |
Ŭ·¡½º ±¸Çö¿¡ ´ëÇØ¼´Â Ưº°È÷ ´õ ÇÒ À̾߱Ⱑ ¾ø³×¿ä. ¾î¶»°Ô ÇÏ´ÂÁö¸¦ ¾Ë¾Æ¾ß ¼³°è°¡ °¡´ÉÇϱ⠶§¹®¿¡ ±¸Çö ¹æ¹ý±îÁö ÀüºÎ ´Ù ¼³¸íÀ» ÇØ¹ö·È´õ´Ï... ±×³É ³Ñ¾î°¡¸é ¼¿îÇÏ´Ï±î ¿©±â¼´Â µÎ °¡Áö¸¸ ¼³¸íÀ» Çϵµ·Ï ÇϰڽÀ´Ï´Ù. run()¸Þ¼Òµå¿¡¼ ¼ÒÄÏÀÇ ¿¬°áÀ» ±â´Ù¸®´Â ·çÇÁ¿Í ¼ÒÄÏ ¿¬°áÀÌ ²÷°åÀ» °æ¿ì¸¦ ã´Â °Í°ú exceptionó¸®ÀÇ Á»´õ °í±Þ ±â¼úÀ» ¼³¸íÇϰڽÀ´Ï´Ù.
¸ÕÀú run()¸Þ¼Òµå´Â ¾Õ¼ ¸»ÇßµíÀÌ ·çÇÁ¸¦ µ¹°í ÀÖ¾î¾ß ÇÕ´Ï´Ù. ¿Ö³Ä¸é Ŭ¶óÀÌ¾ðÆ®°¡ µ¥ÀÌÅ͸¦ Çϳª¸¸ Àü¼ÛÇÏ°í ³¡³»´Â °ÍÀÌ ¾Æ´Ï¶ó °è¼ÓÇØ¼ ¿¬°áÀ» À¯ÁöÇÏ¸é¼ µ¥ÀÌÅ͸¦ ÁÖ°í ¹Þ¾Æ¾ß Çϱ⠶§¹®ÀÔ´Ï´Ù. µû¶ó¼ Ŭ¶óÀÌ¾ðÆ®°¡ Á¢¼ÓµÇ¾î ÀÖ´Â ÇÑ ÀÌ Thread´Â À¯ÁöµÇ¾î¾ß¸¸ Çϰí, Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀÌ Á¾·áµÇ¸é(»ç¿ëÀÚ°¡ ÇÁ·Î±×·¥À» ²÷°Å³ª, ·£¼±ÀÌ ²÷¾îÁ³°Å³ª, ÄÄÇ»ÅͰ¡ ²¨Á³°Å³ª.. µîµî), ÀÚµ¿À¸·Î Thread´Â Á¾·áµÉ ¼ö ÀÖ¾î¾ß ÇÕ´Ï´Ù. ´ë´ÜÈ÷ ¾î·Á¿î ÀÛ¾÷ÀÎ °Í °°Áö¸¸, ½ÇÁ¦ ±¸ÇöÀº °£´ÜÇÕ´Ï´Ù. Ŭ¶óÀ̾ðÆ®ÀÇ Á¢¼ÓÀÌ ²÷±â¸é µ¥ÀÌÅ͸¦ ÀÐÀ¸·Á°í ÇÒ¶§ Áï½Ã IOExceptionÀÌ ³ª±â ¶§¹®ÀÔ´Ï´Ù. Áï, ±×³É µ¥ÀÌÅ͸¦ Àдٰ¡ exception¸¸ Àâ¾ÆÁÖ¸é µË´Ï´Ù. ¿¹¿Ü»óȲÀÌ ¹ß»ýÇϸé Ŭ¶óÀÌ¾ðÆ®¿Í ¿¬°áÀÌ ²÷¾îÁø °ÍÀ̴ϱî, ·çÇÁ¿¡¼ ºüÁ®³ª°¡¼ ¼ÒÄÏÀ» ²÷°í run()¸Þ¼Òµå¸¦ Á¾·áÇϸé threadµµ Á¾·áµÇ´Â °ÍÀÔ´Ï´Ù.
public void run() {
String rcvPacket="";
String sndPacket="";
while (true) {
try {
rcvPacket=br.readLine();
sndPacket=this.analyzePacket(rcvPacket);
bw.write(sndPacket);
bw.newLine();
bw.flush();
} catch (IOException e) {
System.out.println("Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀÌ ²÷°å½À´Ï´Ù. ¼ÒÄÏÀ» ²÷°Ú½À´Ï´Ù.");
break; // while ·çÇÁ ¹ÛÀ¸·Î ³ª°£´Ù.
}
}
// ¼ÒÄÏ ¿¬°áÀ» Á¾·áÇÑ´Ù.
try {
br.close();
bw.close();
socket.close();
} catch (IOException e) {
}
}
while(true) ·Î ÀÎÇØ ¹«ÇÑ ·çÇÁ¸¦ µ¹°Ô µÇÁö¸¸, µ¥ÀÌÅ͸¦ Àаųª ¾µ¶§ exceptionÀÌ ³ª¿À¸é ¹Ù·Î ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏ°í ·çÇÁ¸¦ ºüÁ® ³ª¿À°Ô ÀÛ¼ºµÇ¾î ÀÖ´Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù.
´ÙÀ½¿£, exception󸮸¦ ¹è¿öº¾½Ã´Ù. Áö±Ý±îÁö try - catch¸¦ ÀÌ¿ëÇØ¼ exceptionÀ» Àâ¾Æ³Â½À´Ï´Ù. ÇÏÁö¸¸ ¾î¶² ¸Þ¼Òµå´Â ±×³É È£ÃâÇÏ¸é µÇÁö¸¸, ¾î¶² ¸Þ¼Òµå´Â try - catch ·Î exceptionÀ» Àâ¾ÆÁÖÁö ¾ÊÀ¸¸é ÄÄÆÄÀϱîÁö µÇÁö ¾Ê´Â´Ù´Â °ÍÀº µÎ Á¾·ùÀÇ ¸Þ¼Òµå¿¡ ¾î¶² Â÷ÀÌÁ¡ÀÌ Á¸ÀçÇÑ´Ù´Â ¸»À̰ÚÁÒ. ¹°·ÐÀÔ´Ï´Ù. ±×·± ¸Þ¼Òµå¸¦ ÀÛ¼ºÇÒ ¼öµµ ÀÖ°í, ²À ±×·¸°Ô ÀÛ¼ºÇØÁÖ¾î¾ß ÇÏ´Â °æ¿ìµµ ÀÖ½À´Ï´Ù. ´ÙÀ½ ¸Þ¼Òµå¸¦ º¸±â·Î ÇսôÙ.
public void socket_connection() throws IOException {
try {
Socket socket=new Socket("127.0.0.1", 6000);
} catch (IOException e) {
throw e;
}
}
¼³¸íÀ» ÇÏÁö ¾Ê¾Æµµ ¾î¶² ³»¿ëÀÎÁö´Â ±Ý¹æ ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. ¸Þ¼Òµå¸¦ ¼±¾ðÇÒ ¶§ µÚ¿¡ throws <Exception Á¾·ù> ¸¦ ºÙ¿©ÁÖ¾ú½À´Ï´Ù. ÀÌ·± ¸Þ¼Òµå¸¦ »ç¿ëÇÒ ¶§´Â ¹Ýµå½Ã try - catch¸¦ »ç¿ëÇÏ¿© exceptionÀ» Àâ¾ÆÁÖ¾î¾ß¸¸ ÇÕ´Ï´Ù. ¸Þ¼Òµå Áß°£¿¡ exceptionÀÌ ¹ß»ýÇϸé throw e; ¶ó´Â ¸í·ÉÀ» ½ÇÇà½ÃŰ´Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº ¹ß»ýÇÑ exceptionÀ» ±×´ë·Î ¸Þ¼Òµå ¹Ù±ùÀ¸·Î Àü´ÞÇÑ´Ù´Â ÀǹÌÀÔ´Ï´Ù. ÀÌ·¸°Ô ÇÏ¸é ¸Þ¼Òµå ¾È¿¡¼ exceptionÀÌ ¹ß»ýÇÏ¸é ±× exceptionÀº ¸Þ¼Òµå ¾È¿¡¼ 󸮵ÇÁö ¾Ê°í ¸Þ¼Òµå¸¦ È£ÃâÇÑ °÷±îÁö exceptionÀÌ ±×´ë·Î Àü´ÞµÇ°Ô µË´Ï´Ù.
ÀÌ·± ¹æ¹ýÀº ´ëºÎºÐÀÇ °æ¿ì ¸Þ¼Òµå ³»¿¡¼ exceptionÀ» ó¸®ÇÏ´Â °Íº¸´Ù ÈξÀ ÁÁÀº ¹æ¹ýÀÔ´Ï´Ù. ´Ù½Ã ¸»Çϸé ÃÖÁ¾ÀûÀ¸·Î »ç¿ëÇÏ´Â °÷¿¡¼ exceptionÀ» ó¸®ÇÏ´Â °ÍÀÌ ÈξÀ ÁÁ´Ù´Â ÀǹÌÀÌÁÒ. ¿Ö³ÄÇϸé À§ÀÇ ¸Þ¼Òµå¿¡¼ ¼ÒÄÏ ¿¬°á¿¡ ½ÇÆÐÇØ¼ exceptionÀÌ ¹ß»ýÇß´Ù°í Ĩ´Ï´Ù. Áö±Ýó·³ ¸Þ¼Òµå¸¦ Àü´ÞÇÏÁö ¾Ê°í, ÀÌÀü¿¡ ÇÏ´ø ¹æ½ÄÀ¸·Î System.out.println(e.toString()); °ú °°Àº ½ÄÀ¸·Î ¿¡·¯ ¸Þ½ÃÁö¸¦ ³»º¸³¾ ¼öµµ ÀÖ½À´Ï´Ù. ±×·¯³ª awt³ª swingÀ» »ç¿ëÇÏ´Â ¾î¶² ÇÁ·Î±×·¥¿¡¼ ÀÌ Å¬·¡½º¸¦ »ç¿ëÇÏ¿© ³×Æ®¿öÅ© ÇÁ·Î±×·¥À» ÀÛ¼ºÇϰíÀÚ ÇÑ´Ù°í »ý°¢Çغ¸¼¼¿ä. ¸¸¾à ¾î¶² exceptionÀÌ ³ª¸é Text Area³ª Label °°Àº À©µµ¿ì ¾È¿¡ ³ªÅ¸³ª°Ô ÇÏ°í ½ÍÁö¸¸, ¸Þ¼Òµå ¹Ù±ù¿¡¼´Â ¾î¶² exceptionÀÌ ³µ´ÂÁö ¾Ë ¼öµµ ¾ø°í, System.out.println()¸í·ÉÀ¸·Î´Â Text Area¿¡ Ãâ·ÂÇÒ ¼öµµ ¾ø½À´Ï´Ù. µû¶ó¼ ¸Þ¼Òµå ³»¿¡¼ exceptionÀÌ ³ª¸é ±× exceptionÀº ¾È¿¡¼ ó¸®ÇÏ´Â °Íº¸´Ù´Â ´ëºÎºÐ ¸Þ¼Òµå¸¦ È£ÃâÇÑ °÷¿¡¼ ó¸®ÇØ ÁÖ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. ¹°·Ð À̰ÍÀº '´ëºÎºÐ'ÀÇ °æ¿ìÀ̰í, ±×·¸Áö ¾ÊÀ» ¼öµµ ÀÖ½À´Ï´Ù.
6) Ŭ·¡½º ±¸Çö3: ¼¹ö ÆÐŶ ºÐ¼®°ú °á°ú°ª °è»ê
analyzePacket()¸Þ¼Òµå¸¦ ±¸ÇöÇØº¾½Ã´Ù. Ŭ·¡½º±¸Çö1(Ŭ¶óÀ̾ðÆ®)¿¡¼ Çß´ø °Í °°ÀÌ StringTokenizer¸¦ »ç¿ëÇÕ´Ï´Ù. °úÁ¤Àº ´ÙÀ½°ú °°½À´Ï´Ù.
ÀÎÀÚ·Î ³Ñ°Ü¹ÞÀº ¹®ÀÚ¿(String rcvPacket)°ú ºÐ¸®ÀÚ( delemeter = : )À» ³Ö¾î¼ StringTokenizer st¸¦ »ý¼ºÇÕ´Ï´Ù.
st.nextToken()À¸·Î ¿¬»êÀÚ¸¦ ¾ò½À´Ï´Ù.
st.nextToken()À¸·Î ù¹øÂ° ¼ö¸¦ ¾ò½À´Ï´Ù.
st.nextToken()À¸·Î µÎ¹øÂ° ¼ö¸¦ ¾ò½À´Ï´Ù.
¿¬»êÀÚ°¡ +ÀÌ¸é µÎ ¼ö¸¦ ´õÇϰí, -ÀÌ¸é µÎ¼ö¸¦ »©°í...
°è»ê¿¡ ¼º°øÇÏ¿´À¸¸é "s:"+°á°ú°ª À¸·Î Ŭ¶óÀÌ¾ðÆ®¿¡ Àü¼ÛÇÒ ÆÐŶÀ» ¸¸µì´Ï´Ù. ½ÇÆÐÀ̸é "f:"+¿¡·¯¸Þ½ÃÁö ·Î Àü¼ÛÇÒ ÆÐŶÀ» ¸¸µì´Ï´Ù.
¸¸µç ÆÐŶÀ» ¹ÝȯÇÕ´Ï´Ù.(return)
¹°·Ð Ŭ¶óÀÌ¾ðÆ®¿¡¼ Ç×»ó ¿Ã¹Ù¸¥ ÆÐŶ¸¸ ³Ñ¾î¿À¶ó´Â ¹ýÀº ¾øÀ¸¹Ç·Î ¿¡·¯Ã³¸®¸¦ ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. ¿¬»êÀÚ°¡ Ʋ¸®°Å³ª, 0À¸·Î ³ª´©°Å³ª, ¼ýÀÚ°¡ ¾Æ´Ñ ¹®ÀÚ°¡ ³Ñ¾î¿À°Å³ª ÇÏ´Â °æ¿ìµéÀÔ´Ï´Ù. ¿¡·¯Ã³¸®´Â °¢ÀÚ ±¸ÇöÇØº¸µµ·Ï ÇÕ´Ï´Ù.
7) Âü°í¿¹Á¦: Á¦°¡ ÀÛ¼ºÇÑ ÇÁ·Î±×·¥ÀÔ´Ï´Ù.
Á¦°¡ ÀÛ¼ºÇÑ ÇÁ·Î±×·¥ÀÔ´Ï´Ù. ÇÑ ¹ø ½ÇÇà½ÃÄѺ¸½Ã°í, °¢ÀÚ ÀÛ¼ºÇÑ ÄÚµå¿Í ¼Ò½º¸¦ ºñ±³ÇØ º¸¼¼¿ä.
CalculServer.java : °è»ê±â ¼¹öÀÔ´Ï´Ù. Æ÷Æ® ¹øÈ£¸¦ ÆÄ¶ó¹ÌÅÍ·Î ÁÙ ¼ö ÀÖ½À´Ï´Ù.(default=5777) »ç¿ë¹æ¹ý: java CalculServer [port]
CalculClient.java : °è»ê±â ¼¹ö¿Í Åë½ÅÀ» ÅëÇØ °è»êÀ» ÇÕ´Ï´Ù. mainÇÔ¼ö´Â Å×½ºÆ® ¿ëÀ¸·Î¸¸ ¸¸µé¾ú±â ¶§¹®¿¡, »ç¿ëÀÚ ÀÔ·ÂÀ» ¹ÞÀ» ¼ö ¾ø°í ±×³É ¼¼ °¡Áö °è»êÀ» Çϰí Á¾·áµË´Ï´Ù.
Calculator.java : °è»ê±âÀÔ´Ï´Ù. Űº¸µå·ÎºÎÅÍ ÀÔ·ÂÀ» ¹Þ¾Æ¼ CalculClient¸¦ »ç¿ëÇÏ¿© °è»êÀ» ¼öÇàÇÕ´Ï´Ù. Űº¸µå·ÎºÎÅÍ ÀÔ·Â ¹Þ´Â °Íµµ Áö±Ý±îÁöÀdz»¿ëÀ» ÅëÇØ ±Ý¹æ ÀÌÇØÇÒ ¼ö ÀÖ½À´Ï´Ù.
»ç¿ë¹æ¹ý: java Calculator [port] [Server IP]
¸ÕÀú ¼¼ ÈÀÏÀ» ÄÄÆÄÀÏÇÏ°í¼ ¼¹ö¸¦ ½ÇÇà½Ãŵ´Ï´Ù.
SHELL> java CalculServer [port ¹øÈ£]
´ÙÀ½Àº ´Ù¸¥ Äֿܼ¡¼ Calculator¸¦ ½ÇÇà½Ãŵ´Ï´Ù.
SHELL> java Calculator [port ¹øÈ£] [Server IP]
ÇÁ·ÎÁ§Æ®3. äÆÃÇÁ·Î±×·¥
Áö±Ý±îÁö ÇÁ·ÎÁ§Æ®¸¦ ¾î¶»°Ô ÁøÇàÇØ¿Ô´ÂÁö¸¦ »ý°¢Çغ¾½Ã´Ù. ù¹øÂ° ÇÁ·ÎÁ§Æ®´Â ±×³É ¼¹ö¸¦ Çϳª ¶ç¿ì°í, Ŭ¶óÀÌ¾ðÆ®¸¦ ½ÇÇà½ÃŰ¸é ¼¹ö¿¡ µ¥ÀÌÅ͸¦ ÇÑ ¹ø º¸³½ ÈÄ ÇÁ·Î±×·¥À» Á¾·áÇß½À´Ï´Ù. µÎ¹øÂ° ÇÁ·ÎÁ§Æ®´Â ÇϳªÀÇ ¼¹ö¿¡ ¿©·¯ Ŭ¶óÀÌ¾ðÆ®°¡ ¿¬°áÇÒ ¼ö ÀÖ¾úÁö¸¸, µ¥ÀÌÅÍ Àü¼Û¿¡ À־ Çϳª°¡ °¡¸é Çϳª°¡ ¿À°í ÇÏ´Â ½ÄÀ̾ú½À´Ï´Ù. À̹ø ÇÁ·ÎÁ§Æ®°¡ °¡Áö´Â Â÷ÀÌÁ¡Àº äÆÃ ÇÁ·Î±×·¥À» »ý°¢ÇÏ¸é ½±°Ô ¾Ë ¼ö ÀÖ´Â °ÍµéÀε¥, ´ÙÀ½°ú °°½À´Ï´Ù.
ÀÌÀü¿¡´Â ÆÐŶÀ» ÇÑ ¹ø º¸³»°í¼ ÀÀ´äÀ» ±â´Ù·ÈÁö¸¸, À̹ø ÇÁ·ÎÁ§Æ®¿¡¼´Â ¼¹ö¿¡¼ ºñµ¿±âÀûÀ¸·Î(¾Æ¹«¶§³ª) µ¥ÀÌÅ͸¦ º¸³À´Ï´Ù. ¿Ö³ÄÇÏ¸é ´Ù¸¥ Ŭ¶óÀÌ¾ðÆ®¿¡¼ ¼¹ö·Î º¸³½ ¸Þ½ÃÁöµµ ¹Þ¾Æ¾ß Çϱ⠶§¹®ÀÔ´Ï´Ù.
¼¹ö¿¡¼´Â ÀÌÀü¿¡´Â ÆÐŶÀ» º¸³½ Ŭ¶óÀÌ¾ðÆ®¿¡°Ô¸¸ °á°ú°ª(ÆÐŶ)À» Àü¼ÛÇßÁö¸¸, Áö±ÝÀº ÇϳªÀÇ Å¬¶óÀÌ¾ðÆ®¿¡¼ µ¥ÀÌÅͰ¡ º¸³»Áö¸é ´Ù¸¥ ¸ðµç Ŭ¶óÀÌ¾ðÆ®¿¡°Ô ¸Þ½ÃÁö¸¦ º¸³»¾ß¸¸ ÇÕ´Ï´Ù.
¼¹ö¿¡¼ »ý¼ºÇÑ thread°¡ ÀÌÀü¿¡´Â µ¶¸³ÀûÀ¸·Î Ŭ¶óÀÌ¾ðÆ®¿Í Åë½ÅÇÏ´Â ¸ðµç ¿ªÇÒÀ» ´ã´çÇßÁö¸¸, À̹ø¿¡´Â ¼¹ö·ÎºÎÅÍÀÇ ¿ä±¸¿¡ ÀÇÇØ ¾ðÁ¦¶óµµ Ŭ¶óÀÌ¾ðÆ®¿¡°Ô ¸Þ½ÃÁö¸¦ º¸³¾ ¼ö ÀÖ¾î¾ß Çϰí, ¿ªÀ¸·Î Ŭ¶óÀÌ¾ðÆ®·ÎºÎÅÍ ¸Þ½ÃÁö¸¦ ¹ÞÀ¸¸é ¼¹ö¿¡°Ô ´Ù¸¥ ¸ðµç Ŭ¶óÀÌ¾ðÆ®¿¡°Ô ¸Þ½ÃÁö¸¦ Àü¼ÛÇ϶ó°í ¿äÃ»ÇØ¾ß ÇÕ´Ï´Ù. µû¶ó¼ ¼¹ö°¡ »ý¼ºÇÑ thread°¡ ¼¹ö¿Í Åë½ÅÀ» ÇÒ ¼ö ÀÖ¾î¾ß ÇÕ´Ï´Ù.
µû¶ó¼, ÇÁ·ÎÁ§Æ®2¿¡¼ Çß´ø °Í°ú °°ÀÌ µ¥ÀÌÅ͸¦ º¸³»°í¼ ¹Ù·Î °á°ú¸¦ ±â´Ù¸®°Å³ª(Ŭ¶óÀ̾ðÆ®), ¹Ý´ë·Î µ¥ÀÌÅ͸¦ ¹Þ°í ¹Ù·Î ±× Ŭ¶óÀÌ¾ðÆ®¿¡°Ô ÀÀ´äÀ» º¸³»´Â(¼¹ö) ¹æ½ÄÀÌ ¾Æ´Ñ ´Ù¸¥ ¹æ½ÄÀÌ ¿ä±¸µË´Ï´Ù. ´ÙÀ½°ú °°Àº ¹æ½ÄÀ¸·Î äÆÃ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
Ŭ¶óÀÌ¾ðÆ®¿¡¼µµ ¼¹ö·ÎºÎÅÍÀÇ µ¥ÀÌÅ͸¦ ¹Þ±â À§ÇØ Thread¸¦ »ç¿ëÇÕ´Ï´Ù. µ¥ÀÌÅ͸¦ º¸³»´Â °ÍÀº »ç¿ëÀÚ°¡ ³»¿ëÀ» ÀÔ·ÂÇßÀ» ¶§ÀÌÁö¸¸, ¼¹ö·ÎºÎÅÍÀÇ µ¥ÀÌÅÍ´Â ¾Æ¹«¶§³ª ¿Ã ¼ö Àֱ⠶§¹®¿¡ ¼¹ö·ÎºÎÅÍ ÀÀ´äÀ» ¹Þ´Â ºÎºÐÀº thread·Î ÀÛ¼ºµÇ¾î¾ß¸¸ ¼¹öÀÇ µ¥ÀÌÅÍ Àü¼Û¿¡ ¹Ù·Î ÀÀ´äÇÒ ¼ö ÀÖ½À´Ï´Ù.
¼¹ö¿¡¼´Â Ŭ¶óÀÌ¾ðÆ®°¡ ¿¬°áµÇ¸é ´ÜÁö Thread¸¦ ¸¸µé°í thread¿¡°Ô ¸ðµç ¿ªÇÒÀ» ÀÏÀÓÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, ¸¸µç threadÀÇ ¸ñ·ÏÀ» °¡Áö°í¼ ÇϳªÀÇ thread°¡ ¸Þ½ÃÁö¸¦ ¹ÞÀ¸¸é, thread´Â ¼¹ö¿¡ ¸Þ½ÃÁö¸¦ ¹Þ¾Ò´Ù´Â ½ÅÈ£¸¦ º¸³»°í, ¼¹ö´Â thread ¸ñ·Ï¿¡ ÀÇÇØ¼ ¸ðµç Ŭ¶óÀÌ¾ðÆ®¿¡°Ô µ¥ÀÌÅ͸¦ Àü¼ÛÇØ¾ß ÇÕ´Ï´Ù.
thread°¡ ¼¹ö¿Í ±³½ÅÇÒ ¼ö ÀÖµµ·Ï, thread¸¦ »ý¼ºÇÒ¶§ ¼¹ö ÀÚ½ÅÀÇ ·¹ÆÛ·±½º¸¦ ³Ñ°ÜÁÝ´Ï´Ù. ±×·¯¸é thread¿¡¼´Â ¼¹ö¿¡ ¸Þ½ÃÁö¸¦ º¸³¾¶§, ¼¹öÀÇ ¸Þ¼Òµå¸¦ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù.
°è»ê±â ÇÁ·ÎÁ§Æ®±îÁö ¼º½ÇÈ÷ µû¶ó ¿Ô´Ù¸é Ŭ¶óÀÌ¾ðÆ®¿¡¼µµ thread¸¦ »ý¼ºÇÏ´Â ºÎºÐÀº ¾î·ÆÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. Ŭ¶óÀÌ¾ðÆ®¿¡¼ ¼¹ö·Î ¸Þ½ÃÁö¸¦ º¸³»´Â °ÍÀº Àü°ú °°Áö¸¸ ¸Þ½ÃÁö¸¦ ¹Þ´Â ºÎºÐÀº thread¸¦ »ý¼ºÇÏ¿© ³Ñ°ÜÁÖ¾î¾ß ÇÕ´Ï´Ù. À̸¦ À§ÇØ thread¸¦ »ý¼ºÇÒ¶§, ¼ÒÄÏ ¶Ç´Â Reader¸¦ ÇÔ²² ³Ñ°ÜÁÖ¾î¼ µ¥ÀÌÅ͸¦ ¹Þµµ·Ï ÇØ¾ß ÇÕ´Ï´Ù. ¶ÇÇÑ Å¬¶óÀÌ¾ðÆ®¿¡ Àִ ȸ鿡 ¸Þ½ÃÁö¸¦ Ãâ·ÂÇϱâ À§Çؼ´Â Ŭ¶óÀ̾ðÆ®ÀÇ ·¹ÆÛ·±½ºµµ ÇÔ²² ³Ñ°ÜÁÖ¾î¾ß ÇÕ´Ï´Ù.
1) ÇÁ·ÎÅäÄÝ Á¤ÀÇ
ÀÌ ÇÁ·Î±×·¥¿¡¼´Â º°´Ù¸¥ ÇÁ·ÎÅäÄÝ Á¤Àǰ¡ ÇÊ¿äÇÏÁö ¾ÊÀ» °Í °°³×¿ä. ¾Æ¹«°Íµµ Á¤ÀÇÇÏÁö ¾Ê´Â °Íµµ ÇϳªÀÇ Á¤ÀǶó°í ÇÒ ¼ö ÀÖ°ÚÁö¸¸¼µµ... ¾Æ¹«Æ° Ŭ¶óÀÌ¾ðÆ®¿¡¼ ÇÑ ÁÙ ¹®ÀåÀ» º¸³»¸é, ¼¹ö¿¡¼´Â º¸³½ »ç¶÷ ¾ÆÀ̵ð¿Í ÇÕÃļ ´Ù¸¥ Ŭ¶óÀÌ¾ðÆ®µé¿¡°Ô º¸³»ÁÖ¸é µÇ°ÚÁÒ. ¾ÆÀ̵𸦠¹Ù²Ù´Â °ÍÀ̳ª, µµ¿ò¸» º¸±â °°Àº ±â´ÉµéÀº ¼¹ö³ª Ŭ¶óÀÌ¾ðÆ®¿¡¼ ¹ÞÀº ÅØ½ºÆ®¸¦ ºÐ¼®ÇÏ´Â ±â´ÉÀ» ³ÖÀ¸¸é µÇ°ÚÁÒ.
À̹ø¿¡µµ ÇÑ ÁÙ ¾¿ÀÇ ¸Þ½ÃÁö¸¦ ÁÖ°í ¹Þ°Ô µÇ´Ï±î readLine() ¸Þ¼Òµå°¡ ÀÖ´Â BufferedReader¿Í BufferedWriter¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ°Ú³×¿ä.
2) ¼¹ö ¼³°è1: ¼ÒÄÏ Áغñ¿Í Thread¸®½ºÆ® ¸¸µé±â
ÀÌ ºÎºÐµµ °è»ê±â ÇÁ·ÎÁ§Æ®¿Í º°¹Ý ´Ù¸£Áö ¾Ê½À´Ï´Ù. ´ÜÁö thread¸¦ »ý¼ºÇÒ¶§, ÀÎÀÚ·Î ÀÚ±â ÀÚ½ÅÀ» ³Ñ°ÜÁÖ´Â °Í°ú, »ý¼ºÇÑ thread¸¦ ¸ñ·Ï¿¡ ³Ö¾îµÎ´Â °ÍÀÌ ´Ù¸£ÁÒ. ÀÏ´Ü ÇÁ·ÎÁ§Æ®2¿¡¼¿Í °°ÀÌ ¼¹ö ºÎºÐÀÇ ¼ÒÄϰú thread ±¸µ¿±îÁö ±¸ÇöÇϰí¼, ¼öÁ¤Çϵµ·Ï ÇØº¾½Ã´Ù. ´ÙÀ½°ú °°°ÚÁÒ.
ServerSocket srv=new ServerSocket(port); // ¼¹ö ¼ÒÄÏÀ» ¸¸µì´Ï´Ù. port´Â Æ÷Æ® ¹øÈ£
while (true) {
Socket socket=srv.accept(); // Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ±â´Ù¸³´Ï´Ù.
// ¿¬°áµÇ¸é ´ÙÀ½ÇàÀ¸·Î ÁøÇàµË´Ï´Ù.
Thread t=new ServerThread(socket); // Thread¸¦ »ý¼ºÇÕ´Ï´Ù. À̶§ ¼ÒÄÏÀ» ÀÎÀÚ·Î ³Ñ°ÜÁÝ´Ï´Ù.
t.start(); // »ý¼ºµÈ Thread¸¦ ±¸µ¿½Ãŵ´Ï´Ù.
}
¿©±â±îÁö´Â ¸ðµÎ ¾Ë°í ÀÖ°ÚÁÒ? ¿©±â¼ ´õ Ãß°¡µÇ¾î¾ß ÇÒ ³»¿ëÀº »ý¼ºÇÑ threadÀÇ ¸ñ·Ï¿¡ ³Ö´Â °ÍÀÔ´Ï´Ù. ¸ñ·ÏÀº ¹è¿·Î ¸¸µé¾îµµ ÁÁ°í, ¸®½ºÆ®¸¦ ±¸ÇöÇØµµ ÁÁ°ÚÁÒ. ¹è¿Àº ¸¸µé±â´Â ½±Áö¸¸, óÀ½ºÎÅÍ »ç¿ëÇϰíÀÚÇÏ´Â ÃÖ´ëÇÑÀÇ °ø°£À» Àâ¾ÆÁÖ¾î¾ß Çϱ⠶§¹®¿¡ ¸Þ¸ð¸® ³¶ºñµµ ½ÉÇϰí, Áß°£¿¡ »ç¿ëÀÚ°¡ ³ª°¡´Â °æ¿ì, ±× ºó°ø°£À» ä¿ì±â À§ÇØ µÚ¿¡ ÀÖ´Â ³»¿ëÀ» Çϳª¾¿ ¾ÕÀ¸·Î ´ç°ÜÁÖ¾î¾ß ÇÏ´Â ºÒÆíÀÌ ÀÖ½À´Ï´Ù. ¸®½ºÆ®´Â ¹è¿ÀÇ ´ÜÁ¡À» ±Øº¹ÇÒ ¼ö ÀÖÁö¸¸, Æ÷ÀÎÅͰ¡ ¾ø´Â ÀÚ¹Ù¿¡¼ ±¸ÇöÇÏ´Â °ÍÀÌ ¿øÄ¢ÀûÀ¸·Î ºÒ°¡´ÉÇÏÁÒ. ÇÏÁö¸¸, °ÆÁ¤ÇÒ °ÍÀº ¾ø½À´Ï´Ù. Vector¶ó´Â Ŭ·¡½º¸¦ »ç¿ëÇÏ¸é °£´ÜÇÏ°Ô ÇØ°áµÇ±â ¶§¹®ÀÔ´Ï´Ù. ÀÌ Å¬·¡½ºÀÇ ¼¼ºÎÀûÀÎ »ç¾çÀº ÀÚ¹Ù½ºÆåÀ» º¸µµ·Ï Çϰí, Áö±ÝÀº Áß¿äÇÑ ¸Þ¼Òµå¸¸ ¸î °³ ¾Ë¾Æº¾½Ã´Ù.
class Java.util.Vector
- void addElement(Object obj) : ³»¿ë(°´Ã¼)À» Ãß°¡ÇÒ ¶§ »ç¿ëÇÕ´Ï´Ù.
- Object elementAt(int index) : ÁÖ¾îÁø À§Ä¡(index)¿¡ ÀÖ´Â ³»¿ëÀ» ÂüÁ¶ÇÕ´Ï´Ù.
- boolean removeElement(Object o) : o¿Í °°Àº °´Ã¼ ¸ñ·Ï¿¡¼ »èÁ¦ÇÕ´Ï´Ù.
- void removeElementAt(int index) : ÁÖ¾îÁø À§Ä¡¿¡ ÀÖ´Â °´Ã¼¸¦ »èÁ¦ÇÕ´Ï´Ù..
|
Vector v=new Vector(); ¶ó°í ¼±¾ðµÇ¾î ÀÖ´Ù¸é v¿¡ Ãß°¡Çϱâ À§Çؼ´Â v.addElement(obj);