±è»ó¿íÀÇ awt ¸ÖƼäÆð­ÁÂ

 

¡Ø °­Á¿¡ ´ëÇÑ Áú¹®Àº '¹®ÀÇ°Ô½ÃÆÇ'¿¡¼­ ÇØÁÖ¼¼¿ä.

 


[äÆÃ·ë ¿¹½ÃDesign]

 

³×, ¾È³çÇÏ½Ê´Ï±î ±è»ó¿íÀÔ´Ï´Ù. ÀÌ ±ÛÀÇ ¸ñÀûÀº Á¦°¡ ȸ»ç¿Í¼­ óÀ½ Á¦ÀÛÇÑ ÀÚ¹ÙÇÁ·Î±×·¥ÀÎ ¸ÖƼäÆþÖÇø´¿¡ ¾²¿©Áø °¢Á¾ ±â¼úµéÀ» °ø°³ÇÔÀ¸·Î½á Á¦°¡ ºÒ°ú ¸î°³¿ùÀü±îÁö °È°í ÀÖ´ø ±æÀ» °È°í °è½Ã´Â Ãʺ¸ºÐµé¿¡°Ô Á¶±ÝÀÌ¶óµµ º¸ÅÆÀÌ µÇ°íÀÚ ÇÏ´Â µ¥¿¡ ÀÖ½À´Ï´Ù. ¾Æ¹«ÂÉ·Ï µµ¿òÀÌ µÇ½Ã±æ ¹Ù¶ø´Ï´Ù. ¹°·Ð Á¦°¡ ¾´ ¹æ¹ý ¸»°íµµ ¼ö¸¸°¡Áö ¹æ¹ýÀÌ ÀÖÀ¸´Ï(^^) »ý°¢¿¡ ¿©Áö¸¦ µÎ°í ÀÌ ±ÛÀ» ÀоîÁÖ½Ã±æ ¹Ù¶ø´Ï´Ù. Á¦°¡ Á¤È®ÇÏ°Ô ¾Æ´Â ºÎºÐÀÌ ¾Æ´Ï¸é ¾ð±ÞÇÏÁö ¾Ê´Â °ÍÀ» ÀüÁ¦·Î ÇÏ°Ú½À´Ï´Ù.

ÀÌ ±ÛÀº ÀÌ·¸°Ô ±¸¼ºµÇ¾î ÀÖ½À´Ï´Ù.(Á¦¸ñÀ» Ŭ¸¯ÇÏ½Ã¸é º¸´Ù ºü¸£°Ô À̵¿ÇÕ´Ï´Ù.)

1. ¼­·Ð (Àâ´ã)

2. SocketÀÇ °³³ä°ú äÆÿ¡¼­ÀÇ »ç¿ë¹ý

3. SocketºÎºÐ ¼Ò½º

4. Thread ÀÌ¿ë¹ý

5. ThreadºÎºÐ ¼Ò½º

6. ÇÁ·ÎÅäÄÝ Á¤ÀÇ¿Í StringTokenizerŬ·¡½ºÀÇ ÀÌ¿ë¹ý

7. Canvas¸¦ ÀÌ¿ëÇÑ Image´Ù·ç±â

...

 

1. ¼­·Ð

À¥ÇÁ·Î±×·¡¹Ö¿¡¼­ °Ô½ÃÆÇ Â¥´Â °ÍÀÌ ±âº»À̵íÀÌ(¿©±â¼­ ±âº»À̶ó´Â °ÍÀº À̸ðÀú¸ð ´Ù ¾Ë¾Æ¾ß¸¸ ÇÒ ¼ö ÀÖ´Â ÇÁ·Î±×·¥ÀÌ´Ù¶ó´Â ¶æÀÔ´Ï´Ù.) ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö¿¡¼­ äÆÃÀ» Â¥´Â °ÍÀº ±âº»ÀÔ´Ï´Ù. ÀÚ¹Ù°¡ óÀ½¿¡ Àα⸦ ²ö ÀÌÀ¯°¡ ÀÎÅͳÝÀÇ º¸±Þ°ú ºê¶ó¿ìÀú¿¡¼­ º¼ ¼ö ÀÖ´Â ÇÁ·Î±×·¥(¾ÖÇø´-ÀÛÀº ¾ÖÇø®ÄÉÀ̼Ç)À̾ú±â ¶§¹®¿¡ ³×Æ®¿÷ ÇÁ·Î±×·¡¹ÖÀ¸·Î ÀÚ¹Ù¸¦ ½ÃÀÛÇϽŴٸé Çö¸íÇÑ ¼±ÅÃÀ» ÇϽŠ°ÍÀÌ µË´Ï´Ù. ´«¿¡ º¸¿©Áö´Â °ÍÀÌ ¸¹±â ¶§¹®¿¡ ¹è¿ì´Â ÀÔÀå¿¡¼­µµ ¹«Ã´ Èï¹Ì·Î¿î ³»¿ëÀÔ´Ï´Ù. Á¦¹ý Àß Â¥¿©Áø äÆþÖÇø´À» ¸¸µé±â À§Çؼ­ ¾î¶² °ÍÀ» ¾Ë¾Æ¾ß ÇÒ±î¿ä?

À̸¦ ¾Ë±â À§Çؼ­´Â äÆÃÀÌ ¾î¶² ±¸Á¶·Î µÇ¾îÀÖ´Â Áö ´ë·«ÀûÀ¸·Î ¾Ë¾Æ¾ß ÇÕ´Ï´Ù. °¡Àå °£´ÜÇÑ Ã¤ÆÃÀº ´ëºÎºÐÀÇ ³×Æ®¿÷ÇÁ·Î±×·¥ÀÌ °¡Áö´Â ¼­¹ö/Ŭ¶óÀ̾ðÆ®ÀÇ ¾ç´ÜÀ» ¾ÖÇø®ÄÉÀ̼ǰú ¾ÖÇø´ÀÌ Â÷ÁöÇÏ´Â °ÍÀÔ´Ï´Ù. Ŭ¶óÀ̾ðÆ®(¼Õ´Ô)ÀÇ ¿äûÀ» ¼­¹ö°¡ ¹Þ¾Æ¼­ ó¸®ÇÑ ÈÄ Å¬¶óÀ̾ðÆ®(µé)¿¡°Ô Àü¼ÛÇØÁÖ´Â °ÍÀÌ ÁÖ¿ä °ñÀÚÁÒ. µû¶ó¼­ Ŭ¶óÀ̾ðÆ®°¡ Àü¼ÛÇÒ ¾ÖÇø´ ÇÁ·Î±×·¥°ú ¼­¹ö¿¡ ÇØ´çÇÏ´Â ¾ÖÇø®ÄÉÀÌ¼Ç µÎ °¡Áö¸¦ Á¦ÀÛÇØ¾ß ÇÏ°Ú½À´Ï´Ù. ³×Æ®¿÷ »ó¿¡¼­ ¼­¹ö/Ŭ¶óÀ̾ðÆ® ¿äûÀ» ó¸®ÇÏ·Á¸é ¾Æ¹«·¡µµ ¼­¹ö¸¦ µ¹¸®±â À§ÇØ À¥¼­¹ö ¿ªÇÒÀ» ÇÏ´Â ÄÄÇ»ÅÍ°¡ µû·Î ÀÖ¾î¾ß ÇÕ´Ï´Ù.(ÀÚ½ÅÀÇ ÄÄÇ»ÅÍ-·ÎÄÃÄÄÇ»ÅÍ ¸¦ ¾²¼Åµµ µÇ±¸¿ä.) À¥¼­¹ö ¿ªÇÒÀ» ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀº NT°Å³ª, 2000 server¿¡ IIS(ms¿¡¼­ Á¦°øÇÏ´Â ¼­¹ö), ¸®´ª½º/À¯´Ð½º¿¡ ¾ÆÆÄÄ¡ µîÀ» ±ò¾Ò´Ù°Å³ª, ¾Æ´Ï¸é ¿ì¸®°¡ º¸Åë ¾²´Â À©µµ(95, 98, Me µî)¿¡ ÆÛ½º³ÎÀ¥¼­¹ö¸¦ ¼³Ä¡ÇؾßÇÑ´Ù´Â °ÍÀÌÁÒ. ¿¡±¸ ¹¹°¡ À̸® ¾î·Á¿ö? /^_^/

¾î·µç ¼­¹ö¿ªÇÒÀ» ÇÏ´Â ÄÄÀÌ À־ °Å±â¿¡´Ù ¼­¹ö¿ë ÇÁ·Î±×·¥À» ¼³Ä¡ÇÏ°í µ¹·Á¾ß°Ú±¸³ª ÇÏ°í °¨ ÀâÀ¸½Ã¸é µÇ°Ú½À´Ï´Ù.

äÆþÖÇø´À» ¸¸µå¸é¼­ °øºÎÇÏ°Ô µÉ °ÍÀº ¿ì¼± °¡Àå Áß¿äÇÑ Åë½Åµµ±¸ ¼ÒÄÏ(socket)Åë½Å¿¡ ´ëÇÑ °ÍÀÔ´Ï´Ù. ¼ÒÄÏ¿¡´Â ¼­¹ö°¡ ¾²´Â ¼­¹ö¼ÒÄÏ°ú ÀϹݼÒÄÏÀÌ Àִµ¥ ±×¸® ¾î·ÆÁö ¾Ê½À´Ï´Ù. ±× ¼ÒÄÏÀ» ÅëÇØ ÁÖ°í¹Þ´Â ¸Þ½ÃÁöµéÀ» ó¸®Çϱâ À§Çؼ­ ¸î°¡Áö Ŭ·¡½ºµéÀ» º¸³Ê½º·Î ¹è¿ì°Ú½À´Ï´Ù.(StringTokenizer µî)

¾î, ¾ðÁ¦ ¼Õ´ÔÀÌ Á¢¼ÓÇÏ°í, ¸Þ¼¼Áö°¡ ¿Ã Áö ¸ð¸£´Ï ¹«ÇÑ ·çÇÁ¸¦ µµ´Â ¾²·¹µå(Thread)¿¡ ´ëÇؼ­µµ ¾Ë¾Æ¾ß°Ú³×¿ä.

´ëÃæ Ãʱ⼳Á¤ÀÌ ³¡³ª¸é ÀÌÁ¦ ¾×¼ÇÀ» ¹ÞÀ» ¼ö ÀÖ¾î¾ß°ÚÁÒ. ¾×¼ÇÀ̺¥Æ® ¸¶¿ì½ºÀ̺¥Æ® µî¿¡ ´ëÇØ ¹è¿öº¾´Ï´Ù.

À̰͸¸ ¾Ë¸é °¡Àå °£´ÜÇÑ Ã¤ÆÃÀº ±¸ÇöÇÒ ¼ö ÀÖ°Ú½À´Ï´Ù¸¸, µðÀÚÀÎ À̻ڰí, ±â´É ¸ÚÀÖ´Â °Ç ¹«¸®°ÚÁÒ... ´Ù¾çÇÑ ¹æÀ» °ü¸®ÇÒ ¼ö ÀÖµµ·Ï ÇØÁÖ´Â ¸î °¡Áö(Vector, HashTable µî)À¯Æ¿ Ŭ·¡½º¿Í ÇÏ´Â ±è¿¡ ³»ºÎŬ·¡½ºÀÇ °³³ä¿¡ ´ëÇؼ­ ¾Ë¾Æº¸°í¿ä, ³»Ä£ ±è¿¡ ¸¶¿ì½º À̺¥Æ®¸¦ ¹ÞÀ» ¼ö ÀÖ´Â À̹ÌÁö¿µ¿ª Canvas Ŭ·¡½º¿¡ ´ëÇØ ¾Ë¾Æº¸°Ú½À´Ï´Ù.

¿©±â¿¡ Ä£±¸¿Í À½¾ÇÀ» °°ÀÌ µè´Â´Ù°Å³ª Ä£±¸¿¡°Ô À̹ÌÁö¸¦ º¸³»Áشٰųª Çϸé Àç¹ÌÀÖ°ÚÁÒ? ±¸ÇöÇغ¾´Ï´Ù (^^)

¼­·Ð ³¡! ÀÌ ±Û¿¡¼­´Â ¿©·¯ºÐÀÌ ±Ã±ÝÇØÇϽô ºÎºÐºÎºÐ¿¡ ´ëÇØ °¢°³°ÝÆĽÄÀ¸·Î Åë´ÞÇسª°¡µµ·Ï ÇÏ°Ú½À´Ï´Ù. ºÎµð µµ¿òÀÌ µÇ½Ã±æ....

Âü, ÀÌ ±ÛÀ» ÀÐÀ» ¶§¿¡´Â Ç×»ó APIÀÇ index¹®¼­¸¦ ÁغñÇصμ¼¿ä... °°ÀÌ Ã£¾Æº¾´Ï´ç../^_^/

¡Ø °­Á¿¡ ´ëÇÑ Áú¹®Àº '¹®ÀÇ°Ô½ÃÆÇ'¿¡¼­ ÇØÁÖ¼¼¿ä.

 

2. SocketÀÇ °³³ä°ú äÆÿ¡¼­ÀÇ »ç¿ë¹ý

¼ÒÄÏ(Socket)¿¡ ¾Õ¼­ ½ºÆ®¸²(Stream)¿¡ ´ëÇØ ¾Ë¾Æ¾ß ÇÕ´Ï´Ù. ½ºÆ®¸²ÀÇ °³³äÀº °£´ÜÇÕ´Ï´Ù. ÇÑ ÇÁ·Î±×·¥¿¡¼­ ´Ù¸¥ ÇÁ·Î±×·¥À¸·Î ¾î¶² °ªµéÀ» ³Ñ°ÜÁÖ¾î¾ß ÇÒ ¶§ ½ºÆ®¸²À» »ç¿ëÇÕ´Ï´Ù. ½ºÆ®¸²(È帧)Àº ±×¾ß¸»·Î µ¥ÀÌŸµéÀÇ È帧ÀÌÁÒ. ÀÚ¹Ù¿¡¼­¸¸ Áö¿øÇÏ´Â °ÍÀÌ ¾Æ´Ï±â ¶§¹®¿¡ ¾ç´ÜÀÌ ¹Ýµå½Ã ÀÚ¹ÙÇÁ·Î±×·¥À̾î¾ßÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù.

SocketÀº TCPÀ» »ç¿ëÇØ Åë½ÅÀ» Çϴµ¥ ¾²ÀÔ´Ï´Ù. SocketÀ» ÀÌ¿ëÇØ Åë½ÅÇϱâ À§Çؼ­´Â »ó´ë ÇÁ·Î±×·¥ÀÌ ±ò¸° ÄÄÇ»ÅÍÀÇ ip¿Í »ç¿ëÇÒ port¸¦ Á¤ÇØ¾ß ÇÕ´Ï´Ù. port´Â 1024ÀÌ»ó 6¸¸5õ¹ø±îÁö »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Åë½ÅÀ̶õ ¼­¹ö/Ŭ¶óÀ̾ðÆ® ±¸Á¶·Î µÇ¾îÀÖÀ¸¹Ç·Î Åë½ÅÀ» Çϱâ À§Çؼ­´Â ¸ÕÀú ¼­¹ö¿¡¼­ ¼ÒÄÏÀ» ÁغñÇؾ߰ÚÁö¿ä. À̸¦ ¼­¹ö¼ÒÄÏÀ̶ó°í ÇÕ´Ï´Ù. »ý¼ºÀº °£´ÜÇÕ´Ï´Ù. ¼­.¹ö.¼Ò.ÄÏ À̶ó°í ¾²¸é µÇÁö¿ä.

ServerSocket ¼­¹ö¼ÒÄÏ°´Ã¼À̸§ = new ServerSocket(»ç¿ëÇÒ Æ÷Æ®);

µÆ½À´Ï´Ù. ÀÌ·¸°Ô ¼­¹ö¿¡¼­ »ç¿ëÇÒ Æ÷Æ®·Î ¼­¹ö¼ÒÄÏÀ» ¿­¾î³õÀ¸¸é ÀÌÁ¦ Åë½ÅÇÒ Áغñ°¡ µÈ °ÍÀÔ´Ï´Ù. ÀÌ ¼­¹ö¼ÒÄÏÀº Ŭ¶óÀ̾ðÆ®ÀÇ ¼ÒÄÏ¿äûÀÌ µé¾î¿À¸é »õ·ÎÀÌ ¼ÒÄÏÀ» Çϳª »ý¼ºÇÏ°í À̸¦ Ŭ¶óÀ̾ðÆ®¿Í Á¢¼Ó½ÃÄÑÁÖ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. ¿äûÀ» ±â´Ù·Á ¼ÒÄÏÀ» »ý¼ºÇÏ´Â ÄÚµåÀÔ´Ï´Ù.

Socket ¼ÒÄÏ°´Ã¼À̸§ = ¼­¹ö¼ÒÄÏ°´Ã¼À̸§.accept();

accept()ÇÔ¼ö´Â blockÇÔ¼ö·Î ¿äûÀÌ µé¾î¿Ã ¶§±îÁö ÁøÇàÀ» ¸ØÃß°í ±â´Ù¸³´Ï´Ù. ¿äûÀÌ µé¾î¿À¸é? SocketÀ» ¼ÒÄÏ°´Ã¼À̸§À¸·Î »ý¼ºÇÏÁÒ. ¿©±â¿¡ ½ºÅ©¸²À» ¿¬°áÇÏ·Á¸é ¼ÒÄÏ¿¡¼­ ½ºÆ®¸²À» ¾ò±â¸¸ ÇÏ¸é µË´Ï´Ù.

InputStream ½ºÆ®¸²°´Ã¼À̸§ = ¼ÒÄÏ°´Ã¼À̸§.getInputStream();

½ºÆ®¸²ÀÇ Á¾·ù´Â InputStream¸»°íµµ ¼¿ ¼ö ¾øÀÌ ´Ù¾çÇÕ´Ï´Ù. ^^; ±âº»ÀûÀÎ ÀÔÃâ·Â½ºÆ®¸²°ú ÆÄÀÏ ÀÔÃâ·Â ½ºÆ®¸² ¿Ü¿¡ ¿¬°á, ¸Þ¸ð¸®, ÇÊÅÍ ÀÔÃâ·Â ½ºÆ®¸² µîÀÌ ±×°ÍÀÔ´Ï´Ù. °¢ÀÚ À¯¿ëÇÑ ¸Þ¼Òµåµé·Î ¹«ÀåµÇ¾î ÀÖ½À´Ï´Ù.

Ŭ¶óÀ̾ðÆ®¿¡¼­ ÀÌ ÄÄÇ»ÅÍ¿Í Åë½ÅÇÏ°í ½ÍÀ¸¸é Æ÷Æ® ¿Ü¿¡ ÇÑ °¡Áö ´õ ip¸¦ ¾Ë¾Æ¾ß°ÚÁö¿ä? ¼ÒÄÏÀ» »ý¼ºÇÕ´Ï´Ù.

Socket °´Ã¼À̸§ = new Socket(»ó´ë ip, Æ÷Æ®);

¸¶Âù°¡Áö·Î ¿©±â¿¡µµ ½ºÆ®¸²À» ¿¬°áÇÏ¸é µË´Ï´Ù. ³¡! Âü ½±°Ô ¸»ÇÏÁÒ? ^^; »ìÀº Çϳªµµ ºÙÀÌÁö ¾Ê°í µÎ¸®¹¶½ÇÇÏ°Ô »À¸¸ ¸¸µé¾ú½À´Ï´Ù. /^_^/

ÀϹæÅë½Å(Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀ» ¼­¹ö°¡ ¹Þ¾Æ ó¸®Çؼ­ ´Ù½Ã Ŭ¶óÀ̾ðÆ®¿¡°Ô ÀÀ´ä)¼ÒÄÏÇÁ·Î±×·¥À¸·Î ¿¡.. Åë½Å°è»ê±â¸¦ °¡Á¤Çغ¼±î¿ä? µÎ¸®¹¶½Ç~ °è»ê±â ¼­¹ö´Â ¼­¹ö¼ÒÄÏÀ» »ý¼ºÇÏ°í Ŭ¶óÀ̾ðÆ®¸¦ ±â´Ù¸³´Ï´Ù. Ŭ¶óÀ̾ðÆ®´Â ¼ÒÄÏÀ» »ý¼ºÇÏ°í ¿©±â¿¡ ½ºÆ®¸²À» ºÙÀÎ ´ÙÀ½ ¼­¹ö¿¡ ip¿Í port·Î Á¢¼ÓÇÕ´Ï´Ù. ¼­¹ö¿¡¼­ ¼­¹ö¼ÒÄÏÀÌ Å¬¶óÀ̾ðÆ®ÀÇ ¼ÒÄÏ°ú Åë½ÅÇÒ ¼ÒÄÏÀ» »ý¼ºÇØÁÖ°ÚÁö¿ä? Ŭ¶óÀ̾ðÆ®°¡ ¼ÒÄÏÀ¸·ÎºÎÅÍ ¾òÀº ½ºÆ®¸²¿¡ °è»ê½ÄÀ» ¾²¸é °è»ê½ÄÀÌ ½ºÆ®¸²À» ÅëÇØ ¼ÒÄÏÀ» Ÿ°í ¼­¹ö·Î Àü´ÞµÇ¾î ¼­¹ö°¡ °è»êÇϵµ·Ï ÇÏ°í ¼­¹ö´Â À̸¦ °è»êÇØ Å¬¶óÀ̾ðÆ®¿¡°Ô ÀÀ´äÇÕ´Ï´Ù.

³¡! ³Ê¹« ½É½ÉÇÏÁÒ? °è»ê ÇÑ ¹ø ÇÏ°í ³¡³»´Ï±î ±×·¸ÁÒ. À½ ±×·¯¸é ¼­¹ö¿¡¼­ °è»ê½ÄÀ» ¹Þ´Â(read) ºÎºÐÀ» ½º·¹µå·Î ±¸¼ºÇØ ¹«ÇÑ·çÇÁ µ¹¸®¸é µÇ°Ú±º¿ä. ±×·¯¸é °è»ê½ÄÀÌ ¿À¸é ½º·¹µå°¡ ¹Þ¾Æ¼­ ¿­½ÉÈ÷ °è»êÇÏ°í ÀÖ°í, ±× Áß°£¿¡¶óµµ Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍ ¶Ç ¿äûÀÌ ¿À¸é »õ·Î¿î ½º·¹µå°¡ ¹Þ¾Æ¼­ ¿­½ÉÈ÷ ¹Þ¾Æ¼­ º¸³»(write)ÇØÁÖ¸é µÇ°Ú³×¿ä.

³¡! ¿¡ ¶Ç ¼·¼·ÇÑ°¡¿ä? ¿¡½á ¼­¹ö¸¦ ±¸ÃàÇߴµ¥ Ŭ¶óÀ̾ðÆ®¸¦ Çϳª¸¸ ¹ÞÀÚ´Ï Á» ±×·¸³×¿ä. Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀ» ¹Þ¾Æ ¼ÒÄÏÀ» »ý¼ºÇÏ´Â ºÎºÐ Áï,

Socket ¼ÒÄÏ°´Ã¼À̸§ = ¼­¹ö¼ÒÄÏ°´Ã¼À̸§.accept();

ÀÌ ºÎºÐµµ ¹«ÇÑ·çÇÁ¿¡ ½º·¹µå ó¸®Çؼ­ Ŭ¶óÀ̾ðÆ®°¡ Á¢¼ÓÇÏ´Â ´ë·Î »õ·Î ¼ÒÄÏÀ» »ý¼ºÇÏ¸é µÇ°Ú±º¿ä. ½º·¹µå ó¸®ÇßÀ¸´Ï±î ÀÌÀüÀÇ Å¬¶óÀ̾ðÆ®ÀÇ ¿äû°ú »ó°ü¾øÀÌ »õ·Î¿î Ŭ¶óÀ̾ðÆ®µµ °è»êÀ» ÇÒ ¼ö ÀÕ°Ú½À´Ï´Ù. ÁøÂ¥ ³¡! Áö±Ý±îÁö ´Ù äÆÃÀ» À§Çؼ­ ÇÊ¿äÇÑ ³»¿ëÀ̾ú½À´Ï´Ù. ½º·¹µå(¸ÖƼ½º·¹µå)´Â ÀÚ¹ÙÀÇ ÁÖ¿äÇÑ Æ¯Â¡ÁßÀÇ ÇϳªÀÔ´Ï´Ù. c·Î ÇÏ¸é ¹«Àð°Ô ´Ã¾îÁú ÄÚµùÀ» ´Ü¼û¿¡ ÁÙ¿©ÁÖÁÒ. ±×¸¸Å­ ºÎÇϵµ ¸¹ÀÌ °É¸³´Ï´Ù¸¸...

ÀÚ, Áö±Ý±îÁö ¸ð¸£´Â ³»¿ë ÀÖÀ¸¼Ì³ª¿ä? °ÆÁ¤¸¶¼¼¿ä. 100% 200% µÚ¿¡¼­ ´Ù ¼³¸íÇÒ °Ì´Ï´Ù. ÀÏ´Ü ÀоîµÐ´Ù »ý°¢ÇÏ°í ¸Ó¸®¼Ó¿¡ ³Ö¾îµÎ¼¼¿ä. /^_^/

 

äÆÿ¡¼­´Â ÀÌ ¼ÒÄÏÀ» ¾î¶² ±¸Á¶·Î ÀÌ¿ëÇØ¾ß ÇÒ±î¿ä?

´« Å©°Ô ¶ß¼¼¿ä. »À¸¸ ¼¼¿ì´Â °ÍÀ̾ Á¶±Ý º¹ÀâÇÕ´Ï´Ù.

äÆÃÀº Ŭ¶óÀ̾ðÆ®¿Í ¼­¹ö°¡ ÇÏ´Â °ÍÀÌ ¾Æ´Õ´Ï´Ù. Ŭ¶óÀ̾ðÆ®³¢¸® ÇÏ´Â °ÍÀÌÁÒ. 2¸íÀÌ Ã¤ÆÃÀ» ÇÑ´Ù°í ÇսôÙ. µÑ ´Ù Ŭ¶óÀ̾ðÆ®ÀÔ´Ï´Ù. ¸ÕÀú »ç¶÷ÀÌ ¼­¹ö¿¡ Åë½Å°è»ê±âó·³ ¼ÒÄÏÁ¢¼ÓÀ» Çؼ­ ±â´Ù¸®°í ÀÖ°í, µÎ ¹ø° »ç¶÷µµ ¼ÒÄÏÁ¢¼ÓÀ» ÇÕ´Ï´Ù. ÇÑ »ç¶÷ÀÌ ¸»À» ÇÕ´Ï´Ù. ÀÌ ±Û¾¾°¡ µÎ »ç¶÷ ¸ðµÎ¿¡°Ô º¸¿©¾ß°ÚÁö¿ä? ±×·²·Á¸é ±× »ç¶÷ÀÇ ¸»ÀÌ ÀÚ½ÅÀÇ È­¸é¿¡ ±×³É º¸¿©Á®¼­´Â ¾ÈµË´Ï´Ù. ¿ì¼± ¼­¹ö¿¡ ÀÚ½ÅÀÌ ¸»À» ÇÑ °ÍÀ» ¾Ë·Á¾ß µÇ°í¿ä, ¼­¹ö´Â À̸¦ ¹Þ¾Æ¼­ ó¸®(ÇÒ °Ô ÀÖ³ª?) Àڽſ¡°Ô Á¢¼ÓÇÑ Å¬¶óÀ̾ðÆ® ¸ðµÎ¿¡°Ô »Ñ·ÁÁÝ´Ï´Ù. ¸»À» Ä£ »ç¶÷µµ ±×Á¦¼­¾ß ÀÚ½ÅÀÇ ¸»ÀÌ º¸ÀÔ´Ï´Ù. ¹°·Ð »ó´ëµµ º¸ÀÔ´Ï´Ù. ³¡!

¾î·ÆÁö ¾ÊÁö¿ä? ±×·³ ¿©±â¿¡ ½º·¹µå´Â ¾îµð¾îµð¿¡ µé¾î°¡¾ß ÇÒ±î¿ä? ¿ì¼± °è»ê±â¿¡¼­ ¸»ÇßµíÀÌ Å¬¶óÀ̾ðÆ®°¡ ¾ðÁ¦µç Á¢¼ÓÇÒ ¼ö ÀÖµµ·Ï ¼­¹ö¼ÒÄÏ¿¡ ¼ÒÄÏÀ» ¿­¾îÁÖ´Â ºÎºÐ¿¡ °É¾î¼­ °¢ Ŭ¶óÀ̾ðÆ®(¼ÒÄÏ)ÀÌ ¼­·Î »ó°ü¾øÀÌ µ¿ÀÛÇÒ ¼ö ÀÖµµ·Ï ÇØÁÖ¾î¾ß°ÚÁö¿ä. ±×¸®°í? ³× ¿­·ÁÁø ¼ÒÄÏ¿¡ ¾ðÁ¦ ¸Þ¼¼Áö°¡ °¥ Áö ¸ð¸£´Ï ¸Þ¼¼Áö¸¦ ¹Þ¾Æ Àд ºÎºÐ¿¡´Ù ½º·¹µå¸¦ °É¾îÁÖ¾î¾ß°Ú±º¿ä.

³¡! ÀÌ·¸°Ô ¶¼¾î¼­ À̾߱⸦ ÇÏ´Ï ½¬¿öº¸ÀÌÁö¸¸, ¾Æ¾Æ ½º·¹µå°¡ µÎºÎºÐÀ̳ª µé¾î°¡´Ù´Ï /^_^/ ±í°Ô »ý°¢ÇÒ ¼ö·Ï ¸Ó¸®°¡ º¹ÀâÇØÁý´Ï´Ù. À§ÀÇ À̾߱⸦ ±×¸²À¸·Î º¸ÀÌ°Ú½À´Ï´Ù.

§~ /^_^/ ³×, ¿ä»õ s/w´Ü¼Ó¶°¼­ Æ÷Åä¼¥ ¶óÀ̼¾½º¸¦ µðÀÚÀ̳ʸ¸ Áà°¡Áö±¸ ±×¸²À» ¸ø±×¸³´Ï´Ù. ¾îÈæ~ ¸¸´É¿£ÅÍÅ×À̳ʰ¡ µÇ·Á´Â ³ª¿¡°Ô Æ÷Åä¼¥µµ ¾ÈÁÖ´Ù´Ï..

¾î¿ ¼ö ¾øÀÌ ´« ¾ÆÇÁ½Ã°Ô ´Ù½Ã ÇÑ ¹ø ¸»·Î ¶°µì´Ï´Ù. äÆü­¹ö¿¡¼­ ¼­¹ö¼ÒÄÏÀ» »ý¼ºÇÕ´Ï´Ù. Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ¹«ÇÑ·çÇÁ·Î ±â´Ù¸³´Ï´Ù. ¼ÒÄÏ¿¬°áµÇ´Â Á·Á· Ŭ¶óÀ̾ðÆ® ½º·¹µå¸¦ »ý¼ºÇØÁÖ°í ÀÌ ¾²·¹µå¸¦ ¼­¹öÀÇ ¸®½ºÆ®¿¡ Ãß°¡ÇÕ´Ï´Ù. ¼­¹ö°¡ À̵éÀ» °ü¸®Çϱâ À§Çؼ­ÁÒ. ÁÖ·Î VectorŬ·¡½º¸¦ »ç¿ëÇÕ´Ï´Ù. (¾Ñ! º¤ÅÍ°¡ ³ª¿Ô±º¿ä! ) Ŭ¶óÀ̾ðÆ®¿¡¼­´Â ¿ì¼±, ¼­¹ö¿Í ¼ÒÄÏ ¿¬°áÀ» ÇÕ´Ï´Ù. ½ºÆ®¸²µµ ºÙ¿©¾ß °ÚÁö¿ä. ±×¸®°í ¾ðÁ¦¶óµµ ¼­¹ö·ÎºÎÅÍ ¸Þ½ÃÁö¸¦ ¹ÞÀ» ¼ö ÀÖµµ·Ï ½º·¹µå¸¦ »ý¼ºÇØ ±¸µ¿ÇÕ´Ï´Ù. ÀÌ ½º·¹µå°¡ ¸Þ½ÃÁö¸¦ ¹ÞÀ¸¸é, È­¸é¿¡ Ç¥½ÃÇØÁÝ´Ï´Ù. ÀÌ¿Í º°µµ·Î »ç¿ëÀÚ°¡ ¾î¶² ÀÔ·ÂÀ» ÇÏ¸é ¸Þ½ÃÁö¸¦ ¼­¹ö·Î Àü¼ÛÇÕ´Ï´Ù. ¸Þ½ÃÁö°¡ ¼­¹ö¿¡ Àü¼ÛµÇ¸é ¼­¹ö°¡ ó¸®Çؼ­ ÀÚ½ÅÀÇ ½º·¹µå ¸®½ºÆ® ¸ðµÎ(ȤÀº ÀϺÎ)¿¡°Ô ¸Þ½ÃÁö¸¦ º¸³»ÁÝ´Ï´Ù. ´Ù¸¥ Ŭ¶óÀ̾ðÆ® ½º·¹µåµéÀº ±â´Ù·È´Ù´Â µíÀÌ À̸¦ ¹Þ¾Æ È­¸é¿¡ Ç¥½ÃÇÏ°ÚÁÒ. ³¡!

¾Æ¾Æ ´«¾ÆÇÁ°Ô Çصå·Á¼­ Á˼ÛÇÕ´Ï´Ù. À̷νá äÆÿ¡¼­ÀÇ ¼ÒÄϱ¸Á¶¿¡ ´ëÇØ ¾Ë¾Æº¸¾Ò½À´Ï´Ù. ±×¸® ¾î·ÆÁö ¾ÊÀ¸¼Ì±â¸¦~ ¾Ñ ´Ù ¾Æ½Ã´Â ³»¿ëÀ̶󱸿ä~ /^_^/ ÈÄ´Ù´Ú~

3. SocketºÎºÐ ¼Ò½º

¼­¹öºÎºÐ:

//ÀÚ ¸ÞÀÎÇÔ¼ö¿¡¼­ Æ÷Æ®¸¦ Á¤ÇÒ ¼ö ÀÖµµ·Ï Çß½À´Ï´Ù. ½ÇÇàÀ» ÇÒ ¶§ java chat 20001 ÀÌ·±½ÄÀ¸·Î ½ÇÇàÇÕ´Ï´Ù.

//¸¸¾à ¸®´ª½º¿¡¼­ ¹é±×¶ó¿îµå·Î Ç×»ó ½ÇÇàµÇ¾î µ¹¾Æ°¡µµ·Ï ÇÏ·Á¸é,

//nohup java chat 20001 & <-ÀÌ·¸°Ô ½ÇÇàÇÕ´Ï´Ù.

public static void main(String arg[])throws IOException
{
//chatÀÌ ¼­¹öºÎºÐÀÇ Å¬·¡½ºÀÔ´Ï´Ù.

chat server = new chat();

//¼­¹ö¿ë ¼ÒÄÏÀÌ µû·Î ÀÖ´Ù°í ¸»¾¸µå·ÈÁÒ?
ServerSocket serverSocket = null;

//20001À» ¹Þ¾Æ¿É´Ï´Ù.
int port = Integer.parseInt(arg[0]);

boolean listening = true;
try
{

//¼­¹ö¿ë ¼ÒÄÏÀ» port·Î ¿±´Ï´Ù. ¼­¹ö¿ë ¼ÒÄÏÀ̹ǷΠip´Â ÇÊ¿ä¾ø°ÚÁÒ?
serverSocket = new ServerSocket(port);
}
catch(IOException e)
{
System.out.println("¿¬°á ½ÇÆÐÀÔ´Ï´Ù. \n");
System.exit(-1);
}
System.out.println("¼­¹ö" + serverSocket +","+ port+ "¿¡¼­ ¿¬°áÀ» ±â´Ù¸³´Ï´Ù.\n");
//¸»¾¸ÇϽŠ´ë·Ó´Ï´Ù^^;

}

Ŭ¶óÀ̾ðÆ® ºÎºÐ:

public void connect()
{
try
{

//chaturl:ip¿Í port·Î ¼ÒÄÏÀ» ¿±´Ï´Ù.
chatSocket = new Socket(applet.chaturl,applet.port);

//°¢°¢ ½ºÆ®¸²À» ¿¬°áÇÕ´Ï´Ù.

input = new DataInputStream(new BufferedInputStream(chatSocket.getInputStream()));
output = new DataOutputStream(new BufferedOutputStream(chatSocket.getOutputStream()));

//ÀԷ½ºÆ®¸²¿¡ ÀÐÀ» Áغñ¸¦ ÇÕ´Ï´Ù. readUTF´Â block method·Î ÀÐÀ» °ÍÀÌ ¿Ã ¶§±îÁö ±â´Ù¸³´Ï´Ù.

String line=input.readUTF();

//¼­¹ö¿¡¼­ ¼ÒÄÏÀÌ ¿¬°áµÇ¸é TerminalÀ̶õ ¸Þ¼¼Áö¸¦ º¸³»±â·Î Çß½À´Ï´Ù.
if(line.equals("Terminal"))
{
//»ç¿ëÀÚÁ¤º¸¸¦ º¸³À´Ï´Ù. |·Î ¿¬°áµÈ ½ºÆ®¸µÀ» º¸³»´Âµ¥, ³ªÁß¿¡ StringTokenizer·Î À߶ó½á¾ß°ÚÁö¿ä.

output.writeUTF("chogi|"+subtitle+"|"+sex+"|"+age+"|"+nick.trim()+"|"+loca+"|"+email+"|"+cpic+"|"+ccolor);

//¾µ ¶§´Â ²À flush¸¦ ÇØÁÖ¾î¾ß ¹öÆÛ¿¡ ½×¿©ÀÖÁö ¾Ê°í ¹Ù·Î Àü¼ÛµË´Ï´Ù.

output.flush();
}
}
catch( UnknownHostException e)
{
System.exit(1);
}
catch(IOException e)
{
System.exit(1);
}
}

 

4. Thread ÀÌ¿ë¹ý

À½ ÇÁ·Î¼¼½º¿Í ThreadÀÇ Â÷ÀÌÁ¡Àº ¾Æ½Ã°ÚÁö¿ä?

ÀϹÝÀûÀ¸·Î ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°¸é, ÇϳªÀÇ ÇÁ·Î¼¼½º·Î¼­ µ¿ÀÛÇÏ°Ô µË´Ï´Ù. ´Ù½Ã ¸»Çؼ­, ¿ì¸®°¡ ½ÇÇà½ÃÅ°´Â ÇϳªÀÇ ÇÁ·Î±×·¥Àº ÇϳªÀÇ ÇÁ·Î¼¼½º·Î¼­ ³ªÅ¸³ª°Ô µË´Ï´Ù. ÀÚ¹Ù¿¡¼­ÀÇ ÇÁ·Î¼¼½º´Â ÀÚ¹Ù ·±Å¸ÀÓ È¯°æ°ú ¹ÐÁ¢ÇÑ °ü°è¸¦ °®°í ÀÖ½À´Ï´Ù. ¿Ö³ÄÇϸé, ÀÚ¹Ù ·±Å¸ÀÓ È¯°æÀº ÇÁ·Î¼¼½º°¡ ½ÇÇàµÉ ¼ö ÀÖ´Â ±â¹Ý ȯ°æÀ» Á¦°øÇØ Áֱ⠶§¹®ÀÔ´Ï´Ù. ÇÁ·Î¼¼½º´Â ´Ù¸¥ ÇÁ·Î¼¼½º¸¦ »ý¼ºÇÒ ¼ö Àִµ¥, ÀÌ ¶§ »ý¼ºµÈ ÇÁ·Î¼¼½º¸¦ ÀÚ½Ä ÇÁ·Î¼¼½º¶óÇÏ°í ±âÁ¸¿¡ ÀÖ´ø ÇÁ·Î¼¼½º¸¦ ºÎ¸ð ÇÁ·Î¼¼½º¶ó ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ºÎ¸ð/ÀÚ½Ä ÇÁ·Î¼¼½º °³³äÀº ÇϳªÀÇ ÀÚ¹Ù ÇÁ·Î±×·¥¿¡¼­ ´Ù¸¥ ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°°íÀÚ ÇÒ ¶§, ÁÖ·Î »ç¿ëµË´Ï´Ù. ´Ù½Ã ¸»Çؼ­, Ç÷§Æû µ¶¸³ÀûÀÎ ÀÚ¹Ù ÇÁ·Î±×·¥ÀÌ Ç÷§Æû°ú ¹ÐÁ¢ÇÑ °ü·ÃÀÌ ÀÖ´Â ÀÛ¾÷À» ÇØ¾ß ÇÒ °æ¿ì, ÇØ´ç ÀÛ¾÷À» ¼öÇàÇÒ ÇÁ·Î±×·¥À» ´Ù¸¥ ¾ð¾î·Î ÇØ´ç Ç÷§Æû¿¡ ¸Âµµ·Ï ÀÛ¼ºÇÏ°í, ÀÌ ÇÁ·Î±×·¥À» ÀÚ¹Ù ÇÁ·Î±×·¥¿¡¼­ ½ÇÇà½ÃÄÑ ÁÖ´Â °ÍÀÔ´Ï´Ù. - ¹Ú¿ë¿ì´Ô °­Á¿¡¼­ ¹ßÃé -

ÀÚ¹Ù¿¡¼­ ÇÁ·Î¼¼½º¸¦ °ü¸®ÇØÁִ Ŭ·¡½º·Î Runtime Ŭ·¡½º¿Í ProcessŬ·¡½º°¡ ÀÖ½À´Ï´Ù. ¸Þ¸ðÀå°°Àº ¿ÜºÎÇÁ·Î±×·¥À» ½ÇÇàÇÏ°í °ü¸®ÇÒ ¼ö ÀÖµµ·Ï ÇØÁÖÁö¿ä.

ÇϳªÀÇ ÇÁ·Î±×·¥À» ÇÁ·Î¼¼½º¶ó°í º¼ ¶§, ½º·¹µå´Â ÇϳªÀÇ ÇÁ·Î±×·¥ ³»¿¡¼­ÀÇ ½ÇÇà ´ÜÀ§¶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÚ¹Ù¿¡¼­´Â °¢ ÀÛ¾÷(Ÿ½ºÅ©)À» ½º·¹µå·Î Ç¥ÇöÇϵµ·Ï ÇÏ°í, ÀÌ·¯ÇÑ ½º·¹µå¸¦ ¿©·¯ °³ µÑ ¼ö ÀÖµµ·Ï ÇÔÀ¸·Î½á ¸ÖƼŸ½ºÅ·À» °¡´ÉÇÏ°Ô ÇØ ÁÝ´Ï´Ù. ´Ù½Ã ¸»Çؼ­, ÀÚ¹Ù¿¡¼­´Â ¸ÖƼŽºÅ·À» ¿©·¯ °³ÀÇ ½º·¹µå¸¦ µ¿½Ã¿¡ ¼öÇàÇÏ´Â ¸ÖƼ½º·¹µùÀ» ÀÌ¿ëÇÏ¿© ÇØ°áÇÏ°í ÀÖ½À´Ï´Ù. µû¶ó¼­, ÀÚ¹Ù °¡»ó¸Ó½ÅÀº ÇϳªÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀÌ µ¿½Ã¿¡ ¼öÇàµÇ´Â ¿©·¯ °³ÀÇ ½º·¹µå¸¦ °¡Áú ¼ö ÀÖµµ·Ï ÇÏ°í ÀÖ½À´Ï´Ù. ¹°·Ð, ÀÏÀÇ ¿ì¼±¼øÀ§°¡ Á¸ÀçÇϵíÀÌ ¸ðµç ½º·¹µå´Â ±× ¿ì¼±¼øÀ§¸¦ °¡Áö°Ô µË´Ï´Ù. - ¿ª½Ã ¹Ú¿ë¿ì´Ô °­Á¿¡¼­ ¹ßÃé -

¸ÖƼ¾²·¹µå´Â ÀÚ¹Ù¿¡ ÀåÁ¡ Áß¿¡ ÇϳªÀÔ´Ï´Ù. c¿¡¼­ ¾²·¹µå¸¦ ±¸ÇöÇÏ·Á¸é ¹«Ã´ ÈûµéÁö¸¸(°¡·É, 0.05Ãʸ¶´Ù ¹ø°¥¾Æ°¡¸ç ÇÔ¼ö¸¦ ¼öÇàÇÑ´ÙµçÁö), ÀÚ¹Ù¿¡¼­´Â ´Ù¸¸ ThreadŬ·¡½º¸¦ »ó¼Ó ȤÀº Runnable ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇϱ⸸ ÇÏ¸é µË´Ï´Ù.

ÀÚ ±×·¯¸é Á¦°¡ ¸¸µç äÆÿ¡¼­´Â ¾²·¹µå°¡ ¾îµð¼­ ¾î¶»°Ô ¾²ÀÌ°í ÀÖ´Â Áö ÇÑ ¹ø ¾Ë¾Æº¼±î¿ä? (À§¿¡¼­µµ ¾ð±ÞÇÑ ³»¿ëÀ̱ä ÇÕ´Ï´Ù.)

¿ì¼± ¼­¹ö°¡ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. ÀÏ´Ü ¼­¹ö¿ë ¼ÒÄÏÀ» ¿­¾î³õ°í, Ŭ¶óÀ̾ðÆ®µéÀÌ ¾ðÁ¦ Á¢¼ÓÇÒ Áö ¸ð¸£´Ï Ŭ¶óÀ̾ðÆ®µéÀÇ ¼ÒÄÏÁ¢¼Ó ½Ãµµ°¡ ¿À¸é À̸¦ ¼ÒÄÏ Çϳª¸¦ ¿­¾î ¿¬°á½ÃÄÑÁÖ´Â ÀÛ¾÷À» ½º·¹µå·Î ó¸®ÇÕ´Ï´Ù. ½º·¹µå°¡ ¾Æ´Ï¶ó¸é Á¢¼Ó¿äûÀÌ Çϳª ¿ÔÀ» ¶§, ¼ÒÄÏ¿­°í ÇÏ´Â ÀÛ¾÷ ÇÏ´Â µ¿¾È ´Ù¸¥ Ŭ¶óÀ̾ðÆ®´Â Á¢¼ÓÀ» ÇÒ ¼ö ¾ø°ÚÁö¿ä?

¶ÇÇÑ, ¸Þ½ÃÁö¸¦ ¹ÞÀ» ¶§µµ ÇÊ¿äÇÕ´Ï´Ù. ¸Þ½ÃÁö°¡ ¾ðÁ¦ ¿Ã Áö ¸ð¸£´Ï ¸Þ½ÃÁö¸¦ ¹Þ´Â ÇÔ¼ö¸¦ ¹«ÇÑ·çÇÁ¸¦ ÅëÇØ µ¹°í ÀÖ¾î¾ß °ÚÁö¿ä. À̸¦ ½º·¹µå·Î ó¸®ÇÏÁö ¾ÊÀ¸¸é ¸Þ½ÃÁö ¹Þ±â À§Çؼ­ ´Ù¸¥ ¾Æ¹« Àϵµ ÇÒ ¼ö ¾ø°ÚÁö¿ä? ^^; ¸Þ½ÃÁö ¹Þ¾Æ¼­ ó¸®Çؼ­ µ¹·Áº¸³»´Â µ¿¾È ´Ù¸¥ ¸Þ½ÃÁö°¡ ¿Íµµ ó¸® ¸øÇÏ´Â °ÍÀº ¹°·ÐÀÌ°í¿ä.

Ŭ¶óÀ̾ðÆ® ÀÔÀå¿¡¼­´Â ¸Þ½ÃÁö ¹ÞÀ» ¶§ ÇÊ¿äÇÏ°Ú±º¿ä. ¾î¶² ³ÑÀÌ ¸»ÇÒ Áö ¸ð¸£´Ï À½....¶Ç ¾ðÁ¦ ÇÊ¿ä ÀÖ³ª? °¼¿ì¶× /?^_^?/ ¸»ÀÌ ÇÊ¿ä¾ø´Ù. ¼Ò½º¸¦ º¸½Ã°Ú½À´Ï´Ù. ^^

5.ThreadºÎºÐ ¼Ò½º

¼­¹ö Ŭ¶óÀ̾ðÆ® Á¢¼Ó ¹Þ¾Æ ½º·¹µå·Î »ý¼ºÇØ ³Ñ±â´Â ºÎºÐ:

try
{
while(listening)
{
//ChatThread ´Â °¢ Ŭ¶óÀ̾ðÆ®¸¦ ´Ù·ç´Â Thread¸¦ »ó¼ÓÇÑ Å¬·¡½ºÀÔ´Ï´Ù.

ChatThread thread;
thread = new ChatThread(server,serverSocket.accept());
// server.addClient(thread);
thread.start();
}
serverSocket.close();
}
catch(IOException e) {}

ÀÌ ºÎºÐÀÌ ¼­¹öÃø¿¡¼­ À§¿¡¼­ º¸½Å ¼Ò½º(main ¸Þ¼Òµå) µÚ ºÎºÐ¿¡ Ãß°¡µÇ¾î¾ßÇÏ´Â ºÎºÐÀÔ´Ï´Ù.

listening = true´Ï±î ¹«ÇÑ·çÇÁ°ÚÁö¿ä.

thread »ý¼º½Ã, chat Ŭ·¡½º(server)¸¦ ÀÎÀÚ·Î ³Ñ°ÜÁÝ´Ï´Ù. ±×ÂÊ¿¡¼­ ¾µ ÇÊ¿ä°¡ Àְŵç¿ä.

±×·¯¸é ChatThread¸¦ º¸½Ã°Ú½À´Ï´Ù. ÇÊ¿ä¾ø°Å³ª Áö³ªÄ¡°Ô ±ä ºÎºÐÀº »ý·«µÈ ºÎºÐÀÔ´Ï´Ù.

//Ŭ·¡½º ÀÚü°¡ ½º·¹µåÀÔ´Ï´Ù.

class ChatThread extends Thread //±×Ä¡¿ä?
{
chat xServer;
Socket xSocket;

//Ŭ¶óÀ̾ðÆ® ¼Ó¼º
String bangje;
String szUserName;
String sex = null;
String age = null;
String loca = "¾øÀ½";
String email = "¾øÀ½";
String host;

//½ºÆ®¸² ¼±¾ð

public DataInputStream streamIn;
public DataOutputStream streamOut;
int nState=0;
boolean bangjang = false;//¹æÀåÀΰ¡?
String time=null;
Vector temp;
String cpic="0",ccolor="0";//ij¸¯ÅÍäÆðú ±ÛÀÚ»ö»ó ÀúÀåÀ» À§ÇÑ º¯¼ö

public ChatThread(chat server,Socket socket)
{

//»ý¼ºÀÚ Ã³¸®

xServer = server;
xSocket = socket;
streamOut =null;
streamIn = null;
}

public void run()
{
try
{

//½ºÆ®¸² ¿­°í
streamIn = new DataInputStream(new BufferedInputStream(xSocket.getInputStream()));
streamOut = new DataOutputStream(new BufferedOutputStream(xSocket.getOutputStream()));

String inputLine, outputLine;

//¾Æ±î Á¢¼ÓµÇ¸é TerminalÀ̶ó°í ½á¼­ º¸³»ÁÖ±â·Î ÇßÁö¿ä.

streamOut.writeUTF("Terminal");
streamOut.flush();

//ÀÌ°Ç Á¦°¡ ÇÔ Çغ»°Çµ¥, Ŭ¶óÀ̾ðÆ®ÀÇ ip¸¦ ÃßÀûÇÑ °ÍÀÌÁö¿ä.

String localhost = xSocket.getInetAddress().toString();
host=localhost.substring(0,localhost.indexOf("/"));

//¸Þ½ÃÁö¹Þ´Â ¹«ÇÑ·çÇÁÀÔ´Ï´Ù.

while ((inputLine = streamIn.readUTF()) != null)
{

//StringTokenizer »ç¿ë¹ýÀº ³ªÁß¿¡.


StringTokenizer str = new StringTokenizer(inputLine,"|");
inputLine =(String) str.nextToken();

//ÀÌ·±Àú·± ¸Þ½ÃÁö ó¸®Çϵµ·Ï if¹® ºÐ±â

if(inputLine.equals("admin"))
{
xServer.adminchogi(str,this);
}
else if(inputLine.equals("adminout"))
{
xServer.adminout(this);
}
else if(inputLine.equals("newbang"))
{
xServer.newbang(str,this);
}

}
//Á¾·áó¸®

streamOut.close();
streamIn.close();
xSocket.close();
xServer.removes(this);
}

//Exception¹ß»ý½Ã Á¾·áó¸®
catch(Exception e)
{

//°©ÀÚ±â Á¢¼Ó²÷±â°Å³ª Çؼ­ ³ª°¬´Ù¸é, ±× ³ÑÀ» ¹æ¿¡¼­ »©Áö ¾ÊÀ¸¸é °è¼Ó ³²¾Æ ÀÖÀ» Áöµµ..(¸®½ºÆ®¿¡¼­µµ »èÁ¦)
temp = (Vector)xServer.groups.get(bangje);
temp.removeElement(this);
xServer.groups.put(bangje,temp);
}
}
}

ÇäÇä.. µÆ±º¿ä. ³× ´Ù ¾Ë·Áµå¸®°í ÀÖ½À´Ï´Ù. ¼Ó ÈÄ·ÃÇϽÃÁÒ?

Ŭ¶óÀ̾ðÆ® ºÎºÐ:

ÀÌ ºÎºÐÀº °£´ÜÇÕ´Ï´Ù. ¸Þ½ÃÁö¸¸ ¹«ÇÑ·çÇÁ µ¹¸é¼­ ¹Þ¾ÆÁÖ¸é µÇÁö¿ä.

public void run()//Thread½Ã°Ç.. RunnableÀ» ±¸ÇöÇϼ̴ø.. ¾î·µç run()¸Þ¼Òµå
{
try
{
while(true)
{
//¸Þ½ÃÁö Á¾·ù¿¡ µû¶ó ó¸®ÇØÁÖ´Â ¸Þ¼Òµå
Messagekind(new StringTokenizer(input.readUTF(),"|"));
try
{

//½º·¹µå Àá±ñ ½¬¾îÁÝ´Ï´Ù. ½º·¹µå°¡ ³Ê¹« ¹Ù»Ú°Ô µ¹¾Æ°¡¸é ÀÚÄ© ÇؾßÇÒ ÀÏÀ» ¸øÇÕ´Ï´Ù.
wait(100);
}
catch(Exception e)
{
}
}
}
catch(IOException e)
{
disconnect();//½ºÆ®¸²ÀÌ ²÷±â¸é Á¢¼ÓÀÌ ²÷°å´Ü ¶æÀ̹ǷΠdisconnet()¸¦ È£Ãâ(¹°·Ð »ç¿ëÀÚ Á¤ÀÇ ¸Þ¼Òµå)
}
}

 

6. ÇÁ·ÎÅäÄÝ Á¤ÀÇ¿Í StringTokenizer Ŭ·¡½ºÀÇ ÀÌ¿ë¹ý

¸ÕÀú, Åë½Å±Ô¾à(ÇÁ·ÎÅäÄÝ)À» ¸ÕÀú Á¤ÀÇÇغ¾½Ã´Ù. ÇÁ·ÎÅäÄÝÀº º¸³»´Â Ãø°ú ¹Þ´Â Ãø¿¡¼­ ¹Ì¸® ¾à¼ÓÇÑ ÀÏÁ¤ÇÑ Çü½Ä °°Àº °ÍÀ» ÀǹÌÇÕ´Ï´Ù. ¾Æ¹«Æ° ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ®°¡ ¾î¶°ÇÑ Çü½ÄÀ¸·Î ¼­·Î¸¦ ±¸ºÐÇÒ °ÍÀÎÁö¸¦ ¾à¼ÓÇØ¾ß ÇÕ´Ï´Ù. ÇÁ·ÎÅäÄÝÀ» Àß Á¤ÀÇÇÏ´Â °ÍÀº ¼ÒÄÏ Åë½ÅÀÇ ±âº»ÀÔ´Ï´Ù. ÇÁ·ÎÅäÄÝÀ» ¾ó¸¶³ª Àß Á¤ÀÇÇÏ´À³Ä¿¡ µû¶ó¼­ ÇÁ·Î±×·¡¹ÖÀÌ ´ë´ÜÈ÷ ¾î·Á¿ï ¼öµµ ÀÖ°í, ½¬¿öÁú ¼öµµ ÀÖ½À´Ï´Ù. ÇÁ·ÎÅäÄÝÀ» À߸ø Á¤ÀÇÇϸé ÇÁ·Î±×·¥ Áß¿¡ ÇÁ·ÎÅäÄÝÀ» ¹Ù²Ù¾î¾ß ÇÏ´Â °æ¿ìµµ »ý±æ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·± °æ¿ì¿¡´Â µ¥ÀÌÅ͸¦ Àü¼ÛÇϰųª ¼ö½ÅÇÏ´Â ºÎºÐÀ» ´Ù½Ã ´Ù ¹Ù²Ù¾îÁÖ¾î¾ß ÇϹǷΠº¸Åë Èûµç ÀÏÀÌ ¾Æ´Ï°ÚÁÒ.

Á¤ÀÇ´Â Å©°Ô µÎ °¡Áö°¡ ÀÖ½À´Ï´Ù. ¾µ ¶§ ÀÏÁ¤ ¹ÙÀÌÆ® ¼ö·Î ôôô ½á¼­, ¹ÞÀ» ¶§ ±× ¹ÙÀÌÆ® ¼ö´ë·Î Àß¶ó¼­ »ç¿ëÇÏ´Â ¹ý°ú, °¢ ÅäÅ«(¿ì¸®°¡ »ç¿ëÇÒ ¸Þ½ÃÁöµé)°ú ÅäÅ« »çÀÌ¿¡ ºÐ¸®ÀÚ¸¦ ³Ö¾î¼­ ¹ÞÀ» ¶§ ºÐ¸®ÀÚ¸¦ ±âÁØÀ¸·Î ¸Þ½ÃÁö¸¦ Àß¶ó¼­ »ç¿ëÇÏ´Â ¹ýÀÌ ±×°ÍÀÔ´Ï´Ù.ÅäÅ«ÀÇ Å©±â°¡ ÀÏÁ¤ÇÑ Å©±â¸¦ °®°Å³ª, ƯÁ¤ ÃÖ´ë°ªÀ» °®°í ÀÖ´Ù¸é ¸ð¸£Áö¸¸, äÆÿ¡¼­´Â ÀϹÝÀûÀ¸·Î ±×·¸Áö ¾Ê±â ¶§¹®¿¡, (ÀÌ »ç¶÷ÀÌ ¸î ±ÛÀÚ¸¦ Ä¥ Áö ¾î¶»°Ô ¾Ë°Ú½À´Ï±î..) µÎ ¹ø° ¹æ¹ýÀ» ¸¹ÀÌ ¾¹´Ï´Ù.

°¡·É, ´ëÈ­´Â "dewha:ÇÒ¸»" ±Ó¼Ó¸»Àº "ear:id:ÇÒ¸»" ÀÌ·± ½ÄÀ¸·Î ¸¸µé¾î¼­ ¼­¹ö·Î Àü¼ÛÇÏ´Â °ÍÀÌÁö¿ä. ÀÌÇØ°¡ µÇ½Ã³ª¿ä? Àú°ÍÀ» API¿¡ ³ª¿ÍÀÖ´Â StringÀÇ ¹«Áö ¸¹Àº ¸Þ¼ÒµåµéÀ» Àß È°¿ëÇؼ­ Àß¶ó¼­ ¾²¸é µÇ´Â °ÍÀÔ´Ï´Ù. ¾î·Á¿ì½Ã´Ù°í¿ä? À½....±×·¯¸é.. À̸¦ ÆíÇÏ°Ô ÇØÁÖ´Â StringTokenizerŬ·¡½º¿¡ ´ëÇØ ¾Ë¾Æº¼±î¿ä? °£´ÜÇÕ´Ï´Ù. ´çÀå Ä¡°Ú½À´Ï´Ù. ^^;

StringTokenizer stn = new StringTokenizer("¸Þ½ÃÁö", "±¸ºÐÀÚµé");

String str1 = stn.nextToken();

String str2 = stn.nextToken();

...

ÀÌ·± ½ÄÀ¸·Î »ç¿ëÇÕ´Ï´Ù. ±¸ºÐÀÚµéÀº? ¿¹¸¦ µé¾î "@!"ÀÌ·¸°Ô ³ÖÀ¸¸é @ȤÀº !À» ±âÁØÀ¸·Î ÅäÅ«µéÀ» ±¸ºÐÇسÀ´Ï´Ù.

StringTokenizer str = new StringTokenizer(inputLine,"|");
s = str.nextToken();

s2 = str.nextToken();

s3 = str.nextToken();

ÀÌ·¸°Ô µÇ¾î ÀÖ½À´Ï´Ù. inputLineÀ̶ó´Â StringÀ» "|"À» ±âÁØÀ¸·Î À߶󳻴 °ÍÀÌÁö¿ä.

inputLineÀº ¹¹.. "ear | id | ÇÒ ¸» " ÀÌ·¸°Ô µÇ¾î ÀÖ´Ù¸é s¿¡ ear°¡ s2¿¡ id°¡ s3¿¡ ÇÒ¸»ÀÌ µé¾î°¡°Ú³×¿ä.

earÀ̹ǷΠ±Ó¼Ó¸»¿¡ ÇØ´çÇÏ´Â ¸Þ¼Òµå¸¦ È£ÃâÇÏ½Ã¸é µÇ°Ú°í.. idÀ̹ǷΠÀÚ½ÅÀÇ ¹æ¿¡ µé¾îÀÖ´Â °¢ Ŭ¶óÀ̾ðÆ® ½º·¹µåµéÀ» °Ë»öÇؼ­ ±× ´ëÈ­¸íÀ̶û ¿©±â id¶û °°Àº ½º·¹µå¿¡°Ô¸¸ "ÇÒ ¸»"À» º¸³»ÁÖ¸é µË´Ï´Ù.

À½ÇÏÇÏ. ¿À´ÃÀº ¿©±â±îÁö..... ÀÏ ¾ÈÇÏ°í °­Á¸¸ µÎ ½Ã°£À» ½á´ò³×¿ä. ¹®ÀÇ´Â ¹®ÀÇ°Ô½ÃÆÇÀ¸·Î ÇØÁÖ¼¼¿ä. ´Ù µµ¿òµÇ¼ÌÁÒ?

7. Canvas¸¦ ÀÌ¿ëÇÑ Image´Ù·ç±â

ÀÚ, À̹ø¿£ CanvasŬ·¡½º¿¡ ´ëÇØ ¾Ë¾Æº¸µµ·Ï ÇÏ°Ú½À´Ï´Ù. Canvas´Â ¸¶¿ì½º À̺¥Æ®¸¦ ¹ÞÀ» ¼ö ÀÖ´Â ±×¸² ¿µ¿ªÀ¸·Î, Appletó·³ public void paint(Graphics g)¸¦ ¿À¹ö¶óÀ̵åÇؼ­ »ç¿ëÇÕ´Ï´Ù. AppletÀ» »ç¿ëÇغ¸¼Ì´ø (ÀÌ Ã¤Æõµ ¾ÖÇø´À¸·Î µÇ¾îÀÖ±ä ÇÏÁö¸¸..) ºÐÀ̶ó¸é ¾î·ÆÁö ¾Ê°Ô ÀÍÈ÷½Ç ¼ö ÀÖÀ¸½Ç °Ì´Ï´Ù. GraphicsŬ·¡½ºµµ ¾Æ¼Å¾ß°ÚÁö¿ä? Graphics´Â Image¸¦ ±×¸®´Â µµÈ­Áö¶ó°í Ç¥ÇöÀ» ÇÏ´õ±º¿ä. ÇÏÁö¸¸, Á¦°¡ º¸±â¿£ µµÈ­Áöº¸´Ù´Â ÆæÀ̶ó´Â »ý°¢ÀÌ µì´Ï´Ù. ¾î·µç ÀÌ ¾È¿¡´Â drawStringÀ̶óµçÁö.. drawImage¶óµçÁö.. ¹«±Ã¹«ÁøÇÑ ¸Þ¼ÒµåµéÀÌ ÀÖÁö¿ä. API ÇÑ ¹ø ã¾Æ¼­ ²Ä²ÄÈ÷ Àо¼¼¿ä.

Á¦°¡ ÀÚÁÖ »ç¿ëÇÏ´Â Image Å©±â¿¡ ¸ÂÃç ±× Å©±â ±×´ë·Î ±×¸®´Â Canvas¸¦ Çϳª º¸½Ã°Ú½À´Ï´Ù.

class Imagespr extends Canvas
{

Image xImg = null;

public void paint(Graphics g)
{
if(xImg == null) return ;
g.drawImage(xImg,0,0,this);
}

public void loadImage(Image img)
{
int status;
xImg = img;
setSize(xImg.getWidth(this),xImg.getHeight(this));
repaint();
}
}

³×, ³»ºÎŬ·¡½º·Î ¸¹ÀÌ »ç¿ëÀ» ÇÏÁö¿ä. »ç¿ëÀº ImagesprÀÇ °´Ã¼¸¦ »ý¼ºÇÑ ´ÙÀ½¿¡ ÀÌ ¾ÈÀÇ loadImage(Image)¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© Ç¥½ÃÇÕ´Ï´Ù. Image´Â applet¿¡¼­ getDocumentBase(), getCodeBase() µîÀ¸·Î ¹Þ¾Æ¿Í¾ß°ÚÁö¿ä? ±× ºÎºÐÀ» º¸½Ã°Ú½À´Ï´Ù.

iloading = getImage(getCodeBase(),"chart-img/loading.gif");

·ÎµùÀ̹ÌÁö¸¦ ¹Þ¾Æ¿À´Â ºÎºÐÀÔ´Ï´Ù. iloadingÀº ImageÀÇ °´Ã¼°ÚÁö¿ä. À½ È­¸é¿¡ ¹Ù·Î º¸¿©¾ßÇÏ´Â À̹ÌÁö¶ó¸é ÀÌ·¸°Ô¸¸ ÇÏ¸é °£È¤ Å« À̹ÌÁöÀÇ °æ¿ì Àüü°¡ ´Ù ·ÎµùµÇÁö ¾ÊÀº ä ¾ÖÇø´ÀÌ ¶ã ¶§µµ ÀÖ½À´Ï´Ù. À̹ÌÁö¸¦ ·ÎµùÇÏ´Â °ÍÀº ÀÚ¹Ù¿¡¼­ ³»ºÎÀûÀ¸·Î º°µµÀÇ ½º·¹µå¸¦ µ¹·Á¼­ ·ÎµùÇϱ⠶§¹®ÀÌÁö¿ä.

ÀÌ·² ¶§´Â

MediaTracker tracker;
tracker = new MediaTracker(this);

iloading = getImage(getCodeBase(),"chart-img/loading.gif");
tracker.addImage(iloading,0);
iarrow = getImage(getCodeBase(),"chart-img/arrow.gif");
tracker.addImage(iarrow,0);

try
{
tracker.waitForAll(0);
}
catch(InterruptedException e)
{
return;
}

 

ÀÌ·± ½ÄÀ¸·Î MediaTracker¸¦ ÀÌ¿ëÇÕ´Ï´Ù. MediaTracker»ý¼ºÇÏ°í, tracker¿¡ Image¿Í À妽º(0)¸¦ ºÙÀÌ°í, ±× À妽º(0) ¸ðµÎ¸¦ ±â´Ù¸³´Ï´Ù. ½á¸Ô¾îº¸¼¼¿ä. ^^; ¶ÇÇÑ ÀÌ¿¡ ´ëÇÑ APIµµ ã¾Æº¸½Ã±â ¹Ù¶ø´Ï´Ù. ´Ù¸¥ ¸Þ¼Òµåµéµµ ´ëµ¿¼ÒÀÌÇÕ´Ï´Ù.

ÀÌÁ¦, Àú À§¿¡¼­ º¸ÀÎ ImagesprÀÇ °´Ã¼¸¦ »ý¼ºÇØ º¾½Ã´Ù.

Imagespr isbt = new Imagespr[12];//±â¿ÕÀÌ¸é ¾î·Æ°Ô ¹è¿­·Î ¼±¾ðÇغ¾½Ã´Ù. ¹è¿­ °³¼ö ¼±¾ðÇÏ°í,
for(int i = 0 ; i < 12 ; i++)
{
isbt[i] = new Imagespr();//°¢ÀÚ µû·Î »ý¼ºÇØ¾ß ÇÏ´Â °Å ¾Æ½ÃÁÒ?
if(i == 0)
isbt[i].loadImage(applet.ibt_p[i]);//loadImage¸¦ »ç¿ëÇÕ´Ï´Ù.

//À̶§, »óÀ§Å¬·¡½º °´Ã¼·Î ¹Þ¾Æ¿Â Image¸¦ ÀÎÀÚ·Î ¹Þ½À´Ï´Ù.

else
isbt[i].loadImage(applet.ibt[i]);
isbt[i].addMouseListener(new MyMouseListener());//¸¶¿ì½º¸®½º³Êµµ ºÙÀ̳׿ä? ÇÊ¿äÇÏ´Ù¸é..
if (i < 10)
if (i == 4 || i == 9)
addComp(isbt[i], i, 0, 1, 1, 2);//ÀÌ´Â Á¦°¡ ¸¸µç ¸Þ¼Òµå·Î GridBackLayoutÀ¸·Î ¾îµò°¡¿¡ ºÙÀÌ´Â °úÁ¤.
else
addComp(isbt[i], i, 0, 1, 1, 0);

else
addComp(isbt[i], i+4, 0, 1, 1, 1);
}

 

ÄÚµùÀ» º¸´Ï±î ´Ü¹Ú¿¡ ÀÌÇصǽŴٰí¿ä? ÈìÈì~ ÁÁ½À´Ï´Ù.

ÀÚ CanvasŬ·¡½ºÀÇ ÀÚ¼¼ÇÑ ÀÌ¿ë(´õºí¹öÆÛ¸µ, ¹é¾÷À̹ÌÁö´Ù·ç±â, ClipÀÌ¿ë, ½ºÅ©·Ñ¹Ù¿ÍÀÇ ¿¬°è µî)Àº À¥Â÷Æ® °­ÀǶ§ Çϱâ·Î ÇÏ°í...¿À´ÃÀº ÀÏ´Ü À¯¿ëÇÑ ³»ºÎŬ·¡½º Çϳª¸¦ ¹è¿öº¸´Â °ÍÀ¸·Î ...¿©±â±îÁö!! ..........ÇÏ°í ³¡³»·Á°í ÇßÀ¸³ª, ³»ºÎŬ·¡½º¿¡ ´ëÇØ ±Ã±ÝÇØÇϽô ºÐÀÌ °è½Ç±îºÁ.. ¤Ì.¤Ì ¸¶Àú ´õ ½áº¾´Ï´Ù.

ÀÚ Å¬·¡½º ¾È¿¡ ¶Ç Ŭ·¡½º°¡ µé¾î¿À´Â Çü½ÄÀÌ 4°¡Áö°¡ ÀÖ½À´Ï´Ù.(ÀÚ¼¼ÇÑ °Ç Á¦ °­Á ¾Æ·¡¿¡ ¹Ú¿ë¿ì´ÔÀÇ °­Á Âü°í) ±× Áß Çϳª°¡ ³»ºÎŬ·¡½ºÀε¥, ±×³É ¸â¹öº¯¼ö ¼±¾ðÇÏ´Â ºÎºÐ¿¡ ¶±ÇÏ´Ï Å¬·¡½º°¡ µé¾î¿À´Â °ÍÀÔ´Ï´Ù. ¿©±â¼­´Â staticº¯¼ö¸¦ »ç¿ëÇÒ ¼ö ¾øÀ¸¸ç, ³»ºÎŬ·¡½º¾È¿¡¼­´Â ¿ÜºÎŬ·¡½ºÀÇ Çʵå¿Í ¸Þ¼Òµå¸¦ ¾Æ¹«·± Á¦ÇÑ ¾øÀÌ ±×´ë·Î »ç¿ëÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù. Çã°Æ ÁÁÁö¿ä.. ±×·¯³ª ±â¿ì¿¡¼­ ¸»¾¸µå¸®´Âµ¥ Ȥ½Ã this¶ó´Â ¸í·É¾î¸¦ ¾²°í ½ÍÀ¸½Ã¸é, ÀÌ ³»ºÎŬ·¡½º ¾È¿¡¼­ this¸¦ »ç¿ëÇϽøé, ³»ºÎŬ·¡½º ÀÚü¸¦ °¡¸®Å°°ÚÁö¿ä...(´ç¿¬ÇÑ°¡?) ±×·³ ¿ÜºÎŬ·¡½ºÀÇ ¸Þ¼Òµå¸¦ »ç¿ëÇϴµ¥ ±× ¿ÜºÎŬ·¡½º ÀÚü¸¦ ³ªÅ¸³»°í ½Í´Ù.. Çϸé. ±× ¿ÜºÎŬ·¡½º¸í.this ÀÌ·¸°Ô ¾²¼Å¾ß ÇÕ´Ï´Ù. ½±Áö¿ä? ÀÚ ¿À´ÃÀº ¿©±â±îÁö. /^.^/

 

º¸´Ù ³ªÀº ¹öÀüÀÇ Ã¤Æà µî 3°¡ÁöÀÇ ÇÁ·ÎÁ§Æ®¸¦ º¸´Ù Ãæ½ÇÇÏ°í Ä£ÀýÇÏ°Ô ¼³¸íÇÑ

"ÀÚ¹Ù ½Ç¹« Å×Å©´Ð ºñ¹ýÀü¼ö"°¡ ¹ß°£µÇ¾ú½À´Ï´Ù.

±¸°æÇϱâ -> [http://www.50001.com/books/ ]