1996³â 3¿ù 19ÀÏ Ã¹ ÃâÆÇ


¾Õ ÆäÀÌÁö µÞ ÆäÀÌÁö »öÀÎ


ÀÚ¹Ù ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö

°¡¸á·Ð »çÀÌÆ®¿¡ °¡¸é äÆà ¾ÖÇø´ÀÌ ÀÖ´Ù. º°´Ù¸¥ äÆà ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏÁö ¾Ê°íµµ ¹Ù·Î HTML ¹®¼­ ³»¿¡ ÀÚ¹Ù ¾ÖÇø´ÀÌ ½ÇÇàµÇ¾î äÆÿ¡ Âü¿©ÇÒ ¼ö ÀÖ´Ù. ±âÁ¸ÀÇ irc ¼­¹ö¿Í CGI ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© º°µµÀÇ Ã¤ Æà âÀ» ¿­¾î¾ß Çß´ø ºÒÆíÀÌ ÀÌÁ¦ ÀÚ¹Ù¸¦ Áö¿øÇÏ´Â À¥ ºê¶ó¿ìÀú¿¡¼­´Â ¿ÏÀüÈ÷ ÇØ°áµÈ ¼ÀÀÌ´Ù.
[±×¸²] °¡¸á·Ð »çÀÌÆ®ÀÇ Ã¤Æà 
¾ÖÇø´

¡¡±×·³ ÀÌÁ¦ ÀÚ¹Ù ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹ÖÀÇ ¼¼°è·Î µé¾î°¡ º¸ÀÚ. ÀÚ¹Ù´Â ¼­¹ö-Ŭ¶óÀ̾ðÆ® ¸ðµ¨ÀÇ ºÐ»ê ȯ°æÀ» ±âº»À¸·Î Áö¿øÇϴµ¥ ÀÌ´Â ¹öŬ¸® ¼ÒÄÏ ¶óÀ̺귯¸®(win32¿¡¼­´Â winsock ¶óÀ̺귯¸®)¸¦ Æ÷ÇÔÇÏ°í Àֱ⠶§¹®ÀÌ´Ù.
[±×¸²] java.net ÆÐÅ°Áö Ŭ·¡½º °èÃþ ±¸Á¶
<±×¸² > java.net ÆÐÅ°Áö Ŭ·¡½º °èÃþ ±¸Á¶

ÀÚ¹Ù ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹ÖÀº Å©°Ô µÎ °¡Áö ¹æÇâÀÌ ÀÖ´Ù. Çϳª´Â Socket ȤÀº ServerSocket Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ¿© Ŭ¶óÀ̾ðÆ®/¼­¹ö ¼ÒÄÏ ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Â °ÍÀÌ°í ´Ù¸¥ Çϳª´Â URL Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ¿© º¸´Ù ½±°Ô ÀÎÅͳݿ¡ ¿¬°áµÇ¾î ÀÖ´Â ³×Æ®¿öÅ©¸¦ Á¢¼ÓÇÏ°í Á¤ º¸¸¦ ¹Þ´Â °ÍÀÌ´Ù.

URL Ŭ·¡½º

URL(Uniform Resource Locator)Àº ÀÎÅͳÝÀÇ Æ¯Á¤ ÀÚ¿ø¿¡ ´ëÇÑ ÁÖ¼Ò¸¦ ³ªÅ¸³»´Â ¸»·Î ÀÎÅÍ³Ý È¤Àº ¿ùµå¿ÍÀ̵åÀ¥ÀÇ °ü¹®À̶ó ÇÒ ¼ö ÀÖ´Ù. URLÀÇ ±¸¼º ¿ä¼Ò´Â Å©°Ô ÇÁ·ÎÅäÄÝ°ú ÀÚ¿øÀÌ À§Ä¡ÇÏ°í ÀÖ´Â ÁÖ¼Ò, µÎ ºÎºÐÀ¸·Î ³ª´©¾îÁø´Ù. ¾Æ·¡ÀÇ ¿¹Á¦ ÇÁ·Î±×·¥¿¡¼­ "http"´Â ÇÁ·ÎÅäÄÝ¿¡ ÇØ´çÇÏ°í "orange.hnc.net/~yoonforh"´Â ÁÖ¼Ò¿¡ ÇØ´çÇÑ´Ù.
´ÙÀ½ÀÇ ¿¹Á¦´Â ÁöÁ¤µÈ URL·ÎºÎÅÍ ¹®¼­¸¦ ¹Þ¾Æ¼­ Ç¥ÁØ Ãâ·ÂÀ¸·Î Ãâ·ÂÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù. ½ºÆ®¸² ÀÔ·Â ºÎºÐÀ» ¾ÕÀÇ TextCopy ¿¹Á¦ ¼Ò½º¿Í ºñ±³ÇØ º¸±æ ¹Ù¶õ´Ù. TextCopy ¿¹Á¦ÀÇ °æ¿ì¿¡´Â FileInputStream Ŭ·¡½º ÀνºÅϽº¸¦ »ý¼ºÇÏ¿© ±×·ÎºÎÅÍ DataInputStream ÀνºÅϽº¸¦ »ý¼ºÇÏ¿´°í ¾Æ·¡ÀÇ URLTestÀÇ °æ¿ì¿¡´Â URL Ŭ·¡½ºÀÇ openStream() µµ±¸¸¦ »ç¿ëÇÏ¿© ¹Ù·Î DataInputStream ÀνºÅϽº ¸¦ »ý¼ºÇÏ´Â Â÷ÀÌ ÀÌ¿Ü¿¡´Â µ¿ÀÏÇÏ°Ô ½ºÆ®¸²À¸·Î ´Ù·ê ¼ö ÀÖ´Ù.

URLTest.java

¡¡
URL Ŭ·¡½ºÀÇ ÁÖ¿ä µµ±¸´Â ´ÙÀ½°ú °°´Ù.

1) public int getPort() : Æ÷Æ® ¹øÈ£¸¦ ±¸ÇÑ´Ù. Æ÷Æ®°¡ ÁöÁ¤µÇ¾î ÀÖÁö ¾ÊÀ¸¸é -1À» µ¹·ÁÁØ´Ù.
2) public String getProtocol() : ÇÁ·ÎÅäÄÝÀ» ±¸ÇÑ´Ù.
3) public String getHost() : È£½ºÆ® À̸§À» ±¸ÇÑ´Ù.
4) public String getFile() : ÆÄÀÏ À̸§À» ±¸ÇÑ´Ù.
5) public String gerRef() : HTML ¹®¼­ ³»ºÎÀÇ À§Ä¡¸¦ ÁöÁ¤ÇÏ´Â <a name="..."> ű×ÀÇ °ªÀ» ±¸ÇÑ´Ù.
À§ ¿¹Á¦ÀÇ °á°ú´Â ´ÙÀ½°ú °°´Ù.

½ÇÇà °á°ú

¡¡
Ref´Â '#dir'¿¡¼­ ÁöÁ¤ÇÑ °ªÀÎ dir·Î Ãâ·ÂµÊÀ» º¼ ¼ö ÀÖ´Ù. ¸¶Âù°¡Áö·Î Port ¹øÈ£ÀÇ °æ¿ì ¿¹Á¦Ã³·³ ':80'À» ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é -1 °ªÀÌ ±¸ÇØÁø´Ù. º¸Åë À¥ ºê¶ó¿ìÀú´Â http ÇÁ·ÎÅäÄÝÀÇ °æ¿ì Æ÷Æ® ¹øÈ£°¡ ÁöÁ¤µÇÁö ¾ÊÀ¸¸é 80À¸·Î °£ÁÖÇÑ´Ù.

6) public boolean equals(Object obj) : µÎ URLÀ» ºñ±³ÇÑ´Ù.
7) public boolean sameFile(URL other) : ref °ªÀ» Á¦¿ÜÇÏ°í µ¿ÀÏÇÑ ÆÄÀÏÀ» °¡¸£Å°´ÂÁö ºñ±³ÇÑ´Ù.
8) public String toString() : URLÀ» º¸Åë »ç¿ëÇÏ´Â ½ºÆ®¸µÀ¸·Î ¹Ù²Ù¾îÁØ´Ù.
9) public URLConnection openConnection() throws IOException : URLÀÌ °¡¸®Å°´Â ¿ø°Ý °´Ã¼¿¡ ´ëÇÑ Á¢¼ÓÀ» Æ÷ÇÔÇÏ´Â URLConnec tion °´Ã¼¸¦ »ý¼ºÇÑ´Ù. ÀûÇÕÇÑ ÇÁ·ÎÅäÄÝ Çڵ鷯¸¦ ½ÇÇàÇÏ°Ô µÈ´Ù.
10) public final InputStream openStream() throws IOException : ¿¹Á¦¿¡¼­Ã³·³ ÀÔ·Â ½ºÆ®¸²À» ¿¬´Ù.
11) public final Object getContent() throws IOException : ¿­·Á ÀÖ´Â ¿¬°á¿¡¼­ ³»¿ëÀ» °¡Áö°í ¿Â´Ù.

¼ÒÄÏ ÇÁ·Î±×·¡¹Ö

³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö¿¡ °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â ¼ÒÄÏ¿¡´Â µÎ °¡Áö Á¾·ù°¡ ÀÖÀ½Àº ¸ðµÎ Àß ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. ¼ÒÄÏÀº »ç¿ëÇÏ´Â Àü¼Û ÇÁ·ÎÅäÄÝ¿¡ µû¶ó Transmission Control Protocol(TCP)¸¦ ÀÌ¿ëÇÏ´Â ½ºÆ®¸² ¼ÒÄÏ°ú User Datagram Protocol(UDP)¸¦ ÀÌ¿ëÇÏ´Â µ¥ÀÌ Åͱ׷¥ ¼ÒÄÏ, µÎ °¡Áö·Î ³ª´­ ¼ö ÀÖ´Ù. ½ºÆ®¸² ¼ÒÄÏÀ» ´ëÇ¥ÇÏ´Â Àڹ٠Ŭ·¡½º´Â Ŭ¶óÀ̾ðÆ® ¼ÒÄÏÀ» »ý¼ºÇÏ´Â java.net.Socket Ŭ ·¡½º¿Í ¼­¹ö ¼ÒÄÏÀ» »ý¼ºÇÏ´Â java.net.ServerSocket Ŭ·¡½ºÀÌ¸ç µ¥ÀÌÅͱ׷¥ ¼ÒÄÏÀ» ´ëÇ¥ÇÏ´Â Àڹ٠Ŭ·¡½º´Â java.net.DatagramS ocket Ŭ·¡½ºÀÌ´Ù.
¸ÕÀú Ŭ¶óÀ̾ðÆ® ¼ÒÄÏ Å¬·¡½ºÀÎ Socket Ŭ·¡½º¿Í ÀÌ¿¡ ´ëÀÀµÇ´Â ¼­¹ö ¼ÒÄÏ Å¬·¡½ºÀÎ ServerSocket Ŭ·¡½º¸¦ ¾Ë¾Æ º¸ÀÚ.
Socket Ŭ·¡½º¿Í ServerSocket Ŭ·¡½º´Â º¸ÅëÀº ¼ÒÄÏ ½ÇÇà Ŭ·¡½ºÀÎ SocketImpl Ãß»ó Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ¿© ¼¼ºÎÀûÀÎ ¼ÒÄÏ ÀÛ¾÷, Áï create(), bind(), listen(), connect(), accept(), close() µîÀ» ¼öÇàÇÑ´Ù. SocketImpl Ŭ·¡½º ÀνºÅϽº´Â SocketImplFactor y ÀÎÅÍÆäÀ̽ºÀÇ createSocketImpl() µµ±¸¸¦ »ç¿ëÇÏ¿© »ý¼ºÇÑ´Ù. ÀÌ·¸°Ô SocketImpl Ŭ·¡½º ÀνºÅϽº¸¦ ¸¸µå´Â ÀÌÀ¯´Â »ç¿ëµÇ´Â ÆÄÀ̾î¿ùÀÇ Á¾·ù¿¡ µû¶ó ¼ÒÄÏ ½ÇÇàÀ» ¹Ù²Ü ¼ö ÀÖµµ·Ï ÇÏ·Á´Â °ÍÀÌ´Ù.
Socket Ŭ·¡½ºÀÇ »ý¼ºÀÚ(Constructor)¿Í ÁÖ¿ä µµ±¸¸¦ »ìÆì º¸ÀÚ.

1) public Socket(String host, int port) throws UnknownHostException, IOException : ½ºÆ®¸² ¼ÒÄÏÀ» Çϳª »ý¼ºÇÏ¿© ÁöÁ¤µÈ È£½ºÆ®ÀÇ ÁöÁ¤µÈ Æ÷Æ®¿¡ ¿¬°áÇÑ´Ù.
2) public Socket(String host, int port, boolean stream) throws IOException : ¼¼ ¹ø° ÀÎÀÚ°¡ trueÀÌ¸é ½ºÆ®¸² ¼ÒÄÏÀ», fal seÀÌ¸é µ¥ÀÌÅͱ׷¥ ¼ÒÄÏÀ» »ý¼ºÇÏ¿© ÁöÁ¤µÈ È£½ºÆ®ÀÇ ÁöÁ¤µÈ Æ÷Æ®¿¡ ¿¬°áÇÑ´Ù.
3) public Socket(InetAddress address, int port) throws IOException : ½ºÆ®¸² ¼ÒÄÏÀ» Çϳª »ý¼ºÇÏ¿© ÁöÁ¤µÈ ÁÖ¼ÒÀÇ ÁöÁ¤µÈ Æ÷Æ®¿¡ ¿¬°áÇÑ´Ù.
4) public Socket(InetAddress address, int port, boolean stream) throws IOException : ¼¼ ¹ø° ÀÎÀÚ°¡ trueÀÌ¸é ½ºÆ®¸² ¼Ò ÄÏÀ», falseÀÌ¸é µ¥ÀÌÅͱ׷¥ ¼ÒÄÏÀ» »ý¼ºÇÏ¿© ÁöÁ¤µÈ ÁÖ¼ÒÀÇ ÁöÁ¤µÈ Æ÷Æ®¿¡ ¿¬°áÇÑ´Ù.

5) public InetAddress getInetAddress() : ¼ÒÄÏÀÌ ¿¬°áµÉ ÀÎÅÍ³Ý ÁÖ¼Ò¸¦ µ¹·ÁÁØ´Ù.
6) public int getPort() : ¼ÒÄÏÀÌ ¿¬°áµÉ »ó´ë¹æ Æ÷Æ®¸¦ ±¸ÇÑ´Ù.
7) public int getLocalPort() : ¼ÒÄÏÀÌ ¿¬°áµÉ Áö¿ª Æ÷Æ®¸¦ ±¸ÇÑ´Ù.
8) public InputStream getInputStream() throws IOException : ¼ÒÄÏ¿¡ ´ëÇÑ ÀÔ·Â ½ºÆ®¸²À» ±¸ÇÑ´Ù.
9) public OutputStream getOutputStream() throws IOException : ¼ÒÄÏ¿¡ ´ëÇÑ Ãâ·Â ½ºÆ®¸²À» ±¸ÇÑ´Ù.
10) public synchronized void close() throws IOException : ¼ÒÄÏÀ» ´Ý´Â´Ù.
11) public String toString() : ¼ÒÄÏÀÇ ÁÖ¼Ò¿Í Æ÷Æ®¸¦ ½ºÆ®¸µÀ¸·Î ¸¸µé¾îÁØ´Ù.
12) public static synchronized void setSocketImplFactory(SocketImplFactory fac) throws IOException : Ŭ¶óÀ̾ðÆ®ÀÇ Socke tImplFactory¸¦ ÁöÁ¤ÇÑ´Ù. ÇÑ ¹ø¸¸ ÁöÁ¤ °¡´ÉÇÏ´Ù.

ÀÌ¿¡ ´ëÀÀµÇ´Â ServerSocket Ŭ·¡½ºÀÇ µµ±¸´Â ¼ÒÄÏÀÇ µµ±¸¿Í °ÅÀÇ µ¿ÀÏÇÏÁö¸¸ accept()°¡ ÀÖ°í getPort()¿Í ½ºÆ®¸² °ü·Ã µµ±¸µé ÀÌ ¾ø´Â Á¡ÀÌ ´Ù¸£´Ù.
ServerSocketÀÇ »ý¼ºÀÚ´Â ´ÙÀ½°ú °°´Ù.

1) public ServerSocket(int port) throws IOException : ÁöÁ¤µÈ Æ÷Æ®¿¡ ¼­¹ö ¼ÒÄÏÀ» »ý¼ºÇÑ´Ù.
2) public ServerSocket(int port, int count) throws IOException : ¼­¹ö ¼ÒÄÏÀ» »ý¼ºÇÏ¿© ÁöÁ¤µÈ Áö¿ª Æ÷Æ®¿¡ bindÇÑ ÈÄ list enÇÑ´Ù. Æ÷Æ® °ªÀ» 0À¸·Î ÁöÁ¤Çϸé ÀÓÀÇÀÇ Æ÷Æ®¸¦ ½Ã½ºÅÛÀÌ ÁöÁ¤ÇÑ´Ù. count °ªÀº ¼­¹ö ¼ÒÄÏÀÌ listenÇÒ ÃÖ´ë ½Ã°£ÀÌ´Ù.

¼­¹ö/Ŭ¶óÀ̾ðÆ® ¸ðµ¨À» °£´ÜÇÏ°Ô ±¸ÇöÇÑ ¿¹Á¦¸¦ »ìÆì º¸ÀÚ. ´ÙÀ½ ¿¹Á¦´Â ÀÎÅͳݿ¡¼­ °ø°³µÈ °Í¿¡ ÇÊÀÚ°¡ ÁÖ¼®À» ÷°¡ÇÑ °ÍÀÌ´Ù .
¼Ò½º¸¦ »ìÆ캸±â Àü¿¡ ¸ÕÀú ¿©±â¿¡¼­ »ç¿ëµÈ java.util.Vector Ŭ·¡½º¿¡ ´ëÇؼ­ ¾Ë¾Æ º¸ÀÚ.
ÀÌ º¤ÅÍ Å¬·¡½º´Â Å©±â º¯°æÀÌ °¡´ÉÇÑ °´Ã¼ ¹è¿­À̶ó°í º¼ ¼ö ÀÖ´Ù. º¤ÅÍ Å¬·¡½º´Â ÁöÁ¤µÈ Å©±â¿Í Å©±â Áõ°¡Ä¡¸¦ »ç¿ëÇÏ¿© ÀúÀå ¿ë·®À» ÃÖÀûÈ­ÇÑ´Ù. º¤ÅÍÀÇ Å©±â´Â ÃÖ¼ÒÇÑ Ãʱ⿡ ÁöÁ¤µÈ º¤ÅÍÀÇ Å©±âÀÌ°í, ÃʱâÄ¡¿¡´Ù°¡ Å©±â Áõ°¡Ä¡ÀÇ ¹è¼ö¸¦ ´õÇÑ °ªÀÌ´Ù. ¸¹Àº °´Ã¼µéÀ» º¤ÅÍ¿¡ ³Ö±â Àü¿¡ ¾Õ¼­, Å©±â¸¦ ÁöÁ¤Çϸé ÀçÇÒ´çÀ» ¿©·¯ ¹ø ¼öÇàÇÏ´Â ºÎÇϸ¦ ÁÙÀÏ ¼ö ÀÖ´Ù.

¼­¹ö : GenericServer.java

¡¡
¼­¹ö¿¡¼­ ÁÖÀÇÇؼ­ º¼ ºÎºÐ Áß Çϳª´Â ¿¬°áµÈ ¼ÒÄÏ¿¡¼­´Â ÀԷ ȤÀº Ãâ·Â ½ºÆ®¸²À» ¹Ù·Î ¾ò¾î¼­ (getInput Stream(), getOutputStream()) ½±°Ô ¸Þ½ÃÁö¸¦ ÁÖ°í ¹ÞÀ» ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù. ¿¬°áµÈ ¼ÒÄÏÀº ¼­¹öÀ̵ç, Ŭ¶óÀ̾ðÆ®À̵ç Socket Ŭ ·¡½º ÀνºÅϽº¸¦ »ç¿ëÇÑ´Ù. ÀÌ ¿¬°á Socket Ŭ·¡½º ÀνºÅϽº´Â ¼­¹ö¿¡¼­´Â accept()ÀÇ ¹Ýȯ°ªÀ¸·Î ±¸ÇÏ°í, Ŭ¶óÀ̾ðÆ®¿¡¼­´Â ¼­ ¹öÀÇ ÁÖ¼Ò¿Í Æ÷Æ®¸¦ ÁöÁ¤ÇÑ Socket »ý¼ºÀÚ¿¡¼­ ¹Ù·Î ±¸ÇÑ´Ù.

Ŭ¶óÀ̾ðÆ® : Client.java

¡¡

Ŭ¶óÀ̾ðÆ® ¼ÒÄÏÀº ´ÙÁß ¾²·¹µå ±â¹ýÀ» »ç¿ëÇÒ ÇÊ¿ä°¡ ¾øÀ¸¹Ç·Î ¹«Ã´À̳ª °£´ÜÇÏ´Ù. Socket() »ý¼ºÀÚ°¡ C ¾ð¾îÀÇ socket(), connect() ÇÔ¼ö µîÀ» µ¿½Ã¿¡ ¼öÇàÇϹǷΠÄڵ嵵 ÈξÀ °£´ÜÇØÁö°í, ½ºÆ®¸² Ŭ·¡½º¸¦ ÀÌ¿ëÇÑ ÀÔÃâ·Â °ü¸®´Â ´õ¿í Äڵ带 ºÐ¸íÇÏ°í °£ ´ÜÇÏ°Ô ÇØÁØ´Ù. °úÁ¦¸¦ Çϳª ³½´Ù¸é, Á÷Á¢ ¿¡ÄÚ ¼­¹ö(½ºÆ®¸² ¼ÒÄÏ, Æ÷Æ® 7)¿¡ Á¢¼ÓÇÏ´Â ¿¡ÄÚ Å¬¶óÀ̾ðÆ®¸¦ ¸¸µé¾î º¸ÀÚ. 30ÁÙµµ ä ¾ÈµÇ´Â ¾ÆÁÖ °£´ÜÇÑ ¿¡ÄÚ Å×½ºÆ® ¿¹Á¦ Çϳª°¡ ÀÚ¹Ù »çÀÌÆ®¿¡ °ø°³µÇ¾î ÀÖÀ¸´Ï ºñ±³Çغ¸±æ ¹Ù¶õ´Ù.¡¡


¾Õ ÆäÀÌÁö µÞ ÆäÀÌÁö »öÀÎ