//<¼­¹ö : GenericServer.java> /* Author: Thomas Lea (leat@goodnet.com, http://www.goodnet.com/~leat) * Date: 12/7/95 * Version: 1.0 (for Beta JDK API) */ import java.net.*; import java.io.*; import java.util.Vector; class GenericServer { private static final int DEFAULT_PORT=4321; // ¼­¹ö°¡ bindÇÏ´Â Ãʱâ Æ÷Æ® °ª private ConnectionManager cm = null; // ¿¬°áÀ» °ü¸®ÇÏ´Â ¾²·¹µå public GenericServer(int port) { System.out.println("Server is initializing to port " + port); cm = new ConnectionManager(port); // Á¢¼ÓÀ» °ü¸®ÇÏ´Â ¾²·¹µå »ý¼º. cm.start(); // ConnectionManagerÀÇ run() µµ±¸ È£Ãâ } public static void main(String args[]) { int server_port; try { server_port = Integer.parseInt(args[0],10); // ù ¹ø° ÀÎÀÚ·Î ¼­¹ö Æ÷Æ®¸¦ ¹Þ´Â´Ù. } catch(Exception e) { System.out.println("Defaulting to port " + DEFAULT_PORT); server_port = DEFAULT_PORT; // ù ¹ø° ÀÎÀÚ°¡ ¾ø°Å³ª À߸ø ÀԷµǸé Æ÷Æ®¸¦ ±âº»°ªÀ¸·Î } new GenericServer(server_port); // ¼­¹ö »ý¼º } } /* ConnectionManager´Â Á¢¼ÓÀ» ±â´Ù¸®´Ù°¡ Ŭ¶óÀ̾ðÆ®°¡ ¿¬°áÇØ¿À¸é ÇØ´ç Ŭ¶óÀ̾ðÆ®¸¦ ó¸®ÇÒ ServerConnection ¾²·¹µå¸¦ »ý¼ºÇÑ´Ù. ÀÏÁ¾ÀÇ µ¿±âÀûÀÎ ¸ÖƼÇ÷º½ÌÀÌ´Ù. */ class ConnectionManager extends Thread { private static int _port; private static Vector _my_threads = new Vector(5,2); /* ÃʱâÄ¡ 5, Áõ°¡Ä¡ 2ÀÎ º¤Å͸¦ »ý¼ºÇÑ´Ù. ÀÌ º¤ÅÍ¿¡´Â ¼ÒÄÏÀÌ ¿¬°áµÇ¸é »ý¼ºµÇ´Â ServerConnection ¾²·¹ µå ÀνºÅϽºµéÀÌ ÀúÀåµÈ´Ù. */ private ServerSocket _main_socket = null; public ConnectionManager(int port) { _port = port; } public void run() { serveRequests(); // ¼­¹ö ¼ÒÄÏÀ» »ý¼ºÇÏ¿© ¹«ÇÑ ·çÇÁ¸¦ µ¹´Ù°¡ Ŭ¶óÀ̾ðÆ®µéÀÌ Á¢¼ÓÇØ¿À¸é ¿¬°áÀ» »ý¼ºÇÏ¿© // °¢°¢ÀÇ ¿¬°á¿¡ ÇϳªÀÇ ¾²·¹µå¸¦ ¸¸µé¾îÁÖ´Â ·çƾÀÌ´Ù. } private void serveRequests() { try { _main_socket = new ServerSocket(_port); // ¼­¹ö ¼ÒÄÏ »ý¼º } catch(Exception e) { System.err.println(e); System.exit(1); } ServerConnection temp_sc = null; while (true) // ¹«ÇÑ ·çÇÁ. ÀÌ ·çÇÁÀÇ Æ÷Æ®´Â ÁöÁ¤ÇÑ ¼­¹öÀÇ Æ÷Æ®ÀÌ´Ù. { try { Socket this_connection = _main_socket.accept(); // ¼­¹ö ¼ÒÄÏÀÌ Å¬¶óÀ̾ðÆ®¸¦ ±â´Ù·È´Ù°¡ ¿¬°áÀ» »ý¼ºÇÑ´Ù. // accept()ÀÇ ¹Ýȯ°ªÀº Socket ÀνºÅϽºÀÌ°í ¾ÕÀ¸·Î ¿¬°áµÈ Ŭ¶óÀ̾ðÆ®¿Í // ´ëÈ­´Â ÀÌ ÀνºÅϽº¸¦ ÅëÇؼ­ ÇÑ´Ù. temp_sc = new ServerConnection(this_connection); // ¿¬°áÀÌ »ý¼ºµÇ¸é ÀÌ Socket ÀνºÅϽº·Î ServerConnection ¾²·¹µå¸¦ »ý¼º temp_sc.start(); // ServerConnection ÀνºÅϽºÀÇ run() È£Ãâ _my_threads.addElement(temp_sc); // ServerConnection ÀνºÅϽº¸¦ º¤ÅÍ¿¡ Ãß°¡ /* º¤ÅÍÀÇ Å©±â¸¸Å­ ·çÇÁ¸¦ ¹Ýº¹ÇÑ´Ù. º¤ÅÍ¿¡ ÀúÀåµÇ¾î ÀÖ´Â °¢ ServerConnection ¾²·¹µå°¡ ½ÇÇà ÁßÀÎÁö °Ë»çÇÏ°í ¾²·¹µå°¡ Á¾·áÇÏ¿´À¸¸é º¤ÅÍ¿¡¼­ Á¦°ÅÇÑ´Ù. ServerConnection ¾²·¹µå´Â ¼ÒÄÏÀ» Á¾·áÇÏ¸é ½ÇÇàÀ» Áß´ÜÇÑ´Ù. */ for(int i=0;i