ThinkinginJava16 JAVAѧϰ×ÊÁÏ

JAVAÑ§Ï°ÍøÊ×Ò³ °ÑÉú»î²éÑ¯Íø¼ÓÈëÊÕ²Ø °ÑJAVAÑ§Ï°ÍøÉèΪÊ×Ò³ ÁªÏµ·½Ê½
    Hi,JAVAѧϰ
JAVA»ù´¡ Éè¼ÆÄ£Ê½ Êý¾Ý¿â JavaBeans J2EE JavaDelphi Óû§½çÃæ ×ÛºÏÎÄÕ  
ThinkinginJava16
ʱ¼ä:22/04/2007
×÷ÕߣºÍøÂç
À´Ô´£ºÍøÂç
СÌáʾ¡úµãÕâÀï°ÑÎÄÕ¼ÓÈëÄúµÄÊղؼÐ,·½±ãÏ´β鿴
ÉèÖÃÎÄÕÂ×ÖÌå´óС£º[´ó ÖРС]
µÚ15ÕÂ ÍøÂç±à³Ì

ÀúÊ·ÉϵÄÍøÂç±à³Ì¶¼ÇãÏòÓÚÀ§ÄÑ¡¢¸´ÔÓ£¬¶øÇÒ¼«Ò׳ö´í¡£
³ÌÐòÔ±±ØÐëÕÆÎÕÓëÍøÂçÓйصĴóÁ¿Ï¸½Ú£¬ÓÐʱÉõÖÁÒª¶ÔÓ²¼þÓÐÉî¿ÌµÄÈÏʶ¡£Ò»°ãµØ£¬ÎÒÃÇÐèÒªÀí½âÁ¬ÍøÐ­ÒéÖв»Í¬µÄ¡°²ã¡±£¨Layer£©¡£¶øÇÒ¶ÔÓÚÿ¸öÁ¬Íø¿â£¬Ò»°ã¶¼°üº¬ÁËÊýÁ¿ÖÚ¶àµÄº¯Êý£¬·Ö±ðÉæ¼°ÐÅÏ¢¿éµÄÁ¬½Ó¡¢´ò°üºÍ²ð°ü£»ÕâЩ¿éµÄÀ´»ØÔËÊ䣻ÒÔ¼°ÎÕÊֵȵȡ£ÕâÊÇÒ»ÏîÁîÈËÍ´¿àµÄ¹¤×÷¡£
µ«ÊÇ£¬Á¬Íø±¾ÉíµÄ¸ÅÄî²¢²»ÊǺÜÄÑ¡£ÎÒÃÇÏë»ñµÃλÓÚÆäËûµØ·½Ä³Ì¨»úÆ÷ÉϵÄÐÅÏ¢£¬²¢°ÑËüÃÇÒÆµ½Õâ¶ù£»»òÕßÏà·´¡£ÕâÓë¶ÁдÎļþ·Ç³£ÏàËÆ£¬Ö»ÊÇÎļþ´æÔÚÓÚÔ¶³Ì»úÆ÷ÉÏ£¬¶øÇÒÔ¶³Ì»úÆ÷ÓÐȨ¾ö¶¨ÈçºÎ´¦ÀíÎÒÃÇÇëÇó»òÕß·¢Ë͵ÄÊý¾Ý¡£
Java×î³öÉ«µÄÒ»¸öµØ·½¾ÍÊÇËüµÄ¡°ÎÞÍ´¿àÁ¬Íø¡±¸ÅÄî¡£ÓйØÁ¬ÍøµÄ»ù²ãϸ½ÚÒѱ»¾¡¿ÉÄܵØÌáÈ¡³öÈ¥£¬²¢Òþ²ØÔÚJVMÒÔ¼°JavaµÄ±¾»ú°²×°ÏµÍ³Àï½øÐпØÖÆ¡£ÎÒÃÇʹÓõıà³ÌÄ£ÐÍÊÇÒ»¸öÎļþµÄÄ£ÐÍ£»ÊÂʵÉÏ£¬ÍøÂçÁ¬½Ó£¨Ò»¸ö¡°Ì×½Ó×Ö¡±£©Òѱ»·â×°µ½ÏµÍ³¶ÔÏóÀËùÒÔ¿ÉÏó¶ÔÆäËûÊý¾ÝÁ÷ÄÇÑù²ÉÓÃͬÑùµÄ·½·¨µ÷Óᣳý´ËÒÔÍ⣬ÔÚÎÒÃÇ´¦ÀíÁíÒ»¸öÁ¬ÍøÎÊÌ⡪¡ªÍ¬Ê±¿ØÖƶà¸öÍøÂçÁ¬½Ó¡ª¡ªµÄʱºò£¬JavaÄÚ½¨µÄ¶àÏ̻߳úÖÆÒ²ÊÇÊ®·Ö·½±ãµÄ¡£
±¾Õ½«ÓÃһϵÁÐÒ×¶®µÄÀý×Ó½âÊÍJavaµÄÁ¬ÍøÖ§³Ö¡£

15.1 »úÆ÷µÄ±êʶ
µ±È»£¬ÎªÁË·Ö±æÀ´×Ա𴦵Äһ̨»úÆ÷£¬ÒÔ¼°ÎªÁ˱£Ö¤×Ô¼ºÁ¬½ÓµÄÊÇÏ£ÍûµÄÄÇ̨»úÆ÷£¬±ØÐëÓÐÒ»ÖÖ»úÖÆÄܶÀÒ»ÎÞ¶þµØ±êʶ³öÍøÂçÄÚµÄÿ̨»úÆ÷¡£ÔçÆÚÍøÂçÖ»½â¾öÁËÈçºÎÔÚ±¾µØÍøÂç»·¾³ÖÐΪ»úÆ÷ÌṩΨһµÄÃû×Ö¡£µ«JavaÃæÏòµÄÊÇÕû¸öÒòÌØÍø£¬ÕâÒªÇóÓÃÒ»ÖÖ»úÖÆ¶ÔÀ´×ÔÊÀ½ç¸÷µØµÄ»úÆ÷½øÐбêʶ¡£Îª´ïµ½Õâ¸öÄ¿µÄ£¬ÎÒÃDzÉÓÃÁËIP£¨»¥ÁªÍøµØÖ·£©µÄ¸ÅÄî¡£IPÒÔÁ½ÖÖÐÎʽ´æÔÚ×Å£º
(1) ´ó¼Ò×îÊìϤµÄDNS£¨ÓòÃû·þÎñ£©ÐÎʽ¡£ÎÒ×Ô¼ºµÄÓòÃûÊÇbruceeckel.com¡£ËùÒÔ¼Ù¶¨ÎÒÔÚ×Ô¼ºµÄÓòÄÚÓÐһ̨ÃûΪOpusµÄ¼ÆËã»ú£¬ËüµÄÓòÃû¾Í¿ÉÒÔÊÇOpus.bruceeckel.com¡£ÕâÕýÊÇ´ó¼ÒÏòÆäËûÈË·¢Ë͵ç×Óº¯¼þʱ²ÉÓõÄÃû×Ö£¬¶øÇÒͨ³£¼¯³Éµ½Ò»¸öÍòÎ¬Íø£¨WWW£©µØÖ·Àï¡£
(2) ´ËÍ⣬Òà¿É²ÉÓá°Ëĵ㡱¸ñʽ£¬Ò༴ÓɵãºÅ£¨.£©·Ö¸ôµÄËÄ×éÊý×Ö£¬±ÈÈç202.98.32.111¡£
²»¹ÜÄÄÖÖÇé¿ö£¬IPµØÖ·ÔÚÄÚ²¿¶¼±í´ï³ÉÒ»¸öÓÉ32¸ö¶þ½øÖÆÎ»£¨bit£©¹¹³ÉµÄÊý×Ö£¨×¢ÊÍ¢Ù£©£¬ËùÒÔIPµØÖ·µÄÿһ×éÊý×Ö¶¼²»Äܳ¬¹ý255¡£ÀûÓÃÓÉjava.netÌṩµÄstatic InetAddress.getByName()£¬ÎÒÃÇ¿ÉÒÔÈÃÒ»¸öÌØ¶¨µÄJava¶ÔÏó±í´ïÉÏÊöÈκÎÒ»ÖÖÐÎʽµÄÊý×Ö¡£½á¹ûÊÇÀàÐÍΪInetAddressµÄÒ»¸ö¶ÔÏ󣬿ÉÓÃËü¹¹³ÉÒ»¸ö¡°Ì×½Ó×Ö¡±£¨Socket£©£¬´ó¼ÒÔÚºóÃæ»á¼ûµ½ÕâÒ»µã¡£

¢Ù£ºÕâÒâζ×Å×î¶àÖ»Äܵõ½40ÒÚ×óÓÒµÄÊý×Ö×éºÏ£¬È«ÊÀ½çµÄÈ˺ܿì¾Í»á°ÑËüÓù⡣µ«¸ù¾ÝĿǰÕýÔÚÑо¿µÄÐÂIP±àÖ··½°¸£¬Ëü½«²ÉÓÃ128 bitµÄÊý×Ö£¬ÕâÑùµÃµ½µÄΨһÐÔIPµØÖ·Ò²ÐíÔÚ¼¸°ÙÄêµÄʱ¼äÀï¶¼²»»áÓÃÍê¡£

×÷ΪÔËÓÃInetAddress.getByName()Ò»¸ö¼òµ¥µÄÀý×Ó£¬Ç뿼ÂǼÙÉè×Ô¼ºÓÐÒ»¼Ò²¦ºÅÁ¬½ÓÒòÌØÍø·þÎñÌṩÕߣ¨ISP£©£¬ÄÇô»á·¢ÉúʲôÇé¿ö¡£Ã¿´Î²¦ºÅÁ¬½ÓµÄʱºò£¬¶¼»á·ÖÅäµÃµ½Ò»¸öÁÙʱIPµØÖ·¡£µ«ÔÚÁ¬½ÓÆÚ¼ä£¬ÄǸöIPµØÖ·ÓµÓÐÓëÒòÌØÍøÉÏÆäËûIPµØÖ·Ò»ÑùµÄÓÐЧÐÔ¡£Èç¹ûÓÐÈ˰´ÕÕÄãµÄIPµØÖ·Á¬½ÓÄãµÄ»úÆ÷£¬ËûÃǾÍÓпÉÄÜʹÓÃÔÚÄã»úÆ÷ÉÏÔËÐеÄWeb»òÕßFTP·þÎñÆ÷³ÌÐò¡£µ±È»ÕâÓиöǰÌᣬ¶Ô·½±ØÐë׼ȷµØÖªµÀÄãĿǰ·ÖÅäµ½µÄIP¡£ÓÉÓÚÿ´Î²¦ºÅÁ¬½Ó»ñµÃµÄIP¶¼ÊÇËæ»úµÄ£¬ÔõÑù²ÅÄÜ׼ȷµØÕÆÎÕÄãµÄIPÄØ£¿
ÏÂÃæÕâ¸ö³ÌÐòÀûÓÃInetAddress.getByName()À´²úÉúÄãµÄIPµØÖ·¡£ÎªÁËÈÃËüÔËÐÐÆðÀ´£¬ÊÂÏȱØÐëÖªµÀ¼ÆËã»úµÄÃû×Ö¡£¸Ã³ÌÐòÖ»ÔÚWindows 95ÖнøÐÐÁ˲âÊÔ£¬µ«´ó¼Ò¿ÉÒÔÒÀ´Î½øÈë×Ô¼ºµÄ¡°¿ªÊ¼¡±¡¢¡°ÉèÖᱡ¢¡°¿ØÖÆÃæ°å¡±¡¢¡°ÍøÂ硱£¬È»ºó½øÈë¡°±êʶ¡±¿¨Æ¬¡£ÆäÖУ¬¡°¼ÆËã»úÃû³Æ¡±¾ÍÊÇÓ¦ÔÚÃüÁîÐÐÊäÈëµÄÄÚÈÝ¡£

827Ò³³ÌÐò

¾ÍÎÒ×Ô¼ºµÄÇé¿öÀ´Ëµ£¬»úÆ÷µÄÃû×Ö½Ð×÷¡°Colossus¡±£¨À´×ÔͬÃûµçÓ°£¬¡°¾ÞÈË¡±µÄÒâ˼¡£ÎÒÔÚÕą̂»úÆ÷ÉÏÓÐÒ»¸öºÜ´óµÄÓ²ÅÌ£©¡£ËùÒÔÒ»µ©Á¬Í¨ÎÒµÄISP£¬¾ÍÏóÏÂÃæÕâÑùÖ´ÐгÌÐò£º
java whoAmI Colossus
µÃµ½µÄ½á¹ûÏóÏÂÃæÕâ¸öÑù×Ó£¨µ±È»£¬Õâ¸öµØÖ·¿ÉÄÜÿ´Î¶¼ÊDz»Í¬µÄ£©£º
Colossus/202.98.41.151
¼ÙÈçÎÒ°ÑÕâ¸öµØÖ·¸æËßһλÅóÓÑ£¬Ëû¾Í¿ÉÒÔÁ¢¼´µÇ¼µ½ÎҵĸöÈËWeb·þÎñÆ÷£¬Ö»ÐèÖ¸¶¨Ä¿±êµØÖ·http://202.98.41.151¼´¿É£¨µ±È»£¬ÎÒ´Ëʱ²»ÄܶÏÏߣ©¡£ÓÐЩʱºò£¬ÕâÊÇÏòÆäËûÈË·¢ËÍÐÅÏ¢»òÕßÔÚ×Ô¼ºµÄWebÕ¾µãÕýʽ³ǫ̈ÒÔǰ½øÐвâÊÔµÄÒ»ÖÖ·½±ãÊֶΡ£

15.1.1 ·þÎñÆ÷ºÍ¿Í»§»ú
ÍøÂç×î»ù±¾µÄ¾«Éñ¾ÍÊÇÈÃÁ½Ì¨»úÆ÷Á¬½Óµ½Ò»Æð£¬²¢Ï໥¡°½»Ì¸¡±»òÕß¡°¹µÍ¨¡±¡£Ò»µ©Á½Ì¨»úÆ÷¶¼·¢ÏÖÁ˶Է½£¬¾Í¿ÉÒÔÕ¹¿ªÒ»´ÎÁîÈËÓä¿ìµÄË«Ïò¶Ô»°¡£µ«ËüÃÇÔõÑù²ÅÄÜ¡°·¢ÏÖ¡±¶Ô·½ÄØ£¿Õâ¾ÍÏóÔÚÓÎÀÖÔ°ÀïÄÇÑù£ºÒ»Ì¨»úÆ÷²»µÃ²»Í£ÁôÔÚÒ»¸öµØ·½£¬ÕìÌýÆäËû»úÆ÷˵£º¡°ºÙ£¬ÄãÔÚÄÄÀïÄØ£¿¡±
¡°Í£ÁôÔÚÒ»¸öµØ·½¡±µÄ»úÆ÷½Ð×÷¡°·þÎñÆ÷¡±£¨Server£©£»µ½´¦¡°ÕÒÈË¡±µÄ»úÆ÷Ôò½Ð×÷¡°¿Í»§»ú¡±£¨Client£©»òÕß¡°¿Í»§¡±¡£ËüÃÇÖ®¼äµÄÇø±ðÖ»ÓÐÔÚ¿Í»§»úÊÔͼͬ·þÎñÆ÷Á¬½ÓµÄʱºò²ÅÏԵ÷dz£Ã÷ÏÔ¡£Ò»µ©Á¬Í¨£¬¾Í±ä³ÉÁËÒ»ÖÖË«ÏòͨÐÅ£¬Ë­À´°çÑÝ·þÎñÆ÷»òÕ߿ͻ§»ú±ãÏԵò»ÄÇÃ´ÖØÒªÁË¡£
ËùÒÔ·þÎñÆ÷µÄÖ÷ÒªÈÎÎñÊÇÕìÌý½¨Á¢Á¬½ÓµÄÇëÇó£¬ÕâÊÇÓÉÎÒÃÇ´´½¨µÄÌØ¶¨·þÎñÆ÷¶ÔÏóÍê³ÉµÄ¡£¶ø¿Í»§»úµÄÈÎÎñÊÇÊÔ×ÅÓëһ̨·þÎñÆ÷½¨Á¢Á¬½Ó£¬ÕâÊÇÓÉÎÒÃÇ´´½¨µÄÌØ¶¨¿Í»§»ú¶ÔÏóÍê³ÉµÄ¡£Ò»µ©Á¬½Ó½¨ºÃ£¬ÄÇôÎÞÂÛÔÚ·þÎñÆ÷¶Ë»¹Êǿͻ§»ú¶Ë£¬Á¬½ÓÖ»ÊÇħÊõ°ãµØ±ä³ÉÁËÒ»¸öIOÊý¾ÝÁ÷¶ÔÏó¡£´ÓÕâʱ¿ªÊ¼£¬ÎÒÃÇ¿ÉÒÔÏó¶Áдһ¸öÆÕͨµÄÎļþÄÇÑù¶Ô´ýÁ¬½Ó¡£ËùÒÔÒ»µ©½¨ºÃÁ¬½Ó£¬ÎÒÃÇÖ»ÐèÏóµÚ10ÕÂÄÇÑùʹÓÃ×Ô¼ºÊìϤµÄIOÃüÁî¼´¿É¡£ÕâÕýÊÇJavaÁ¬Íø×î·½±ãµÄÒ»¸öµØ·½¡£

1. ÔÚûÓÐÍøÂçµÄǰÌáϲâÊÔ³ÌÐò
ÓÉÓÚ¶àÖÖDZÔÚµÄÔ­Òò£¬ÎÒÃÇ¿ÉÄÜûÓÐһ̨¿Í»§»ú¡¢·þÎñÆ÷ÒÔ¼°Ò»¸öÍøÂçÀ´²âÊÔ×Ô¼º×öºÃµÄ³ÌÐò¡£ÎÒÃÇÒ²ÐíÊÇÔÚÒ»¸ö¿ÎÌû·¾³ÖнøÐÐÁ·Ï°£¬»òÕßд³öµÄÊÇÒ»¸ö²»Ê®·Ö¿É¿¿µÄÍøÂçÓ¦Ó㬻¹ÄÜÄõ½ÍøÂçÉÏÈ¥¡£IPµÄÉè¼ÆÕß×¢Òâµ½ÁËÕâ¸öÎÊÌ⣬²¢½¨Á¢ÁËÒ»¸öÌØÊâµÄµØÖ·¡ª¡ªlocalhost¡ª¡ªÀ´Âú×ã·ÇÍøÂç»·¾³ÖеIJâÊÔÒªÇó¡£ÔÚJavaÖвúÉúÕâ¸öµØÖ·×îÒ»°ãµÄ×ö·¨ÊÇ£º
InetAddress addr = InetAddress.getByName(null);
Èç¹ûÏògetByName()´«µÝÒ»¸önull£¨¿Õ£©Öµ£¬¾ÍĬÈÏΪʹÓÃlocalhost¡£ÎÒÃÇÓÃInetAddress¶ÔÌØ¶¨µÄ»úÆ÷½øÐÐË÷Òý£¬¶øÇÒ±ØÐëÔÚ½øÐнøÒ»²½µÄ²Ù×÷֮ǰµÃµ½Õâ¸öInetAddress£¨»¥ÁªÍøµØÖ·£©¡£ÎÒÃDz»¿ÉÒÔ²Ù×ÝÒ»¸öInetAddressµÄÄÚÈÝ£¨µ«¿É°ÑËü´òÓ¡³öÀ´£¬¾ÍÏóÏÂÒ»¸öÀý×ÓÒªÑÝʾµÄÄÇÑù£©¡£´´½¨InetAddressµÄΨһ;¾¶¾ÍÊÇÄǸöÀàµÄstatic£¨¾²Ì¬£©³ÉÔ±·½·¨getByName()£¨ÕâÊÇ×î³£Óõģ©¡¢getAllByName()»òÕßgetLocalHost()¡£
ΪµÃµ½±¾µØÖ÷»úµØÖ·£¬Òà¿ÉÏòÆäÖ±½Ó´«µÝ×Ö´®"localhost"£º
InetAddress.getByName("localhost");
»òÕßʹÓÃËüµÄ±£ÁôIPµØÖ·£¨ËĵãÐÎʽ£©£¬¾ÍÏóÏÂÃæÕâÑù£º
InetAddress.getByName("127.0.0.1");
ÕâÈýÖÖ·½·¨µÃµ½µÄ½á¹ûÊÇÒ»ÑùµÄ¡£

15.1.2 ¶Ë¿Ú£º»úÆ÷ÄÚ¶ÀÒ»ÎÞ¶þµÄ³¡Ëù
ÓÐЩʱºò£¬Ò»¸öIPµØÖ·²¢²»×ãÒÔÍêÕû±êʶһ¸ö·þÎñÆ÷¡£ÕâÊÇÓÉÓÚÔÚһ̨ÎïÀíÐԵĻúÆ÷ÖУ¬ÍùÍùÔËÐÐ×Ŷà¸ö·þÎñÆ÷£¨³ÌÐò£©¡£ÓÉIP±í´ïµÄÿ̨»úÆ÷Ò²°üº¬ÁË¡°¶Ë¿Ú¡±£¨Port£©¡£ÎÒÃÇÉèÖÃÒ»¸ö¿Í»§»ú»òÕß·þÎñÆ÷µÄʱºò£¬±ØÐëÑ¡ÔñÒ»¸öÎÞÂÛ¿Í»§»ú»¹ÊÇ·þÎñÆ÷¶¼ÈÏ¿ÉÁ¬½ÓµÄ¶Ë¿Ú¡£¾ÍÏóÎÒÃÇÈ¥°Ý»áijÈËʱ£¬IPµØÖ·ÊÇËû¾ÓסµÄ·¿×Ó£¬¶ø¶Ë¿ÚÊÇËûÔÚµÄÄǸö·¿¼ä¡£
×¢Òâ¶Ë¿Ú²¢²»ÊÇ»úÆ÷ÉÏÒ»¸öÎïÀíÉÏ´æÔڵij¡Ëù£¬¶øÊÇÒ»ÖÖÈí¼þ³éÏó£¨Ö÷ÒªÊÇΪÁ˱íÊöµÄ·½±ã£©¡£¿Í»§³ÌÐòÖªµÀÈçºÎͨ¹ý»úÆ÷µÄIPµØÖ·Í¬ËüÁ¬½Ó£¬µ«ÔõÑù²ÅÄÜͬ×Ô¼ºÕæÕýÐèÒªµÄÄÇÖÖ·þÎñÁ¬½ÓÄØ£¨Ò»°ãÿ¸ö¶Ë¿Ú¶¼ÔËÐÐ×ÅÒ»ÖÖ·þÎñ£¬Ò»Ì¨»úÆ÷¿ÉÄÜÌṩÁ˶àÖÖ·þÎñ£¬±ÈÈçHTTPºÍFTPµÈµÈ£©£¿¶Ë¿Ú±àºÅÔÚÕâÀï°çÑÝÁËÖØÒªµÄ½ÇÉ«£¬ËüÊDZØÐèµÄÒ»ÖÖ¶þ¼¶¶¨Ö·´ëÊ©¡£Ò²¾ÍÊÇ˵£¬ÎÒÃÇÇëÇóÒ»¸öÌØ¶¨µÄ¶Ë¿Ú£¬±ãÏ൱ÓÚÇëÇóÓëÄǸö¶Ë¿Ú±àºÅ¹ØÁªµÄ·þÎñ¡£¡°±¨Ê±¡±±ãÊÇ·þÎñµÄÒ»¸öµäÐÍÀý×Ó¡£Í¨³££¬Ã¿¸ö·þÎñ¶¼Í¬Ò»Ì¨Ìض¨·þÎñÆ÷»úÆ÷ÉϵÄÒ»¸ö¶ÀÒ»ÎÞ¶þµÄ¶Ë¿Ú±àºÅ¹ØÁªÔÚÒ»Æð¡£¿Í»§³ÌÐò±ØÐëÊÂÏÈÖªµÀ×Ô¼ºÒªÇóµÄÄÇÏî·þÎñµÄÔËÐж˿ںš£
ϵͳ·þÎñ±£ÁôÁËʹÓö˿Ú1µ½¶Ë¿Ú1024µÄȨÁ¦£¬ËùÒÔ²»Ó¦ÈÃ×Ô¼ºÉè¼ÆµÄ·þÎñÕ¼ÓÃÕâЩÒÔ¼°ÆäËûÈκÎÒÑÖªÕýÔÚʹÓõĶ˿ڡ£±¾ÊéµÄµÚÒ»¸öÀý×Ó½«Ê¹Óö˿Ú8080£¨Îª×·ÒäÎҵĵÚһ̨»úÆ÷ʹÓõÄÀÏʽ8λIntel 8080оƬ£¬ÄÇÊÇÒ»²¿Ê¹ÓÃCP/M²Ù×÷ϵͳµÄ»ú×Ó£©¡£

15.2 Ì×½Ó×Ö
¡°Ì×½Ó×Ö¡±»òÕß¡°²å×ù¡±£¨Socket£©Ò²ÊÇÒ»ÖÖÈí¼þÐÎʽµÄ³éÏó£¬ÓÃÓÚ±í´ïÁ½Ì¨»úÆ÷¼äÒ»¸öÁ¬½ÓµÄ¡°ÖÕ¶Ë¡±¡£Õë¶ÔÒ»¸öÌØ¶¨µÄÁ¬½Ó£¬Ã¿Ì¨»úÆ÷É϶¼ÓÐÒ»¸ö¡°Ì×½Ó×Ö¡±£¬¿ÉÒÔÏëÏóËüÃÇÖ®¼äÓÐÒ»ÌõÐéÄâµÄ¡°ÏßÀ¡±¡£ÏßÀµÄÿһ¶Ë¶¼²åÈëÒ»¸ö¡°Ì×½Ó×Ö¡±»òÕß¡°²å×ù¡±Àï¡£µ±È»£¬»úÆ÷Ö®¼äµÄÎïÀíÐÔÓ²¼þÒÔ¼°µçÀÂÁ¬½Ó¶¼ÊÇÍêȫδ֪µÄ¡£³éÏóµÄ»ù±¾×ÚÖ¼ÊÇÈÃÎÒÃǾ¡¿ÉÄܲ»±ØÖªµÀÄÇЩϸ½Ú¡£
ÔÚJavaÖУ¬ÎÒÃÇ´´½¨Ò»¸öÌ×½Ó×Ö£¬ÓÃËü½¨Á¢ÓëÆäËû»úÆ÷µÄÁ¬½Ó¡£´ÓÌ×½Ó×ֵõ½µÄ½á¹ûÊÇÒ»¸öInputStreamÒÔ¼°OutputStream£¨ÈôʹÓÃÇ¡µ±µÄת»»Æ÷£¬Ôò·Ö±ðÊÇReaderºÍWriter£©£¬ÒԱ㽫Á¬½Ó×÷Ϊһ¸öIOÁ÷¶ÔÏó¶Ô´ý¡£ÓÐÁ½¸ö»ùÓÚÊý¾ÝÁ÷µÄÌ×½Ó×ÖÀࣺServerSocket£¬·þÎñÆ÷ÓÃËü¡°ÕìÌý¡±½øÈëµÄÁ¬½Ó£»ÒÔ¼°Socket£¬¿Í»§ÓÃËü³õʼһ´ÎÁ¬½Ó¡£Ò»µ©¿Í»§£¨³ÌÐò£©ÉêÇ뽨Á¢Ò»¸öÌ×½Ó×ÖÁ¬½Ó£¬ServerSocket¾Í»á·µ»Ø£¨Í¨¹ýaccept()·½·¨£©Ò»¸ö¶ÔÓ¦µÄ·þÎñÆ÷¶ËÌ×½Ó×Ö£¬ÒÔ±ã½øÐÐÖ±½ÓͨÐÅ¡£´Ó´ËʱÆð£¬ÎÒÃǾ͵õ½ÁËÕæÕýµÄ¡°Ì×½Ó×Ö£­Ì×½Ó×Ö¡±Á¬½Ó£¬¿ÉÒÔÓÃͬÑùµÄ·½Ê½¶Ô´ýÁ¬½ÓµÄÁ½¶Ë£¬ÒòΪËüÃDZ¾À´¾ÍÊÇÏàͬµÄ£¡´Ëʱ¿ÉÒÔÀûÓÃgetInputStream()ÒÔ¼°getOutputStream()´Óÿ¸öÌ×½Ó×Ö²úÉú¶ÔÓ¦µÄInputStreamºÍOutputStream¶ÔÏó¡£ÕâЩÊý¾ÝÁ÷±ØÐë·â×°µ½»º³åÇøÄÚ¡£¿É°´µÚ10Õ½éÉܵķ½·¨¶ÔÀà½øÐиñʽ»¯£¬¾ÍÏó¶Ô´ýÆäËûÈκÎÁ÷¶ÔÏóÄÇÑù¡£
¶ÔÓÚJava¿âµÄÃüÃû»úÖÆ£¬ServerSocket£¨·þÎñÆ÷Ì×½Ó×Ö£©µÄʹÓÃÎÞÒÉÊÇÈÝÒײúÉú»ìÏýµÄÓÖÒ»¸öÀýÖ¤¡£´ó¼Ò¿ÉÄÜÈÏΪServerSocket×îºÃ½Ð×÷¡°ServerConnector¡±£¨·þÎñÆ÷Á¬½ÓÆ÷£©£¬»òÕ߯äËûʲôÃû×Ö£¬Ö»ÊDz»ÒªÔÚÆäÖа²²åÒ»¸ö¡°Socket¡±¡£Ò²¿ÉÄÜÒÔΪServerSocketºÍSocket¶¼Ó¦´ÓһЩͨÓõĻù´¡Àà¼Ì³Ð¡£ÊÂʵÉÏ£¬ÕâÁ½ÖÖÀàȷʵ°üº¬Á˼¸¸öͨÓõķ½·¨£¬µ«»¹²»¹»×ʸñ°ÑËüÃǸ³¸øÒ»¸öͨÓõĻù´¡Àà¡£Ïà·´£¬ServerSocketµÄÖ÷ÒªÈÎÎñÊÇÔÚÄÇÀïÄÍÐĵصȺòÆäËû»úÆ÷ͬËüÁ¬½Ó£¬ÔÙ·µ»ØÒ»¸öʵ¼ÊµÄSocket¡£ÕâÕýÊÇ¡°ServerSocket¡±Õâ¸öÃüÃû²»Ç¡µ±µÄµØ·½£¬ÒòΪËüµÄÄ¿±ê²»ÊÇÕæµÄ³ÉΪһ¸öSocket£¬¶øÊÇÔÚÆäËûÈËͬËüÁ¬½ÓµÄʱºò²úÉúÒ»¸öSocket¶ÔÏó¡£
È»¶ø£¬ServerSocketȷʵ»áÔÚÖ÷»úÉÏ´´½¨Ò»¸öÎïÀíÐԵġ°·þÎñÆ÷¡±»òÕßÕìÌýÓõÄÌ×½Ó×Ö¡£Õâ¸öÌ×½Ó×Ö»áÕìÌý½øÈëµÄÁ¬½Ó£¬È»ºóÀûÓÃaccept()·½·¨·µ»ØÒ»¸ö¡°Òѽ¨Á¢¡±Ì×½Ó×Ö£¨±¾µØºÍÔ¶³Ì¶Ëµã¾ùÒѶ¨Ò壩¡£ÈÝÒ×»ìÏýµÄµØ·½ÊÇÕâÁ½¸öÌ×½Ó×Ö£¨ÕìÌýºÍÒѽ¨Á¢£©¶¼ÓëÏàͬµÄ·þÎñÆ÷Ì×½Ó×Ö¹ØÁªÔÚÒ»Æð¡£ÕìÌýÌ×½Ó×ÖÖ»ÄܽÓÊÕеÄÁ¬½ÓÇëÇ󣬲»ÄܽÓÊÕʵ¼ÊµÄÊý¾Ý°ü¡£ËùÒÔ¾¡¹ÜServerSocket¶ÔÓÚ±à³Ì²¢ÎÞÌ«´óµÄÒâÒ壬µ«ËüȷʵÊÇ¡°ÎïÀíÐÔ¡±µÄ¡£
´´½¨Ò»¸öServerSocketʱ£¬Ö»ÐèΪÆä¸³ÓèÒ»¸ö¶Ë¿Ú±àºÅ¡£²»±Ø°ÑÒ»¸öIPµØÖ··ÖÅäËü£¬ÒòΪËüÒѾ­ÔÚ×Ô¼º´ú±íµÄÄÇ̨»úÆ÷ÉÏÁË¡£µ«ÔÚ´´½¨Ò»¸öSocketʱ£¬È´±ØÐëͬʱ¸³ÓèIPµØÖ·ÒÔ¼°ÒªÁ¬½ÓµÄ¶Ë¿Ú±àºÅ£¨ÁíÒ»·½Ã棬´ÓServerSocket.accept()·µ»ØµÄSocketÒѾ­°üº¬ÁËËùÓÐÕâЩÐÅÏ¢£©¡£

15.2.1 Ò»¸ö¼òµ¥µÄ·þÎñÆ÷ºÍ¿Í»§»ú³ÌÐò
Õâ¸öÀý×Ó½«ÒÔ×î¼òµ¥µÄ·½Ê½ÔËÓÃÌ×½Ó×Ö¶Ô·þÎñÆ÷ºÍ¿Í»§»ú½øÐвÙ×÷¡£·þÎñÆ÷µÄÈ«²¿¹¤×÷¾ÍÊǵȺò½¨Á¢Ò»¸öÁ¬½Ó£¬È»ºóÓÃÄǸöÁ¬½Ó²úÉúµÄSocket´´½¨Ò»¸öInputStreamÒÔ¼°Ò»¸öOutputStream¡£ÔÚÕâÖ®ºó£¬Ëü´ÓInputStream¶ÁÈëµÄËùÓж«Î÷¶¼»á·´À¡¸øOutputStream£¬Ö±µ½½ÓÊÕµ½ÐÐÖÐÖ¹£¨END£©ÎªÖ¹£¬×îºó¹Ø±ÕÁ¬½Ó¡£
¿Í»§»úÁ¬½ÓÓë·þÎñÆ÷µÄÁ¬½Ó£¬È»ºó´´½¨Ò»¸öOutputStream¡£Îı¾ÐÐͨ¹ýOutputStream·¢ËÍ¡£¿Í»§»úÒ²»á´´½¨Ò»¸öInputStream£¬ÓÃËüÊÕÌý·þÎñÆ÷˵Щʲô£¨±¾ÀýÖ»²»¹ýÊÇ·´À¡»ØÀ´µÄͬÑùµÄ×־䣩¡£
·þÎñÆ÷Óë¿Í»§»ú£¨³ÌÐò£©¶¼Ê¹ÓÃͬÑùµÄ¶Ë¿ÚºÅ£¬¶øÇÒ¿Í»§»úÀûÓñ¾µØÖ÷»úµØÖ·Á¬½ÓλÓÚͬһ̨»úÆ÷ÖеķþÎñÆ÷£¨³ÌÐò£©£¬ËùÒÔ²»±ØÔÚÒ»¸öÎïÀíÐÔµÄÍøÂçÀïÍê³É²âÊÔ£¨ÔÚijЩÅäÖû·¾³ÖУ¬¿ÉÄÜÐèÒªÍ¬ÕæÕýµÄÍøÂ罨Á¢Á¬½Ó£¬·ñÔò³ÌÐò²»Äܹ¤×÷¡ª¡ª¾¡¹Üʵ¼Ê²¢²»Í¨¹ýÄǸöÍøÂçͨÐÅ£©¡£
ÏÂÃæÊÇ·þÎñÆ÷³ÌÐò£º

831-832Ò³³ÌÐò

¿ÉÒÔ¿´µ½£¬ServerSocketÐèÒªµÄÖ»ÊÇÒ»¸ö¶Ë¿Ú±àºÅ£¬²»ÐèÒªIPµØÖ·£¨ÒòΪËü¾ÍÔÚÕą̂»úÆ÷ÉÏÔËÐУ©¡£µ÷ÓÃaccept()ʱ£¬·½·¨»áÔÝʱÏÝÈëÍ£¶Ù״̬£¨¶ÂÈû£©£¬Ö±µ½Ä³¸ö¿Í»§³¢ÊÔͬËü½¨Á¢Á¬½Ó¡£»»ÑÔÖ®£¬¾¡¹ÜËüÔÚÄÇÀïµÈºòÁ¬½Ó£¬µ«ÆäËû½ø³ÌÈÔÄÜÕý³£ÔËÐУ¨²Î¿¼µÚ14Õ£©¡£½¨ºÃÒ»¸öÁ¬½ÓÒÔºó£¬accept()¾Í»á·µ»ØÒ»¸öSocket¶ÔÏó£¬ËüÊÇÄǸöÁ¬½ÓµÄ´ú±í¡£
Çå³ýÌ×½Ó×ÖµÄÔðÈÎÔÚÕâÀïµÃµ½Á˺ÜÒÕÊõµÄ´¦Àí¡£¼ÙÈçServerSocket¹¹½¨Æ÷ʧ°Ü£¬Ôò³ÌÐò¼òµ¥µØÍ˳ö£¨×¢Òâ±ØÐë±£Ö¤ServerSocketµÄ¹¹½¨Æ÷ÔÚʧ°ÜÖ®ºó²»»áÁôÏÂÈκδò¿ªµÄÍøÂçÌ×½Ó×Ö£©¡£Õë¶ÔÕâÖÖÇé¿ö£¬main()»á¡°ÖÀ¡±³öÒ»¸öIOExceptionÎ¥Àý£¬ËùÒÔ²»±ØÊ¹ÓÃÒ»¸ötry¿é¡£ÈôServerSocket¹¹½¨Æ÷³É¹¦Ö´ÐУ¬ÔòÆäËûËùÓз½·¨µ÷Óö¼±ØÐëµ½Ò»¸ötry-finally´úÂë¿éÀïѰÇó±£»¤£¬ÒÔÈ·±£ÎÞÂÛ¿éÒÔʲô·½Ê½ÁôÏ£¬ServerSocket¶¼ÄÜÕýÈ·µØ¹Ø±Õ¡£
ͬÑùµÄµÀÀíÒ²ÊÊÓÃÓÚÓÉaccept()·µ»ØµÄSocket¡£Èôaccept()ʧ°Ü£¬ÄÇôÎÒÃDZØÐë±£Ö¤Socket²»ÔÙ´æÔÚ»òÕߺ¬ÓÐÈκÎ×ÊÔ´£¬ÒԱ㲻±ØÇå³ýËüÃÇ¡£µ«¼ÙÈôÖ´Ðгɹ¦£¬ÔòºóÐøµÄÓï¾ä±ØÐë½øÈëÒ»¸ötry-finally¿éÄÚ£¬ÒÔ±£ÕÏÔÚËüÃÇʧ°ÜµÄÇé¿öÏ£¬SocketÈÔÄܵõ½ÕýÈ·µÄÇå³ý¡£ÓÉÓÚÌ×½Ó×ÖʹÓÃÁËÖØÒªµÄ·ÇÄÚ´æ×ÊÔ´£¬ËùÒÔÔÚÕâÀï±ØÐëÌØ±ð½÷É÷£¬±ØÐë×Ô¼º¶¯ÊÖ½«ËüÃÇÇå³ý£¨JavaÖÐûÓÐÌṩ¡°ÆÆ»µÆ÷¡±À´°ïÖúÎÒÃÇ×öÕâ¼þÊÂÇ飩¡£
ÎÞÂÛServerSocket»¹ÊÇÓÉaccept()²úÉúµÄSocket¶¼´òÓ¡µ½System.outÀï¡£ÕâÒâζ×ÅËüÃǵÄtoString·½·¨»áµÃµ½×Ô¶¯µ÷Óá£ÕâÑù±ã²úÉúÁË£º

833Ò³ÖгÌÐò

´ó¼Ò²»¾Ã¾Í»á¿´µ½ËüÃÇÈçºÎÓë¿Í»§³ÌÐò×öµÄÊÂÇéÅäºÏ¡£
³ÌÐòµÄÏÂÒ»²¿·Ö¿´À´Ëƺõ½ö½öÊÇ´ò¿ªÎļþ£¬ÒÔ±ã¶ÁÈ¡ºÍдÈ룬ֻÊÇInputStreamºÍOutputStreamÊÇ´ÓSocket¶ÔÏó´´½¨µÄ¡£ÀûÓÃÁ½¸ö¡°×ª»»Æ÷¡±ÀàInputStreamReaderºÍOutputStreamWriter£¬InputStreamºÍOutputStream¶ÔÏóÒѾ­·Ö±ðת»»³ÉΪJava 1.1µÄReaderºÍWriter¶ÔÏó¡£Ò²¿ÉÒÔÖ±½ÓʹÓÃJava1.0µÄInputStreamºÍOutputStreamÀ࣬µ«¶ÔÊä³öÀ´Ëµ£¬Ê¹ÓÃWriter·½Ê½¾ßÓÐÃ÷ÏÔµÄÓÅÊÆ¡£ÕâÒ»ÓÅÊÆÊÇͨ¹ýPrintWriter±íÏÖ³öÀ´µÄ£¬ËüÓÐÒ»¸ö¹ýÔØµÄ¹¹½¨Æ÷£¬ÄÜ»ñÈ¡µÚ¶þ¸ö²ÎÊý¡ª¡ªÒ»¸ö²¼¶ûÖµ±êÖ¾£¬Ö¸ÏòÊÇ·ñÔÚÿһ´Îprintln()½áÊøµÄʱºò×Ô¶¯Ë¢ÐÂÊä³ö£¨µ«²»ÊÊÓÃÓÚprint()Óï¾ä£©¡£Ã¿´ÎдÈëÁËÊä³öÄÚÈݺó£¨Ð´½øout£©£¬ËüµÄ»º³åÇø±ØÐëˢУ¬Ê¹ÐÅÏ¢ÄÜÕýʽͨ¹ýÍøÂç´«µÝ³öÈ¥¡£¶ÔĿǰÕâ¸öÀý×ÓÀ´Ëµ£¬Ë¢ÐÂÏÔµÃÓÈÎªÖØÒª£¬ÒòΪ¿Í»§ºÍ·þÎñÆ÷ÔÚ²ÉÈ¡ÏÂÒ»²½²Ù×÷֮ǰ¶¼ÒªµÈ´ýÒ»ÐÐÎı¾ÄÚÈݵĵ½´ï¡£ÈôË¢ÐÂûÓз¢Éú£¬ÄÇôÐÅÏ¢²»»á½øÈëÍøÂ磬³ý·Ç»º³åÇøÂú£¨Òç³ö£©£¬Õâ»áΪ±¾Àý´øÀ´Ðí¶àÎÊÌâ¡£
±àÐ´ÍøÂçÓ¦ÓóÌÐòʱ£¬ÐèÒªÌØ±ð×¢Òâ×Ô¶¯Ë¢Ð»úÖÆµÄʹÓá£Ã¿´Îˢлº³åÇøÊ±£¬±ØÐë´´½¨ºÍ·¢³öÒ»¸öÊý¾Ý°ü£¨Êý¾Ý·â£©¡£¾ÍĿǰµÄÇé¿öÀ´Ëµ£¬ÕâÕýÊÇÎÒÃÇËùÏ£ÍûµÄ£¬ÒòΪ¼ÙÈç°üÄÚ°üº¬ÁË»¹Ã»Óз¢³öµÄÎı¾ÐУ¬·þÎñÆ÷ºÍ¿Í»§»úÖ®¼äµÄÏ໥¡°ÎÕÊÖ¡±¾Í»áÍ£Ö¹¡£»»¾ä»°Ëµ£¬Ò»ÐеÄĩβ¾ÍÊÇÒ»ÌõÏûÏ¢µÄĩβ¡£µ«ÔÚÆäËûÐí¶àÇé¿öÏ£¬ÏûÏ¢²¢²»ÊÇÓÃÐзָôµÄ£¬ËùÒÔ²»Èç²»ÓÃ×Ô¶¯Ë¢Ð»úÖÆ£¬¶øÓÃÄÚ½¨µÄ»º³åÇøÅоö»úÖÆÀ´¾ö¶¨ºÎʱ·¢ËÍÒ»¸öÊý¾Ý°ü¡£ÕâÑùÒ»À´£¬ÎÒÃÇ¿ÉÒÔ·¢³ö½Ï´óµÄÊý¾Ý°ü£¬¶øÇÒ´¦Àí½ø³ÌÒ²Äܼӿ졣
×¢ÒâºÍÎÒÃÇ´ò¿ªµÄ¼¸ºõËùÓÐÊý¾ÝÁ÷Ò»Ñù£¬ËüÃǶ¼Òª½øÐлº³å´¦Àí¡£±¾ÕÂĩβÓÐÒ»¸öÁ·Ï°£¬Çå³þÕ¹ÏÖÁ˼ÙÈçÎÒÃDz»¶ÔÊý¾ÝÁ÷½øÐлº³å£¬ÄÇô»áµÃµ½Ê²Ã´ÑùµÄºó¹û£¨ËÙ¶È»á±äÂý£©¡£
ÎÞÏÞwhileÑ­»·´ÓBufferedReader inÄÚ¶ÁÈ¡Îı¾ÐУ¬²¢½«ÐÅϢдÈëSystem.out£¬È»ºóдÈëPrintWriter.out¡£×¢ÒâÕâ¿ÉÒÔÊÇÈκÎÊý¾ÝÁ÷£¬ËüÃÇÖ»ÊÇÔÚ±íÃæÉÏÍ¬ÍøÂçÁ¬½Ó¡£
¿Í»§³ÌÐò·¢³ö°üº¬ÁË"END"µÄÐк󣬳ÌÐò»áÖÐֹѭ»·£¬²¢¹Ø±ÕSocket¡£
ÏÂÃæÊǿͻ§³ÌÐòµÄÔ´Â룺

834-835Ò³³ÌÐò

ÔÚmain()ÖУ¬´ó¼Ò¿É¿´µ½»ñµÃ±¾µØÖ÷»úIPµØÖ·µÄInetAddressµÄÈýÖÖ;¾¶£ºÊ¹ÓÃnull£¬Ê¹ÓÃlocalhost£¬»òÕßÖ±½ÓʹÓñ£ÁôµØÖ·127.0.0.1¡£µ±È»£¬Èç¹ûÏëͨ¹ýÍøÂçͬһ̨Զ³ÌÖ÷»úÁ¬½Ó£¬Ò²¿ÉÒÔ»»ÓÃÄÇ̨»úÆ÷µÄIPµØÖ·¡£´òÓ¡³öInetAddress addrºó£¨Í¨¹ý¶ÔtoString()·½·¨µÄ×Ô¶¯µ÷Óã©£¬½á¹ûÈçÏ£º
localhost/127.0.0.1
ͨ¹ýÏògetByName()´«µÝÒ»¸önull£¬Ëü»áĬÈÏѰÕÒlocalhost£¬²¢Éú³ÉÌØÊâµÄ±£ÁôµØÖ·127.0.0.1¡£×¢ÒâÔÚÃûΪsocketµÄÌ×½Ó×Ö´´½¨Ê±£¬Í¬Ê±Ê¹ÓÃÁËInetAddressÒÔ¼°¶Ë¿ÚºÅ¡£´òÓ¡ÕâÑùµÄij¸öSocket¶ÔÏóʱ£¬ÎªÁËÕæÕýÀí½âËüµÄº¬Ò壬Çë¼Çסһ´Î¶ÀÒ»ÎÞ¶þµÄÒòÌØÍøÁ¬½ÓÊÇÓÃÏÂÊöËÄÖÖÊý¾Ý±êʶµÄ£ºclientHost£¨¿Í»§Ö÷»ú£©¡¢clientPortNumber£¨¿Í»§¶Ë¿ÚºÅ£©¡¢serverHost£¨·þÎñÖ÷»ú£©ÒÔ¼°serverPortNumber£¨·þÎñ¶Ë¿ÚºÅ£©¡£·þÎñ³ÌÐòÆô¶¯ºó£¬»áÔÚ±¾µØÖ÷»ú£¨127.0.0.1£©ÉϽ¨Á¢ÎªËü·ÖÅäµÄ¶Ë¿Ú£¨8080£©¡£Ò»µ©¿Í»§³ÌÐò·¢³öÇëÇ󣬻úÆ÷ÉÏÏÂÒ»¸ö¿ÉÓõĶ˿ھͻá·ÖÅ䏸Ëü£¨ÕâÖÖÇé¿öÏÂÊÇ1077£©£¬ÕâÒ»Ðж¯Ò²ÔÚÓë·þÎñ³ÌÐòÏàͬµÄ»úÆ÷£¨127.0.0.1£©ÉϽøÐС£ÏÖÔÚ£¬ÎªÁËʹÊý¾ÝÄÜÔÚ¿Í»§¼°·þÎñ³ÌÐòÖ®¼äÀ´»Ø´«ËÍ£¬Ã¿Ò»¶Ë¶¼ÐèÒªÖªµÀ°ÑÊý¾Ý·¢µ½ÄÄÀï¡£ËùÒÔÔÚͬһ¸ö¡°ÒÑÖª¡±·þÎñ³ÌÐòÁ¬½ÓµÄʱºò£¬¿Í»§»á·¢³öÒ»¸ö¡°·µ»ØµØÖ·¡±£¬Ê¹·þÎñÆ÷³ÌÐòÖªµÀ½«×Ô¼ºµÄÊý¾Ý·¢µ½ÄĶù¡£ÎÒÃÇÔÚ·þÎñÆ÷¶ËµÄʾ·¶Êä³öÖпÉÒÔÌå»áµ½ÕâÒ»Çé¿ö£º
Socket[addr=127.0.0.1,port=1077,localport=8080]
ÕâÒâζ×Å·þÎñÆ÷¸Õ²ÅÒѽÓÊÜÁËÀ´×Ô127.0.0.1Õą̂»úÆ÷µÄ¶Ë¿Ú1077µÄÁ¬½Ó£¬Í¬Ê±¼àÌý×Ô¼ºµÄ±¾µØ¶Ë¿Ú£¨8080£©¡£¶øÔÚ¿Í»§¶Ë£º
Socket[addr=localhost/127.0.0.1,PORT=8080,localport=1077]
ÕâÒâζ×ſͻ§ÒÑÓÃ×Ô¼ºµÄ±¾µØ¶Ë¿Ú1077Óë127.0.0.1»úÆ÷ÉϵĶ˿Ú8080½¨Á¢ÁË Á¬½Ó¡£
´ó¼Ò»á×¢Ò⵽ÿ´ÎÖØÐÂÆô¶¯¿Í»§³ÌÐòµÄʱºò£¬±¾µØ¶Ë¿ÚµÄ±àºÅ¶¼»áÔö¼Ó¡£Õâ¸ö±àºÅ´Ó1025£¨¸ÕºÃÔÚϵͳ±£ÁôµÄ1-1024Ö®Í⣩¿ªÊ¼£¬²¢»áÒ»Ö±Ôö¼ÓÏÂÈ¥£¬³ý·ÇÎÒÃÇÖØÆô»úÆ÷¡£ÈôÖØÐÂÆô¶¯»úÆ÷£¬¶Ë¿ÚºÅÈÔÈ»»á´Ó1025¿ªÊ¼ÔöÖµ£¨ÔÚUnix»úÆ÷ÖУ¬Ò»µ©³¬¹ý±£ÁôµÄÌ×°´×Ö·¶Î§£¬Êý×־ͻáÔٴδÓ×îСµÄ¿ÉÓÃÊý×Ö¿ªÊ¼£©¡£
´´½¨ºÃSocket¶ÔÏóºó£¬½«Æäת»»³ÉBufferedReaderºÍPrintWriterµÄ¹ý³Ì±ãÓëÔÚ·þÎñÆ÷ÖÐÏàͬ£¨Í¬ÑùµØ£¬Á½ÖÖÇé¿ö϶¼Òª´ÓÒ»¸öSocket¿ªÊ¼£©¡£ÔÚÕâÀ¿Í»§Í¨¹ý·¢³ö×Ö´®"howdy"£¬²¢ÔÚºóÃæ¸úËæÒ»¸öÊý×Ö£¬´Ó¶ø³õʼ»¯Í¨ÐÅ¡£×¢Ò⻺³åÇø±ØÐëÔÙ´ÎˢУ¨ÕâÊÇ×Ô¶¯·¢ÉúµÄ£¬Í¨¹ý´«µÝ¸øPrintWriter¹¹½¨Æ÷µÄµÚ¶þ¸ö²ÎÊý£©¡£Èô»º³åÇøÃ»ÓÐˢУ¬ÄÇôÕû¸ö»á»°£¨Í¨ÐÅ£©¶¼»á±»¹ÒÆð£¬ÒòΪÓÃÓÚ³õʼ»¯µÄ¡°howdy¡±ÓÀÔ¶²»»á·¢ËͳöÈ¥£¨»º³åÇø²»¹»Âú£¬²»×ãÒÔÔì³É·¢ËͶ¯×÷µÄ×Ô¶¯½øÐУ©¡£´Ó·þÎñÆ÷·µ»ØµÄÿһÐж¼»áдÈëSystem.out£¬ÒÔÑéÖ¤Ò»Çж¼ÔÚÕý³£ÔËת¡£ÎªÖÐÖ¹»á»°£¬ÐèÒª·¢³öÒ»¸ö"END"¡£Èô¿Í»§³ÌÐò¼òµ¥µØ¹ÒÆð£¬ÄÇô·þÎñÆ÷»á¡°ÖÀ¡±³öÒ»¸öÎ¥Àý¡£
´ó¼ÒÔÚÕâÀï¿ÉÒÔ¿´µ½ÎÒÃDzÉÓÃÁËͬÑùµÄ´ëÊ©À´È·±£ÓÉSocket´ú±íµÄÍøÂç×ÊÔ´µÃµ½ÕýÈ·µÄÇå³ý£¬ÕâÊÇÓÃÒ»¸ötry-finally¿éʵÏֵġ£
Ì×½Ó×Ö½¨Á¢ÁËÒ»¸ö¡°×¨Óá±Á¬½Ó£¬Ëü»áÒ»Ö±³ÖÐøµ½Ã÷È·¶Ï¿ªÁ¬½ÓΪֹ£¨×¨ÓÃÁ¬½ÓÒ²¿ÉÄܼä½ÓÐԵضϿª£¬Ç°ÌáÊÇijһ¶Ë»òÕßÖмäµÄijÌõÁ´Â·³öÏÖ¹ÊÕ϶ø±ÀÀ££©¡£ÕâÒâζ×ŲÎÓëÁ¬½ÓµÄË«·½¶¼±»Ëø¶¨ÔÚͨÐÅÖУ¬¶øÇÒÎÞÂÛÊÇ·ñÓÐÊý¾Ý´«µÝ£¬Á¬½Ó¶¼»áÁ¬Ðø´¦ÓÚ¿ª·Å״̬¡£´Ó±íÃæ¿´£¬ÕâËÆºõÊÇÒ»ÖÖºÏÀíµÄÁ¬Íø·½Ê½¡£È»¶ø£¬ËüÒ²ÎªÍøÂç´øÀ´Á˶îÍâµÄ¿ªÏú¡£±¾ÕºóÃæ»á½éÉܽøÐÐÁ¬ÍøµÄÁíÒ»ÖÖ·½Ê½¡£²ÉÓÃÄÇÖÖ·½Ê½£¬Á¬½ÓµÄ½¨Á¢Ö»ÊÇÔÝʱµÄ¡£

15.3 ·þÎñ¶à¸ö¿Í»§
JabberServer¿ÉÒÔÕý³£¹¤×÷£¬µ«Ã¿´ÎÖ»ÄÜΪһ¸ö¿Í»§³ÌÐòÌṩ·þÎñ¡£ÔÚµäÐ͵ķþÎñÆ÷ÖУ¬ÎÒÃÇÏ£ÍûͬʱÄÜ´¦Àí¶à¸ö¿Í»§µÄÇëÇó¡£½â¾öÕâ¸öÎÊÌâµÄ¹Ø¼ü¾ÍÊǶàÏ̴߳¦Àí»úÖÆ¡£¶ø¶ÔÓÚÄÇЩ±¾Éí²»Ö§³Ö¶àÏ̵߳ÄÓïÑÔ£¬´ïµ½Õâ¸öÒªÇóÎÞÒÉÊÇÒì³£À§Äѵġ£Í¨¹ýµÚ14ÕµÄѧϰ£¬´ó¼ÒÒѾ­ÖªµÀJavaÒѶԶàÏ̵߳Ĵ¦Àí½øÐÐÁ˾¡¿ÉÄܵļò»¯¡£ÓÉÓÚJavaµÄÏ̴߳¦Àí·½Ê½·Ç³£Ö±½Ó£¬ËùÒÔÈ÷þÎñÆ÷¿ØÖƶàÃû¿Í»§²¢²»ÊǼþÄÑÊ¡£
×î»ù±¾µÄ·½·¨ÊÇÔÚ·þÎñÆ÷£¨³ÌÐò£©Àï´´½¨µ¥¸öServerSocket£¬²¢µ÷ÓÃaccept()À´µÈºòÒ»¸öÐÂÁ¬½Ó¡£Ò»µ©accept()·µ»Ø£¬ÎÒÃǾÍÈ¡µÃ½á¹û»ñµÃµÄSocket£¬²¢ÓÃËüн¨Ò»¸öỊ̈߳¬ÁîÆäֻΪÄǸöÌØ¶¨µÄ¿Í»§·þÎñ¡£È»ºóÔÙµ÷ÓÃaccept()£¬µÈºòÏÂÒ»´ÎеÄÁ¬½ÓÇëÇó¡£
¶ÔÓÚÏÂÃæÕâ¶Î·þÎñÆ÷´úÂ룬´ó¼Ò¿É·¢ÏÖËüÓëJabberServer.javaÀý×ӷdz£ÏàËÆ£¬Ö»ÊÇΪһ¸öÌØ¶¨µÄ¿Í»§Ìṩ·þÎñµÄËùÓвÙ×÷¶¼ÒÑÒÆÈëÒ»¸ö¶ÀÁ¢µÄÏß³ÌÀàÖУº

837-839Ò³³ÌÐò

ÿ´ÎÓÐпͻ§ÇëÇó½¨Á¢Ò»¸öÁ¬½Óʱ£¬ServeOneJabberÏ̶߳¼»áÈ¡µÃÓÉaccept()ÔÚmain()ÖÐÉú³ÉµÄSocket¶ÔÏó¡£È»ºóºÍÍù³£Ò»Ñù£¬Ëü´´½¨Ò»¸öBufferedReader£¬²¢ÓÃSocket×Ô¶¯Ë¢ÐÂPrintWriter¶ÔÏó¡£×îºó£¬Ëüµ÷ÓÃThreadµÄÌØÊâ·½·¨start()£¬ÁîÆä½øÐÐÏ̵߳ijõʼ»¯£¬È»ºóµ÷ÓÃrun()¡£ÕâÀï²ÉÈ¡µÄ²Ù×÷ÓëǰÀýÊÇÒ»ÑùµÄ£º´ÓÌ×ɨ×Ö¶ÁÈëijЩ¶«Î÷£¬È»ºó°ÑËüÔ­Ñù·´À¡»ØÈ¥£¬Ö±µ½Óöµ½Ò»¸öÌØÊâµÄ"END"½áÊø±ê־Ϊֹ¡£
ͬÑùµØ£¬Ì×½Ó×ÖµÄÇå³ý±ØÐë½øÐн÷É÷µÄÉè¼Æ¡£¾ÍĿǰÕâÖÖÇé¿öÀ´Ëµ£¬Ì×½Ó×ÖÊÇÔÚServeOneJabberÍⲿ´´½¨µÄ£¬ËùÒÔÇå³ý¹¤×÷¿ÉÒÔ¡°¹²Ïí¡±¡£ÈôServeOneJabber¹¹½¨Æ÷ʧ°Ü£¬ÄÇôֻÐèÏòµ÷ÓÃÕß¡°ÖÀ¡±³öÒ»¸öÎ¥Àý¼´¿É£¬È»ºóÓɵ÷ÓÃÕ߸ºÔðÏ̵߳ÄÇå³ý¡£µ«¼ÙÈç¹¹½¨Æ÷³É¹¦£¬ÄÇô±ØÐëÓÉServeOneJabber¶ÔÏó¸ºÔðÏ̵߳ÄÇå³ý£¬ÕâÊÇÔÚËüµÄrun()Àï½øÐеġ£
Çë×¢ÒâMultiJabberServerÓжàô¼òµ¥¡£ºÍÒÔǰһÑù£¬ÎÒÃÇ´´½¨Ò»¸öServerSocket£¬²¢µ÷ÓÃaccept()ÔÊÐíÒ»¸öÐÂÁ¬½ÓµÄ½¨Á¢¡£µ«ÕâÒ»´Î£¬accept()µÄ·µ»ØÖµ£¨Ò»¸öÌ×½Ó×Ö£©½«´«µÝ¸øÓÃÓÚServeOneJabberµÄ¹¹½¨Æ÷£¬ÓÉËü´´½¨Ò»¸öÐÂỊ̈߳¬²¢¶ÔÄǸöÁ¬½Ó½øÐпØÖÆ¡£Á¬½ÓÖжϺó£¬Ï̱߳ã¿É¼òµ¥µØÏûʧ¡£
Èç¹ûServerSocket´´½¨Ê§°Ü£¬ÔòÔÙÒ»´Îͨ¹ýmain()ÖÀ³öÎ¥Àý¡£Èç¹û³É¹¦£¬ÔòλÓÚÍâ²ãµÄtry-finally´úÂë¿é¿ÉÒÔµ£±£ÕýÈ·µÄÇå³ý¡£Î»ÓÚÄÚ²ãµÄtry-catch¿éÖ»¸ºÔð·À·¶ServeOneJabber¹¹½¨Æ÷µÄʧ°Ü£»Èô¹¹½¨Æ÷³É¹¦£¬ÔòServeOneJabberÏ̻߳Ὣ¶ÔÓ¦µÄÌ×½Ó×ֹصô¡£
ΪÁË֤ʵ·þÎñÆ÷´úÂëȷʵÄÜΪ¶àÃû¿Í»§Ìṩ·þÎñ£¬ÏÂÃæÕâ¸ö³ÌÐò½«´´½¨Ðí¶à¿Í»§£¨Ê¹ÓÃỊ̈߳©£¬²¢Í¬ÏàͬµÄ·þÎñÆ÷½¨Á¢Á¬½Ó¡£Ã¿¸öÏ̵߳ġ°´æÔÚʱ¼ä¡±¶¼ÊÇÓÐÏ޵ġ£Ò»µ©µ½ÆÚ£¬¾ÍÁô³ö¿Õ¼äÒԱ㴴½¨Ò»¸öÐÂÏ̡߳£ÔÊÐí´´½¨µÄÏ̵߳Ä×î´óÊýÁ¿ÊÇÓÉfinal int maxthreads¾ö¶¨µÄ¡£´ó¼Ò»á×¢Òâµ½Õâ¸öÖµ·Ç³£¹Ø¼ü£¬ÒòΪ¼ÙÈç°ÑËüÉèµÃºÜ´ó£¬Ï̱߳ãÓпÉÄܺľ¡×ÊÔ´£¬²¢²úÉú²»¿ÉÔ¤ÖªµÄ³ÌÐò´íÎó¡£

840-842Ò³³ÌÐò

JabberClientThread¹¹½¨Æ÷»ñȡһ¸öInetAddress£¬²¢ÓÃËü´ò¿ªÒ»¸öÌ×½Ó×Ö¡£´ó¼Ò¿ÉÄÜÒÑ¿´³öÁËÕâÑùµÄÒ»¸öÌ×·£ºSocket¿Ï¶¨ÓÃÓÚ´´½¨Ä³ÖÖReaderÒÔ¼°£¯»òÕßWriter£¨»òÕßInputStreamºÍ£¯»òOutputStream£©¶ÔÏó£¬ÕâÊÇÔËÓÃSocketµÄΨһ·½Ê½£¨µ±È»£¬ÎÒÃǿɿ¼ÂDZàдһ¡¢Á½¸öÀ࣬ÁîÆä×Ô¶¯Íê³ÉÕâЩ²Ù×÷£¬±ÜÃâ´óÁ¿Öظ´µÄ´úÂë±àд¹¤×÷£©¡£Í¬ÑùµØ£¬start()Ö´ÐÐÏ̵߳ijõʼ»¯£¬²¢µ÷ÓÃrun()¡£ÔÚÕâÀÏûÏ¢·¢Ë͸ø·þÎñÆ÷£¬¶øÀ´×Ô·þÎñÆ÷µÄÐÅÏ¢ÔòÔÚÆÁÄ»ÉÏ»ØÏÔ³öÀ´¡£È»¶ø£¬Ï̵߳ġ°´æÔÚʱ¼ä¡±ÊÇÓÐÏ޵ģ¬×îÖÕ¶¼»á½áÊø¡£×¢ÒâÔÚÌ×½Ó×Ö´´½¨ºÃÒԺ󣬵«ÔÚ¹¹½¨Æ÷Íê³É֮ǰ£¬¼ÙÈô¹¹½¨Æ÷ʧ°Ü£¬Ì×½Ó×ֻᱻÇå³ý¡£·ñÔò£¬ÎªÌ×½Ó×Öµ÷ÓÃclose()µÄÔðÈαãÂäµ½ÁËrun()·½·¨µÄÍ·ÉÏ¡£
threadcount¸ú×Ù¼ÆËãĿǰ´æÔÚµÄJabberClientThread¶ÔÏóµÄÊýÁ¿¡£Ëü½«×÷Ϊ¹¹½¨Æ÷µÄÒ»²¿·ÖÔöÖµ£¬²¢ÔÚrun()Í˳öʱ¼õÖµ£¨run()Í˳öÒâζ×ÅÏß³ÌÖÐÖ¹£©¡£ÔÚMultiJabberClient.main()ÖУ¬´ó¼Ò¿ÉÒÔ¿´µ½Ï̵߳ÄÊýÁ¿»áµÃµ½¼ì²é¡£ÈôÊýÁ¿Ì«¶à£¬Ôò¶àÓàµÄÔÝʱ²»´´½¨¡£·½·¨Ëæºó½øÈë¡°ÐÝÃß¡±×´Ì¬¡£ÕâÑùÒ»À´£¬Ò»µ©²¿·ÖÏß³Ì×îºó±»ÖÐÖ¹£¬¶à×÷µÄÄÇЩÏ߳̾ͿÉÒÔ´´½¨ÁË¡£´ó¼Ò¿ÉÊÔÑéÒ»ÏÂÖð½¥Ôö´óMAX_THREADS£¬¿´¿´¶ÔÓÚÄãʹÓõÄϵͳÀ´Ëµ£¬½¨Á¢¶àÉÙỊ̈߳¨Á¬½Ó£©²Å»áʹÄúµÄϵͳ×ÊÔ´½µµÍµ½Î£Ïճ̶ȡ£

15.4 Êý¾Ý±¨
´ó¼ÒÆù½ñ¿´µ½µÄÀý×ÓʹÓõͼÊÇ¡°´«Êä¿ØÖÆÐ­Ò顱£¨TCP£©£¬Òà³Æ×÷¡°»ùÓÚÊý¾ÝÁ÷µÄÌ×½Ó×Ö¡±¡£¸ù¾Ý¸ÃЭÒéµÄÉè¼Æ×ÚÖ¼£¬Ëü¾ßÓи߶ȵĿɿ¿ÐÔ£¬¶øÇÒÄܱ£Ö¤Êý¾Ý˳ÀûµÖ´ïÄ¿µÄµØ¡£»»ÑÔÖ®£¬ËüÔÊÐíÖØ´«ÄÇЩÓÉÓÚ¸÷ÖÖÔ­Òò°ë·¡°×ßʧ¡±µÄÊý¾Ý¡£¶øÇÒÊÕµ½×Ö½ÚµÄ˳ÐòÓëËüÃÇ·¢³öÀ´Ê±ÊÇÒ»ÑùµÄ¡£µ±È»£¬ÕâÖÖ¿ØÖÆÓë¿É¿¿ÐÔÐèÒªÎÒÃǸ¶³öһЩ´ú¼Û£ºTCP¾ßÓзdz£¸ßµÄ¿ªÏú¡£
»¹ÓÐÁíÒ»ÖÖЭÒ飬ÃûΪ¡°Óû§Êý¾Ý±¨Ð­Ò顱£¨UDP£©£¬Ëü²¢²»¿ÌÒâ×·ÇóÊý¾Ý°ü»áÍêÈ«·¢ËͳöÈ¥£¬Ò²²»Äܵ£±£ËüÃǵִïµÄ˳ÐòÓëËüÃÇ·¢³öʱһÑù¡£ÎÒÃÇÈÏΪÕâÊÇÒ»ÖÖ¡°²»¿É¿¿Ð­Ò顱£¨TCPµ±È»ÊÇ¡°¿É¿¿Ð­Ò顱£©¡£ÌýÆðÀ´ËƺõºÜÔ㣬µ«ÓÉÓÚËüµÄËÙ¶È¿ìµÃ¶à£¬ËùÒÔ¾­³£»¹ÊÇÓÐÓÃÎäÖ®µØµÄ¡£¶ÔijЩӦÓÃÀ´Ëµ£¬±ÈÈçÉùÒôÐźŵĴ«Ê䣬Èç¹ûÉÙÁ¿Êý¾Ý°üÔÚ°ë·É϶ªÊ§ÁË£¬ÄÇôÓò»×ÅÌ«ÔÚÒ⣬ÒòΪ´«ÊäµÄËÙ¶ÈÏԵøüÖØÒªÒ»Ð©¡£´ó¶àÊý»¥ÁªÍøÓÎÏ·£¬ÈçDiablo£¬²ÉÓõÄÒ²ÊÇUDPЭÒéͨÐÅ£¬ÒòÎªÍøÂçͨÐŵĿìÂýÊÇÓÎÏ·ÊÇ·ñÁ÷³©µÄ¾ö¶¨ÐÔÒòËØ¡£Ò²¿ÉÒÔÏëÏëһ̨±¨Ê±·þÎñÆ÷£¬Èç¹ûijÌõÏûÏ¢¶ªÊ§ÁË£¬ÄÇÃ´Ò²ÕæµÄ²»±Ø¹ý·Ý½ôÕÅ¡£ÁíÍ⣬ÓÐЩӦÓÃÒ²ÐíÄÜÏò·þÎñÆ÷´«»ØÒ»ÌõUDPÏûÏ¢£¬ÒÔ±ãÒÔºóÄܹ»»Ö¸´¡£Èç¹ûÔÚÊʵ±µÄʱ¼äÀïûÓÐÏìÓ¦£¬ÏûÏ¢¾Í»á¶ªÊ§¡£
Java¶ÔÊý¾Ý±¨µÄÖ§³ÖÓëËü¶ÔTCPÌ×½Ó×ÖµÄÖ§³Ö´óÖÂÏàͬ£¬µ«Ò²´æÔÚÒ»¸öÃ÷ÏÔµÄÇø±ð¡£¶ÔÊý¾Ý±¨À´Ëµ£¬ÎÒÃÇÔÚ¿Í»§ºÍ·þÎñÆ÷³ÌÐò¶¼¿ÉÒÔ·ÅÖÃÒ»¸öDatagramSocket£¨Êý¾Ý±¨Ì×½Ó×Ö£©£¬µ«ÓëServerSocket²»Í¬£¬Ç°Õß²»»á¸É°Í°ÍµØµÈ´ý½¨Á¢Ò»¸öÁ¬½ÓµÄÇëÇó¡£ÕâÊÇÓÉÓÚ²»ÔÙ´æÔÚ¡°Á¬½Ó¡±£¬È¡¶ø´úÖ®µÄÊÇÒ»¸öÊý¾Ý±¨³ÂÁгöÀ´¡£ÁíÒ»Ïî±¾ÖʵÄÇø±ðµÄÊǶÔTCPÌ×½Ó×ÖÀ´Ëµ£¬Ò»µ©ÎÒÃǽ¨ºÃÁËÁ¬½Ó£¬±ã²»ÔÙÐèÒª¹ØÐÄË­ÏòË­¡°Ëµ»°¡±¡ª¡ªÖ»Ðèͨ¹ý»á»°Á÷À´»Ø´«ËÍÊý¾Ý¼´¿É¡£µ«¶ÔÊý¾Ý±¨À´Ëµ£¬ËüµÄÊý¾Ý°ü±ØÐëÖªµÀ×Ô¼ºÀ´×Ժ䦣¬ÒÔ¼°´òËãÈ¥ÄÄÀï¡£ÕâÒâζ×ÅÎÒÃDZØÐëÖªµÀÿ¸öÊý¾Ý±¨°üµÄÕâЩÐÅÏ¢£¬·ñÔòÐÅÏ¢¾Í²»ÄÜÕý³£µØ´«µÝ¡£
DatagramSocketÓÃÓÚÊÕ·¢Êý¾Ý°ü£¬¶øDatagramPacket°üº¬Á˾ßÌåµÄÐÅÏ¢¡£×¼±¸½ÓÊÕÒ»¸öÊý¾Ý±¨Ê±£¬Ö»ÐèÌṩһ¸ö»º³åÇø£¬ÒԱ㰲ÖýÓÊÕµ½µÄÊý¾Ý¡£Êý¾Ý°üµÖ´ïʱ£¬Í¨¹ýDatagramSocket£¬×÷ΪÐÅÏ¢ÆðÔ´µØµÄÒòÌØÍøµØÖ·ÒÔ¼°¶Ë¿Ú±àºÅ»á×Ô¶¯µÃµ½³õ»¯¡£ËùÒÔÒ»¸öÓÃÓÚ½ÓÊÕÊý¾Ý±¨µÄDatagramPacket¹¹½¨Æ÷ÊÇ£º
DatagramPacket(buf, buf.length)
ÆäÖУ¬bufÊÇÒ»¸ö×Ö½ÚÊý×é¡£¼ÈÈ»bufÊǸöÊý×飬´ó¼Ò¿ÉÄÜ»áÆæ¹ÖΪʲô¹¹½¨Æ÷×Ô¼º²»Äܵ÷²é³öÊý×éµÄ³¤¶ÈÄØ£¿Êµ¼ÊÉÏÎÒÒ²ÓÐͬ¸Ð£¬Î¨Ò»Äܲµ½µÄÔ­Òò¾ÍÊÇC·ç¸ñµÄ±à³ÌʹȻ£¬ÄÇÀïµÄÊý×é²»ÄÜ×Ô¼º¸æËßÎÒÃÇËüÓжà´ó¡£
¿ÉÒÔÖØ¸´Ê¹ÓÃÊý¾Ý±¨µÄ½ÓÊÕ´úÂ룬²»±ØÃ¿´Î¶¼½¨Ò»¸öеġ£Ã¿´ÎÓÃËüµÄʱºò£¨ÔÙÉú£©£¬»º³åÇøÄÚµÄÊý¾Ý¶¼»á±»¸²¸Ç¡£
»º³åÇøµÄ×î´óÈÝÁ¿½öÊÜÏÞÓÚÔÊÐíµÄÊý¾Ý±¨°ü´óС£¬Õâ¸öÏÞÖÆÎ»ÓÚ±È64KBÉÔСµÄµØ·½¡£µ«ÔÚÐí¶àÓ¦ÓóÌÐòÖУ¬ÎÒÃǶ¼ÄþÔ¸Ëü±äµÃ»¹ÒªÐ¡Ò»Ð©£¬ÌرðÊÇÔÚ·¢ËÍÊý¾ÝµÄʱºò¡£¾ßÌåÑ¡ÔñµÄÊý¾Ý°ü´óСȡ¾öÓÚÓ¦ÓóÌÐòµÄÌØ¶¨ÒªÇó¡£
·¢³öÒ»¸öÊý¾Ý±¨Ê±£¬DatagramPacket²»½öÐèÒª°üº¬ÕýʽµÄÊý¾Ý£¬Ò²Òª°üº¬ÒòÌØÍøµØÖ·ÒÔ¼°¶Ë¿ÚºÅ£¬ÒÔ¾ö¶¨ËüµÄÄ¿µÄµØ¡£ËùÒÔÓÃÓÚÊä³öDatagramPacketµÄ¹¹½¨Æ÷ÊÇ£º
DatagramPacket(buf, length, inetAddress, port)
ÕâÒ»´Î£¬buf£¨Ò»¸ö×Ö½ÚÊý×飩ÒѾ­°üº¬ÁËÎÒÃÇÏë·¢³öµÄÊý¾Ý¡£length¿ÉÒÔÊÇbufµÄ³¤¶È£¬µ«Ò²¿ÉÒÔ¸ü¶ÌһЩ£¬Òâζ×ÅÎÒÃÇÖ»Ïë·¢³öÄÇô¶àµÄ×Ö½Ú¡£ÁíÁ½¸ö²ÎÊý·Ö±ð´ú±íÊý¾Ý°üÒªµ½´ïµÄÒòÌØÍøµØÖ·ÒÔ¼°Ä¿±ê»úÆ÷µÄÒ»¸öÄ¿±ê¶Ë¿Ú£¨×¢ÊÍ¢Ú£©¡£

¢Ú£ºÎÒÃÇÈÏΪTCPºÍUDP¶Ë¿ÚÊÇÏ໥¶ÀÁ¢µÄ¡£Ò²¾ÍÊÇ˵£¬¿ÉÒÔÔÚ¶Ë¿Ú8080ͬʱÔËÐÐÒ»¸öTCPºÍUDP·þÎñ³ÌÐò£¬Á½ÕßÖ®¼ä²»»á²úÉú³åÍ»¡£

´ó¼ÒÒ²ÐíÈÏΪÁ½¸ö¹¹½¨Æ÷´´½¨ÁËÁ½¸ö²»Í¬µÄ¶ÔÏó£ºÒ»¸öÓÃÓÚ½ÓÊÕÊý¾Ý±¨£¬ÁíÒ»¸öÓÃÓÚ·¢ËÍËüÃÇ¡£Èç¹ûÊǺõÄÃæÏò¶ÔÏóµÄÉè¼Æ·½°¸£¬»á½¨Òé°ÑËüÃÇ´´½¨³ÉÁ½¸ö²»Í¬µÄÀ࣬¶ø²»ÊǾßÓв»Í¬µÄÐÐΪµÄÒ»¸öÀࣨ¾ßÌåÐÐΪȡ¾öÓÚÎÒÃÇÈçºÎ¹¹½¨¶ÔÏ󣩡£ÕâÒ²Ðí»á³ÉΪһ¸öÑÏÖØµÄÎÊÌ⣬µ«ÐÒÔ˵ÄÊÇ£¬DatagramPacketµÄʹÓÃÏ൱¼òµ¥£¬ÎÒÃDz»ÐèÒªÔÚÕâ¸öÎÊÌâÉϾÀ²ø²»Çå¡£ÕâÒ»µãÔÚÏÂÀýÀォÓкÜÃ÷È·µÄ˵Ã÷¡£¸ÃÀýÀàËÆÓÚÇ°ÃæÕë¶ÔTCPÌ×½Ó×ÖµÄMultiJabberServerºÍMultiJabberClientÀý×Ó¡£¶à¸ö¿Í»§¶¼»á½«Êý¾Ý±¨·¢¸ø·þÎñÆ÷£¬ºóÕ߻ὫÆä·´À¡»Ø×î³õ·¢³öÏûÏ¢µÄͬÑùµÄ¿Í»§¡£
Ϊ¼ò»¯´ÓÒ»¸öStringÀï´´½¨DatagramPacketµÄ¹¤×÷£¨»òÕß´ÓDatagramPacketÀï´´½¨String£©£¬Õâ¸öÀý×ÓÊ×ÏÈÓõ½ÁËÒ»¸ö¹¤¾ßÀ࣬ÃûΪDgram£º

844-845Ò³³ÌÐò

DgramµÄµÚÒ»¸ö·½·¨²ÉÓÃÒ»¸öString¡¢Ò»¸öInetAddressÒÔ¼°Ò»¸ö¶Ë¿ÚºÅ×÷Ϊ×Ô¼ºµÄ²ÎÊý£¬½«StringµÄÄÚÈݸ´ÖƵ½Ò»¸ö×Ö½Ú»º³åÇø£¬ÔÙ½«»º³åÇø´«µÝ½øÈëDatagramPacket¹¹½¨Æ÷£¬´Ó¶ø¹¹½¨Ò»¸öDatagramPacket¡£×¢Ò⻺³åÇø·ÖÅäʱµÄ"+1"¡ª¡ªÕâ¶Ô·ÀÖ¹½ØÎ²ÏÖÏóÊǷdz£ÖØÒªµÄ¡£StringµÄgetByte()·½·¨ÊôÓÚÒ»ÖÖÌØÊâ²Ù×÷£¬Äܽ«Ò»¸ö×Ö´®°üº¬µÄchar¸´ÖƽøÈëÒ»¸ö×Ö½Ú»º³å¡£¸Ã·½·¨ÏÖÔÚÒѱ»¡°·´¶Ô¡±Ê¹Óã»Java 1.1ÓÐÒ»¸ö¡°¸üºÃ¡±µÄ°ì·¨À´×öÕâ¸ö¹¤×÷£¬µ«ÔÚÕâÀïÈ´±»µ±×÷×¢ÊÍÆÁ±ÎµôÁË£¬ÒòΪËü»á½ØµôStringµÄ²¿·ÖÄÚÈÝ¡£ËùÒÔ¾¡¹ÜÎÒÃÇÔÚJava 1.1ϱàÒë¸Ã³ÌÐòʱ»áµÃµ½Ò»Ìõ¡°·´¶Ô¡±ÏûÏ¢£¬µ«ËüµÄÐÐΪÈÔÈ»ÊÇÕýÈ·ÎÞÎóµÄ£¨Õâ¸ö´íÎóÓ¦¸ÃÔÚÄã¶Áµ½ÕâÀïµÄʱºòÐÞÕýÁË£©¡£
Dgram.toString()·½·¨Í¬Ê±Õ¹Ê¾ÁËJava 1.0µÄ·½·¨ºÍJava 1.1µÄ·½·¨£¨Á½ÕßÊDz»Í¬µÄ£¬ÒòΪÓÐÒ»ÖÖÐÂÀàÐ͵ÄString¹¹½¨Æ÷£©¡£
ÏÂÃæÊÇÓÃÓÚÊý¾Ý±¨ÑÝʾµÄ·þÎñÆ÷´úÂ룺

845-846Ò³³ÌÐò

ChatterServer´´½¨ÁËÒ»¸öÓÃÀ´½ÓÊÕÏûÏ¢µÄDatagramSocket£¨Êý¾Ý±¨Ì×½Ó×Ö£©£¬¶ø²»ÊÇÔÚÎÒÃÇÿ´Î×¼±¸½ÓÊÕÒ»ÌõÐÂÏûϢʱ¶¼Ð½¨Ò»¸ö¡£Õâ¸öµ¥Ò»µÄDatagramSocket¿ÉÒÔÖØ¸´Ê¹Óá£ËüÓÐÒ»¸ö¶Ë¿ÚºÅ£¬ÒòΪÕâÊôÓÚ·þÎñÆ÷£¬¿Í»§±ØÐëÈ·ÇÐÖªµÀ×Ô¼º°ÑÊý¾Ý±¨·¢µ½ÄĸöµØÖ·¡£¾¡¹ÜÓÐÒ»¸ö¶Ë¿ÚºÅ£¬µ«Ã»ÓÐΪËü·ÖÅäÒòÌØÍøµØÖ·£¬ÒòΪËü¾ÍפÁôÔÚ¡°Õ⡱̨»úÆ÷ÄÚ£¬ËùÒÔÖªµÀ×Ô¼ºµÄÒòÌØÍøµØÖ·ÊÇʲô£¨Ä¿Ç°ÊÇĬÈϵÄlocalhost£©¡£ÔÚÎÞÏÞwhileÑ­»·ÖУ¬Ì×½Ó×Ö±»¸æÖª½ÓÊÕÊý¾Ý£¨receive()£©¡£È»ºóÔÝʱ¹ÒÆð£¬Ö±µ½Ò»¸öÊý¾Ý±¨³öÏÖ£¬ÔÙ°ÑËü·´À¡»ØÎÒÃÇÏ£ÍûµÄ½ÓÊÕÈË¡ª¡ªDatagramPacket dp¡ª¡ªÀïÃæ¡£Êý¾Ý°ü£¨Packet£©»á±»×ª»»³ÉÒ»¸ö×Ö´®£¬Í¬Ê±²åÈëµÄ»¹ÓÐÊý¾Ý°üµÄÆðÔ´ÒòÌØÍøµØÖ·¼°Ì×½Ó×Ö¡£ÕâЩÐÅÏ¢»áÏÔʾ³öÀ´£¬È»ºóÌí¼ÓÒ»¸ö¶îÍâµÄ×Ö´®£¬Ö¸³ö×Ô¼ºÒÑ´Ó·þÎñÆ÷·´À¡»ØÀ´ÁË¡£
´ó¼Ò¿ÉÄÜ»á¾õµÃÓеã¶ùÃÔ»ó¡£ÕýÈç´ó¼Ò»á¿´µ½µÄÄÇÑù£¬Ðí¶à²»Í¬µÄÒòÌØÍøµØÖ·ºÍ¶Ë¿ÚºÅ¶¼¿ÉÄÜÊÇÏûÏ¢µÄÆðÔ´µØ¡ª¡ª»»ÑÔÖ®£¬¿Í»§³ÌÐò¿ÉÄÜפÁôÔÚÈκÎһ̨»úÆ÷À¾ÍÕâÒ»´ÎÑÝʾÀ´Ëµ£¬ËüÃǶ¼×¤ÁôÔÚlocalhostÀµ«Ã¿¸ö¿Í»§Ê¹ÓõĶ˿ڱàºÅÊDz»Í¬µÄ£©¡£ÎªÁ˽«Ò»ÌõÏûÏ¢ËÍ»ØËüÕæÕýµÄʼ·¢¿Í»§£¬ÐèÒªÖªµÀÄǸö¿Í»§µÄÒòÌØÍøµØÖ·ÒÔ¼°¶Ë¿ÚºÅ¡£ÐÒÔ˵ÄÊÇ£¬ËùÓÐÕâЩ×ÊÁϾùÒѷdz£Öܵ½µØ·â×°µ½·¢³öÏûÏ¢µÄDatagramPacketÄÚ²¿£¬ËùÒÔÎÒÃÇÒª×öµÄÈ«²¿ÊÂÇé¾ÍÊÇÓÃgetAddress()ºÍgetPort()°ÑËüÃÇÈ¡³öÀ´¡£ÀûÓÃÕâЩ×ÊÁÏ£¬¿ÉÒÔ¹¹½¨DatagramPacket echo¡ª¡ªËüͨ¹ýÓë½ÓÊÕÓõÄÏàͬµÄÌ×½Ó×Ö·¢ËÍ»ØÀ´¡£³ý´ËÒÔÍ⣬һµ©Ì×½Ó×Ö·¢³öÊý¾Ý±¨£¬¾Í»áÌí¼Ó¡°Õ⡱̨»úÆ÷µÄÒòÌØÍøµØÖ·¼°¶Ë¿ÚÐÅÏ¢£¬ËùÒÔµ±¿Í»§½ÓÊÕÏûϢʱ£¬Ëü¿ÉÒÔÀûÓÃgetAddress()ºÍgetPort()Á˽âÊý¾Ý±¨À´×Ժδ¦¡£ÊÂʵÉÏ£¬getAddress()ºÍgetPort()Ψһ²»ÄܸæËßÎÒÃÇÊý¾Ý±¨À´×Ժ䦵ÄǰÌáÊÇ£ºÎÒÃÇ´´½¨Ò»¸ö´ý·¢Ë͵ÄÊý¾Ý±¨£¬²¢ÔÚÕýʽ·¢³ö֮ǰµ÷ÓÃÁËgetAddress()ºÍgetPort()¡£µ½Êý¾Ý±¨Õýʽ·¢Ë͵Äʱºò£¬Õą̂»úÆ÷µÄµØÖ·ÒÔ¼°¶Ë¿Ú²Å»áдÈëÊý¾Ý±¨¡£ËùÒÔÎÒÃǵõ½ÁËÔËÓÃÊý¾Ý±¨Ê±Ò»ÏîÖØÒªµÄÔ­Ôò£º²»±Ø¸ú×ÙÒ»ÌõÏûÏ¢µÄÀ´Ô´µØ£¡ÒòΪËü¿Ï¶¨±£´æÔÚÊý¾Ý±¨Àï¡£ÊÂʵÉÏ£¬¶Ô³ÌÐòÀ´Ëµ£¬×î¿É¿¿µÄ×ö·¨ÊÇÎÒÃDz»ÒªÊÔͼ¸ú×Ù£¬¶øÊÇÎÞÂÛÈçºÎ¶¼´ÓÄ¿±êÊý¾Ý±¨ÀïÌáÈ¡³öµØÖ·ÒÔ¼°¶Ë¿ÚÐÅÏ¢£¨¾ÍÏóÕâÀï×öµÄÄÇÑù£©¡£
Ϊ²âÊÔ·þÎñÆ÷µÄÔËתÊÇ·ñÕý³££¬ÏÂÃæÕâ³ÌÐò½«´´½¨´óÁ¿¿Í»§£¨Ị̈߳©£¬ËüÃǶ¼»á½«Êý¾Ý±¨°ü·¢¸ø·þÎñÆ÷£¬²¢µÈºò·þÎñÆ÷°ÑËüÃÇÔ­Ñù·´À¡»ØÀ´¡£

847-849Ò³³ÌÐò

ChatterClient±»´´½¨³ÉÒ»¸öỊ̈߳¨Thread£©£¬ËùÒÔ¿ÉÒÔÓöà¸ö¿Í»§À´¡°É§ÈÅ¡±·þÎñÆ÷¡£´ÓÖпÉÒÔ¿´µ½£¬ÓÃÓÚ½ÓÊÕµÄDatagramPacketºÍÓÃÓÚChatterServerµÄÄǸöÊÇÏàËÆµÄ¡£ÔÚ¹¹½¨Æ÷ÖУ¬´´½¨DatagramPacketʱûÓи½´øÈκβÎÊý£¨×Ô±äÁ¿£©£¬ÒòΪËü²»ÐèÒªÃ÷È·Ö¸³ö×Ô¼ºÎ»ÓÚÄĸöÌØ¶¨±àºÅµÄ¶Ë¿ÚÀï¡£ÓÃÓÚÕâ¸öÌ×½Ó×ÖµÄÒòÌØÍøµØÖ·½«³ÉΪ¡°Õą̂»úÆ÷¡±£¨±ÈÈçlocalhost£©£¬¶øÇÒ»á×Ô¶¯·ÖÅä¶Ë¿Ú±àºÅ£¬Õâ´ÓÊä³ö½á¹û¼´¿É¿´³ö¡£Í¬ÓÃÓÚ·þÎñÆ÷µÄÄǸöÒ»Ñù£¬Õâ¸öDatagramPacket½«Í¬Ê±ÓÃÓÚ·¢ËͺͽÓÊÕ¡£
hostAddressÊÇÎÒÃÇÏëÓë֮ͨÐŵÄÄÇ̨»úÆ÷µÄÒòÌØÍøµØÖ·¡£ÔÚ³ÌÐòÖУ¬Èç¹ûÐèÒª´´½¨Ò»¸ö×¼±¸´«³öÈ¥µÄDatagramPacket£¬ÄÇô±ØÐëÖªµÀÒ»¸ö׼ȷµÄÒòÌØÍøµØÖ·ºÍ¶Ë¿ÚºÅ¡£¿ÉÒԿ϶¨µÄÊÇ£¬Ö÷»ú±ØÐëλÓÚÒ»¸öÒÑÖªµÄµØÖ·ºÍ¶Ë¿ÚºÅÉÏ£¬Ê¹¿Í»§ÄÜÆô¶¯ÓëÖ÷»úµÄ¡°»á»°¡±¡£
ÿ¸öÏ̶߳¼ÓÐ×Ô¼º¶ÀÒ»ÎÞ¶þµÄ±êʶºÅ£¨¾¡¹Ü×Ô¶¯·ÖÅ䏸Ï̵߳Ķ˿ںÅÊÇÒ²»áÌṩһ¸öΨһµÄ±êʶ·û£©¡£ÔÚrun()ÖУ¬ÎÒÃÇ´´½¨ÁËÒ»¸öStringÏûÏ¢£¬ÆäÖаüº¬ÁËÏ̵߳ıêʶ±àºÅÒÔ¼°¸ÃÏß³Ì×¼±¸·¢Ë͵ÄÏûÏ¢±àºÅ¡£ÎÒÃÇÓÃÕâ¸ö×Ö´®´´½¨Ò»¸öÊý¾Ý±¨£¬·¢µ½Ö÷»úÉϵÄÖ¸¶¨µØÖ·£»¶Ë¿Ú±àºÅÔòÖ±½Ó´ÓChatterServerÄÚµÄÒ»¸ö³£ÊýÈ¡µÃ¡£Ò»µ©ÏûÏ¢·¢³ö£¬receive()¾Í»áÔÝʱ±»¡°¶ÂÈû¡±ÆðÀ´£¬Ö±µ½·þÎñÆ÷»Ø¸´ÁËÕâÌõÏûÏ¢¡£ÓëÏûÏ¢¸½ÔÚÒ»ÆðµÄËùÓÐÐÅϢʹÎÒÃÇÖªµÀ»Øµ½Õâ¸öÌØ¶¨Ï̵߳Ķ«Î÷ÕýÊÇ´Óʼ·¢ÏûÏ¢ÖÐͶµÝ³öÈ¥µÄ¡£ÔÚÕâ¸öÀý×ÓÖУ¬¾¡¹ÜÊÇÒ»ÖÖ¡°²»¿É¿¿¡±Ð­Ò飬µ«ÈÔÈ»Äܹ»¼ì²éÊý¾Ý±¨ÊÇ·ñµ½È¥¹ýÁËËüÃǸÃÈ¥µÄµØ·½£¨ÕâÔÚlocalhostºÍLAN»·¾³ÖÐÊdzÉÁ¢µÄ£¬µ«ÔڷDZ¾µØÁ¬½ÓÖÐÈ´¿ÉÄܳöÏÖһЩ´íÎ󣩡£
ÔËÐиóÌÐòʱ£¬´ó¼Ò»á·¢ÏÖÿ¸öÏ̶߳¼»á½áÊø¡£ÕâÒâζ×Å·¢Ë͵½·þÎñÆ÷µÄÿ¸öÊý¾Ý±¨°ü¶¼»á»Ø×ª£¬²¢·´À¡»ØÕýÈ·µÄ½ÓÊÕÕß¡£Èç¹û²»ÊÇÕâÑù£¬Ò»¸ö»ò¸ü¶àµÄÏ߳̾ͻá¹ÒÆð²¢½øÈë¡°¶ÂÈû¡±×´Ì¬£¬Ö±µ½ËüÃǵÄÊäÈë±»ÏÔ¶³öÀ´¡£
´ó¼Ò»òÐíÈÏΪ½«Îļþ´Óһ̨»úÆ÷´«µ½Áíһ̨µÄΨһÕýÈ··½Ê½ÊÇͨ¹ýTCPÌ×½Ó×Ö£¬ÒòΪËüÃÇÊÇ¡°¿É¿¿¡±µÄ¡£È»¶ø£¬ÓÉÓÚÊý¾Ý±¨µÄËٶȷdz£¿ì£¬ËùÒÔËü²ÅÊÇÒ»ÖÖ¸üºÃµÄÑ¡Ôñ¡£ÎÒÃÇÖ»Ð轫Îļþ·Ö¸î³É¶à¸öÊý¾Ý±¨£¬²¢ÎªÃ¿¸ö°ü±àºÅ¡£½ÓÊÕ»úÆ÷»áÈ¡µÃÕâЩÊý¾Ý°ü£¬²¢ÖØÐ¡°×é×°¡±ËüÃÇ£»Ò»¸ö¡°±êÌâ°ü¡±»á¸æËß»úÆ÷Ó¦¸Ã½ÓÊÕ¶àÉÙ¸ö°ü£¬ÒÔ¼°×é×°ËùÐèµÄÁíÒ»Ð©ÖØÒªÐÅÏ¢¡£Èç¹ûÒ»¸ö°üÔÚ°ë·¡°×ß¶ª¡±ÁË£¬½ÓÊÕ»úÆ÷»á·µ»ØÒ»¸öÊý¾Ý±¨£¬¸æËß·¢ËÍÕßÖØ´«¡£

15.5 Ò»¸öWebÓ¦ÓÃ
ÏÖÔÚÈÃÎÒÃÇÏëÏëÈçºÎ´´½¨Ò»¸öÓ¦Óã¬ÁîÆäÔÚÕæÊµµÄWeb»·¾³ÖÐÔËÐУ¬Ëü½«°ÑJavaµÄÓÅÊÆ±íÏÖµÃÁÜÀ쾡Ö¡£Õâ¸öÓ¦ÓõÄÒ»²¿·ÖÊÇÔÚWeb·þÎñÆ÷ÉÏÔËÐеÄÒ»¸öJava³ÌÐò£¬ÁíÒ»²¿·ÖÔòÊÇÒ»¸ö¡°³ÌÐòƬ¡±»ò¡°Ð¡Ó¦ÓóÌÐò¡±£¨Applet£©£¬´Ó·þÎñÆ÷ÏÂÔØÖÁä¯ÀÀÆ÷£¨¼´¡°¿Í»§¡±£©¡£Õâ¸ö³ÌÐòƬ´ÓÓû§ÄÇÀïÊÕ¼¯ÐÅÏ¢£¬²¢½«Æä´«»ØWeb·þÎñÆ÷ÉÏÔËÐеÄÓ¦ÓóÌÐò¡£³ÌÐòµÄÈÎÎñ·Ç³£¼òµ¥£º³ÌÐòƬ»áѯÎÊÓû§µÄE-mailµØÖ·£¬²¢ÔÚÑéÖ¤Õâ¸öµØÖ·ºÏ¸ñºó£¨Ã»Óаüº¬¿Õ¸ñ£¬¶øÇÒÓÐÒ»¸ö@·ûºÅ£©£¬½«¸ÃE-mail·¢Ë͸øWeb·þÎñÆ÷¡£·þÎñÆ÷ÉÏÔËÐеijÌÐòÔò»á²¶»ñ´«»ØµÄÊý¾Ý£¬¼ì²éÒ»¸ö°üº¬ÁËËùÓÐE-mailµØÖ·µÄÊý¾ÝÎļþ¡£Èç¹ûÄǸöµØÖ·ÒѰüº¬ÔÚÎļþÀÔòÏòä¯ÀÀÆ÷·´À¡Ò»ÌõÏûÏ¢£¬ËµÃ÷ÕâÒ»Çé¿ö¡£¸ÃÏûÏ¢ÓɳÌÐòƬ¸ºÔðÏÔʾ¡£ÈôÊÇÒ»¸öеØÖ·£¬Ôò½«ÆäÖÃÈëÁÐ±í£¬²¢Í¨Öª³ÌÐòƬÒѳɹ¦Ìí¼ÓÁ˵ç×Óº¯¼þµØÖ·¡£
Èô²ÉÓô«Í³·½Ê½À´½â¾öÕâ¸öÎÊÌ⣬ÎÒÃÇÒª´´½¨Ò»¸ö°üº¬ÁËÎı¾×ֶμ°Ò»¸ö¡°Ìá½»¡±£¨Submit£©°´Å¥µÄHTMLÒ³¡£Óû§¿ÉÔÚÎı¾×Ö¶ÎÀï¼üÈë×Ô¼ºÏ²»¶µÄÈκÎÄÚÈÝ£¬²¢ºÁÎÞ×è°­µØÌá½»¸ø·þÎñÆ÷£¨ÔÚ¿Í»§¶Ë²»½øÐÐÈκμì²é£©¡£Ìá½»Êý¾ÝµÄͬʱ£¬WebÒ³Ò²»á¸æËß·þÎñÆ÷Ó¦¶ÔÊý¾Ý²ÉȡʲôÑùµÄ²Ù×÷¡ª¡ªÖª»á¡°Í¨ÓÃÍø¹Ø½Ó¿Ú¡±£¨CGI£©³ÌÐò£¬ÊÕµ½ÕâЩÊý¾ÝºóÁ¢¼´ÔËÐзþÎñÆ÷¡£ÕâÖÖCGI³ÌÐòͨ³£ÊÇÓÃPerl»òCдµÄ£¨ÓÐʱҲÓÃC++£¬µ«ÒªÇó·þÎñÆ÷Ö§³Ö£©£¬¶øÇÒ±ØÐëÄÜ¿ØÖÆÒ»ÇпÉÄܳöÏÖµÄÇé¿ö¡£ËüÊ×ÏÈ»á¼ì²éÊý¾Ý£¬ÅжÏÊÇ·ñ²ÉÓÃÁËÕýÈ·µÄ¸ñʽ¡£Èô´ð°¸ÊÇ·ñ¶¨µÄ£¬ÔòCGI³ÌÐò±ØÐë´´½¨Ò»¸öHTMLÒ³£¬¶ÔÓöµ½µÄÎÊÌâ½øÐÐÃèÊö¡£Õâ¸öÒ³»áת½»¸ø·þÎñÆ÷£¬ÔÙÓÉ·þÎñÆ÷·´À¡»ØÓû§¡£Óû§¿´µ½³ö´íÌáʾºó£¬±ØÐëÔÙÊÔÒ»±éÌá½»£¬Ö±µ½Í¨¹ýΪֹ¡£ÈôÊý¾ÝÕýÈ·£¬CGI³ÌÐò»á´ò¿ªÊý¾ÝÎļþ£¬ÒªÃ´°Ñµç×Óº¯¼þµØÖ·¼ÓÈëÎļþ£¬ÒªÃ´Ö¸³ö¸ÃµØÖ·ÒÑÔÚÊý¾ÝÎļþÀïÁË¡£ÎÞÂÛÄÄÖÖÇé¿ö£¬¶¼±ØÐë¸ñʽ»¯Ò»¸öÇ¡µ±µÄHTMLÒ³£¬ÒÔ±ã·þÎñÆ÷·µ»Ø¸øÓû§¡£
×÷ΪJava³ÌÐòÔ±£¬ÉÏÊö½â¾öÎÊÌâµÄ·½·¨ÏԵ÷dz£±¿×¾¡£¶øÇÒºÜ×ÔÈ»µØ£¬ÎÒÃÇÏ£ÍûÒ»Çй¤×÷¶¼ÓÃJavaÍê³É¡£Ê×ÏÈ£¬ÎÒÃÇ»áÓÃÒ»¸öJava³ÌÐòƬ¸ºÔð¿Í»§¶ËµÄÊý¾ÝÓÐЧÐÔУÑ飬±ÜÃâÊý¾ÝÔÚ·þÎñÆ÷ºÍ¿Í»§Ö®¼ä´«À´´«È¥£¬ÀË·Ñʱ¼äºÍ´ø¿í£¬Í¬Ê±¼õÇá·þÎñÆ÷¶îÍâ¹¹½¨HTMLÒ³µÄ¸ºµ£¡£È»ºóÌø¹ýPerl CGI½Å±¾£¬»»³ÉÔÚ·þÎñÆ÷ÉÏÔËÐÐÒ»¸öJavaÓ¦Óá£ÊÂʵÉÏ£¬ÎÒÃÇÔÚÕâ¶ùÒÑÍêÈ«Ìø¹ýÁËWeb·þÎñÆ÷£¬½ö½öÐèÒª´Ó³ÌÐòƬµ½·þÎñÆ÷ÉÏÔËÐеÄJavaÓ¦ÓÃÖ®¼ä½¨Á¢Ò»¸öÁ¬½Ó¼´¿É¡£
ÕýÈç´ó¼Ò²»¾Ã¾Í»áÌåÑéµ½µÄÄÇÑù£¬¾¡¹Ü¿´ÆðÀ´·Ç³£¼òµ¥£¬µ«Êµ¼ÊÉÏÓÐһЩÒâÏë²»µ½µÄÎÊÌâʹ¾ÖÃæÏÔµÃÉÔ΢ÓÐЩ¸´ÔÓ¡£ÓÃJava 1.1д³ÌÐòƬÊÇ×îÀíÏëµÄ£¬µ«Êµ¼ÊÉÏÈ´¾­³£Ðв»Í¨¡£µ½±¾Êéд×÷µÄʱºò£¬ÓµÓÐJava 1.1ÄÜÁ¦µÄä¯ÀÀÆ÷ÈÔΪÊý²»¶à£¬¶øÇÒ¼´Ê¹ÕâÀàä¯ÀÀÆ÷ÏÖÔڷdz£Á÷ÐУ¬ÈÔÐ迼ÂÇÕÕ¹ËÒ»ÏÂÄÇЩÉý¼¶»ºÂýµÄÈË¡£ËùÒÔ´Ó°²È«µÄ½Ç¶È¿´£¬³ÌÐòƬ´úÂë×îºÃÖ»ÓÃJava 1.0±àд¡£»ùÓÚÕâһǰÌᣬÎÒÃDz»ÄÜÓÃJARÎļþÀ´ºÏ²¢£¨Ñ¹Ëõ£©³ÌÐòƬÖеÄ.classÎļþ¡£ËùÒÔ£¬ÎÒÃÇÓ¦¾¡¿ÉÄܼõÉÙ.classÎļþµÄʹÓÃÊýÁ¿£¬ÒÔËõ¶ÌÏÂÔØÊ±¼ä¡£
ºÃÁË£¬ÔÙÀ´ËµËµÎÒÓõÄWeb·þÎñÆ÷£¨Ð´Õâ¸öʾ·¶³ÌÐòʱÓõľÍÊÇËü£©¡£Ëüȷʵ֧³ÖJava£¬µ«½öÏÞÓÚJava 1.0£¡ËùÒÔ·þÎñÆ÷Ó¦ÓÃÒ²±ØÐëÓÃJava 1.0±àд¡£

15.5.1 ·þÎñÆ÷Ó¦ÓÃ
ÏÖÔÚÌÖÂÛһϷþÎñÆ÷Ó¦Ó㨳ÌÐò£©µÄÎÊÌ⣬ÎÒ°ÑËü½Ð×÷NameCollecor£¨Ãû×ÖÊÕ¼¯Æ÷£©¡£¼ÙÈç¶àÃûÓû§Í¬Ê±³¢ÊÔÌá½»ËûÃǵÄE-mailµØÖ·£¬ÄÇô»á·¢ÉúʲôÇé¿öÄØ£¿ÈôNameCollectorʹÓÃTCP/IPÌ×½Ó×Ö£¬ÄÇô±ØÐëÔËÓÃÔçÏȽéÉܵĶàÏ̻߳úÖÆÀ´ÊµÏÖ¶Ô¶à¸ö¿Í»§µÄ²¢·¢¿ØÖÆ¡£µ«ËùÓÐÕâЩÏ̶߳¼ÊÔͼ°ÑÊý¾Ýдµ½Í¬Ò»¸öÎļþÀÆäÖб£´æÁËËùÓÐE-mailµØÖ·¡£Õâ±ãÒªÇóÎÒÃÇÉèÁ¢Ò»ÖÖËø¶¨»úÖÆ£¬±£Ö¤¶à¸öÏ̲߳»»áͬʱ·ÃÎÊÄǸöÎļþ¡£Ò»¸ö¡°ÐźŻú¡±¿ÉÔÚÕâÀï°ïÖúÎÒÃǴﵽĿµÄ£¬µ«»òÐí»¹ÓÐÒ»ÖÖ¸ü¼òµ¥µÄ·½Ê½¡£
Èç¹ûÎÒÃÇ»»ÓÃÊý¾Ý±¨£¬¾Í²»±ØÊ¹ÓöàÏß³ÌÁË¡£Óõ¥¸öÊý¾Ý±¨¼´¿É¡°ÕìÌý¡±½øÈëµÄËùÓÐÊý¾Ý±¨¡£Ò»µ©¼àÊÓµ½ÓнøÈëµÄÏûÏ¢£¬³ÌÐò¾Í»á½øÐÐÊʵ±µÄ´¦Àí£¬²¢½«´ð¸´Êý¾Ý×÷Ϊһ¸öÊý¾Ý±¨´«»ØÔ­ÏÈ·¢³öÇëÇóµÄÄÇÃû½ÓÊÕÕß¡£ÈôÊý¾Ý±¨°ë·É϶ªÊ§ÁË£¬ÔòÓû§»á×¢Ò⵽ûÓдð¸´Êý¾Ý´«»Ø£¬ËùÒÔ¿ÉÒÔÖØÐÂÌá½»ÇëÇó¡£
·þÎñÆ÷Ó¦ÓÃÊÕµ½Ò»¸öÊý¾Ý±¨£¬²¢¶ÔËü½øÐнâ¶ÁµÄʱºò£¬±ØÐëÌáÈ¡³öÆäÖеĵç×Óº¯¼þµØÖ·£¬²¢¼ì²é±¾»ú±£´æµÄÊý¾ÝÎļþ£¬¿´¿´ÀïÃæÊÇ·ñÒѾ­°üº¬ÁËÄǸöµØÖ·£¨Èç¹ûûÓУ¬ÔòÌí¼ÓÖ®£©¡£ËùÒÔÎÒÃÇÏÖÔÚÓöµ½ÁËÒ»¸öеÄÎÊÌâ¡£Java 1.0ËÆºõûÓÐ×ã¹»µÄÄÜÁ¦À´·½±ãµØ´¦Àí°üº¬Á˵ç×Óº¯¼þµØÖ·µÄÎļþ£¨Java 1.1Ôò²»È»£©¡£µ«ÊÇ£¬ÓÃCÇáÒ׾ͿÉÒÔ½â¾öÕâ¸öÎÊÌâ¡£Òò´Ë£¬ÎÒÃÇÔÚÕâ¶ùÓлú»áѧϰ½«Ò»¸ö·ÇJava³ÌÐòͬJava³ÌÐòÁ¬½ÓµÄ×î¼ò±ã·½Ê½¡£³ÌÐòʹÓõÄRuntime¶ÔÏó°üº¬ÁËÒ»¸öÃûΪexec()µÄ·½·¨£¬Ëü»á¶ÀÁ¢»úÆ÷ÉÏÒ»¸ö¶ÀÁ¢µÄ³ÌÐò£¬²¢·µ»ØÒ»¸öProcess£¨½ø³Ì£©¶ÔÏó¡£ÎÒÃÇ¿ÉÒÔÈ¡µÃÒ»¸öOutputStream£¬ËüͬÕâ¸öµ¥¶À³ÌÐòµÄ±ê×¼ÊäÈëÁ¬½ÓÔÚÒ»Æð£»²¢È¡µÃÒ»¸öInputStream£¬ËüÔòͬ±ê×¼Êä³öÁ¬½Óµ½Ò»Æð¡£Òª×öµÄÈ«²¿ÊÂÇé¾ÍÊÇÓÃÈκÎÓïÑÔдһ¸ö³ÌÐò£¬Ö»ÒªËüÄÜ´Ó±ê×¼ÊäÈëÖÐÈ¡µÃ×Ô¼ºµÄÊäÈëÊý¾Ý£¬²¢½«Êä³ö½á¹ûдÈë±ê×¼Êä³ö¼´¿É¡£Èç¹ûÓÐЩÎÊÌâ²»ÄÜÓÃJava¼ò±ãÓë¿ìËٵؽâ¾ö£¨»òÕßÏëÀûÓÃÔ­ÓдúÂ룬²»Ïë¸Äд£©£¬¾Í¿ÉÒÔ¿¼ÂDzÉÓÃÕâÖÖ·½·¨¡£Òà¿ÉʹÓÃJavaµÄ¡°¹ÌÓз½·¨¡±£¨Native Method£©£¬µ«ÄÇÒªÇó¸ü¶àµÄ¼¼ÇÉ£¬´ó¼Ò¿ÉÒԲο¼Ò»Ï¸½Â¼A¡£

1. C³ÌÐò
Õâ¸ö·ÇJavaÓ¦ÓÃÊÇÓÃCд³É£¬ÒòΪJava²»ÊʺÏ×÷CGI±à³Ì£»ÆðÂëÆô¶¯µÄʱ¼ä²»ÄÜÈÃÈËÂúÒâ¡£ËüµÄÈÎÎñÊǹÜÀíµç×Óº¯¼þ£¨E-mail£©µØÖ·µÄÒ»¸öÁÐ±í¡£±ê×¼ÊäÈë»á½ÓÊÜÒ»¸öE-mailµØÖ·£¬³ÌÐò»á¼ì²éÁбíÖеÄÃû×Ö£¬ÅжÏÊÇ·ñ´æÔÚÄǸöµØÖ·¡£Èô²»´æÔÚ£¬¾Í½«Æä¼ÓÈ룬²¢±¨¸æ²Ù×÷³É¹¦¡£µ«¼ÙÈçÃû×ÖÒÑÔÚÁбíÀïÁË£¬¾ÍÐèÒªÖ¸³öÕâÒ»µã£¬±ÜÃâÖØ¸´¼ÓÈë¡£´ó¼Ò²»±Øµ£ÐÄ×Ô¼º²»ÄÜÍêÈ«Àí½âÏÂÁдúÂëµÄº¬Òå¡£Ëü½ö½öÊÇÒ»¸öÑÝʾ³ÌÐò£¬¸æËßÄãÈçºÎÓÃÆäËûÓïÑÔдһ¸ö³ÌÐò£¬²¢´ÓJavaÖе÷ÓÃËü¡£ÔÚÕâÀï¾ßÌå²ÉÓúÎÖÖÓïÑÔ²¢²»ÖØÒª£¬Ö»ÒªÄܹ»´Ó±ê×¼ÊäÈëÖжÁÈ¡Êý¾Ý£¬²¢ÄÜдÈë±ê×¼Êä³ö¼´¿É¡£

852-853Ò³³ÌÐò

¸Ã³ÌÐò¼ÙÉèC±àÒëÆ÷ÄܽÓÊÜ'//'ÑùʽעÊÍ£¨Ðí¶à±àÒëÆ÷¶¼ÄÜ£¬Òà¿É»»ÓÃÒ»¸öC++±àÒëÆ÷À´±àÒëÕâ¸ö³ÌÐò£©¡£Èç¹ûÄãµÄ±àÒëÆ÷²»ÄܽÓÊÜ£¬Ôò¼òµ¥µØ½«ÄÇЩעÊÍɾµô¼´¿É¡£
ÎļþÖеĵÚÒ»¸öº¯Êý¼ì²éÎÒÃÇ×÷ΪµÚ¶þ¸ö²ÎÊý£¨Ö¸ÏòÒ»¸öcharµÄÖ¸Õ룩´«µÝ¸øËüµÄÃû×ÖÊÇ·ñÒÑÔÚÎļþÖС£ÔÚÕâ¶ù£¬ÎÒÃǽ«Îļþ×÷Ϊһ¸öFILEÖ¸Õë´«µÝ£¬ËüÖ¸ÏòÒ»¸öÒÑ´ò¿ªµÄÎļþ£¨ÎļþÊÇÔÚmain()Öдò¿ªµÄ£©¡£º¯Êýfseek()ÔÚÎļþÖбéÀú£»ÎÒÃÇÔÚÕâ¶ùÓÃËüÒÆÖÁÎļþ¿ªÍ·¡£fgets()´ÓÎļþlistÖжÁÈëÒ»ÐÐÄÚÈÝ£¬²¢½«ÆäÖÃÈ뻺³åÇølbuf¡ª¡ª²»»á³¬¹ý¹æ¶¨µÄ»º³åÇø³¤¶ÈBSIZE¡£ËùÓÐÕâЩ¹¤×÷¶¼ÔÚÒ»¸öwhileÑ­»·ÖнøÐУ¬ËùÒÔÎļþÖеÄÿһÐж¼»á¶ÁÈë¡£½ÓÏÂÀ´£¬ÓÃstrchr()ÕÒµ½ÐÂÐÐ×Ö·û£¬ÒԱ㽫Æäɾµô¡£×îºó£¬ÓÃstrcmp()±È½ÏÎÒÃÇ´«µÝ¸øº¯ÊýµÄÃû×ÖÓëÎļþÖеĵ±Ç°ÐС£ÈôÕÒµ½Ò»ÖµÄÄÚÈÝ£¬strcmp()»á·µ»Ø0¡£º¯ÊýËæºó»áÍ˳ö£¬²¢·µ»ØÒ»¸ö1£¬Ö¸³ö¸ÃÃû×ÖÒѾ­ÔÚÎļþÀïÁË£¨×¢ÒâÕâ¸öº¯ÊýÕÒµ½Ïà·ûÄÚÈݺó»áÁ¢¼´·µ»Ø£¬²»»á°Ñʱ¼äÀË·ÑÔÚ¼ì²éÁбíÊ£ÓàÄÚÈݵÄÉÏÃæ£©¡£Èç¹ûÕÒ±éÁÐ±í¶¼Ã»Óз¢ÏÖÏà·ûµÄÄÚÈÝ£¬Ôòº¯Êý·µ»Ø0¡£
ÔÚmain()ÖУ¬ÎÒÃÇÓÃfopen()´ò¿ªÎļþ¡£µÚÒ»¸ö²ÎÊýÊÇÎļþÃû£¬µÚ¶þ¸öÊÇ´ò¿ªÎļþµÄ·½Ê½£»a+±íʾ¡°×·¼Ó¡±£¬ÒÔ¼°¡°´ò¿ª¡±£¨»ò¡°´´½¨¡±£¬¼ÙÈôÎļþÉв»´æÔÚ£©£¬ÒԱ㵽ÎļþµÄĩβ½øÐиüС£fopen()º¯Êý·µ»ØµÄÊÇÒ»¸öFILEÖ¸Õ룻ÈôΪ0£¬±íʾ´ò¿ª²Ù×÷ʧ°Ü¡£´ËʱÐèÒªÓÃperror()´òÓ¡Ò»Ìõ³ö´íÌáʾÏûÏ¢£¬²¢ÓÃexit()ÖÐÖ¹³ÌÐòÔËÐС£
Èç¹ûÎļþ³É¹¦´ò¿ª£¬³ÌÐò¾Í»á½øÈëÒ»¸öÎÞÏÞÑ­»·¡£µ÷ÓÃgets(buf)µÄº¯Êý»á´Ó±ê×¼ÊäÈëÖÐÈ¡³öÒ»ÐУ¨¼Çס±ê×¼ÊäÈë»áÓëJava³ÌÐòÁ¬½Óµ½Ò»Æð£©£¬²¢½«ÆäÖÃÈ뻺³åÇøbufÖС£»º³åÇøµÄÄÚÈÝËæºó»á¼òµ¥µØ´«µÝ¸øalreadyInList()º¯Êý£¬ÈçÄÚÈÝÒÑÔÚÁбíÖУ¬printf()¾Í»á½«ÄÇÌõÏûÏ¢·¢¸ø±ê×¼Êä³ö£¨Java³ÌÐòÕýÔÚ¼àÊÓËü£©¡£fflush()ÓÃÓÚ¶ÔÊä³ö»º³åÇø½øÐÐˢС£
Èç¹ûÃû×Ö²»ÔÚÁбíÖУ¬¾ÍÓÃfseek()ÒÆµ½Áбíĩ⣬²¢ÓÃfprintf()½«Ãû×Ö¡°´òÓ¡¡±µ½Áбíĩβ¡£Ëæºó£¬ÓÃprintf()Ö¸³öÃû×ÖÒѳɹ¦¼ÓÈëÁÐ±í£¨Í¬ÑùÐèҪˢбê×¼Êä³ö£©£¬ÎÞÏÞÑ­»··µ»Ø£¬¼ÌÐøµÈºòÒ»¸öÐÂÃû×ֵĽøÈë¡£
¼Çסһ°ã²»ÄÜÏÈÔÚ×Ô¼ºµÄ¼ÆËã»úÉϱàÒë´Ë³ÌÐò£¬ÔٰѱàÒëºÃµÄÄÚÈÝÉÏÔØµ½Web·þÎñÆ÷£¬ÒòΪÄÇ̨»úÆ÷ʹÓõĿÉÄÜÊDz»Í¬ÀàµÄ´¦ÀíÆ÷ºÍ²Ù×÷ϵͳ¡£ÀýÈ磬ÎÒµÄWeb·þÎñÆ÷°²×°µÄÊÇIntelµÄCPU£¬µ«²Ù×÷ϵͳÊÇLinux£¬ËùÒÔ±ØÐëÏÈÏÂÔØÔ´Â룬ÔÙÓÃÔ¶³ÌÃüÁͨ¹ýtelnet£©Ö¸»ÓLinux×Ô´øµÄC±àÒëÆ÷£¬ÁîÆäÔÚ·þÎñÆ÷¶Ë±àÒëºÃ³ÌÐò¡£

2. Java³ÌÐò
Õâ¸ö³ÌÐòÏÈÆô¶¯ÉÏÊöµÄC³ÌÐò£¬ÔÙ½¨Á¢±ØÒªµÄÁ¬½Ó£¬ÒÔ±ãͬËü¡°½»Ì¸¡±¡£Ëæºó£¬Ëü´´½¨Ò»¸öÊý¾Ý±¨Ì×½Ó×Ö£¬ÓÃËü¡°¼àÊÓ¡±»òÕß¡°ÕìÌý¡±À´×Ô³ÌÐòƬµÄÊý¾Ý±¨°ü¡£

854-956Ò³³ÌÐò

NameCollectorÖеĵÚÒ»¸ö¶¨ÒåÓ¦¸ÃÊÇ´ó¼ÒËùÊìϤµÄ£ºÑ¡¶¨¶Ë¿Ú£¬´´½¨Ò»¸öÊý¾Ý±¨°ü£¬È»ºó´´½¨Ö¸ÏòÒ»¸öDatagramSocketµÄ¾ä±ú¡£½ÓÏÂÀ´µÄÈý¸ö¶¨Ò帺ÔðÓëC³ÌÐòµÄÁ¬½Ó£ºÒ»¸öProcess¶ÔÏóÊÇC³ÌÐòÓÉJava³ÌÐòÆô¶¯Ö®ºó·µ»ØµÄ£¬¶øÇÒÄǸöProcess¶ÔÏó²úÉúÁËInputStreamºÍOutputStream£¬·Ö±ð´ú±íC³ÌÐòµÄ±ê×¼Êä³öºÍ±ê×¼ÊäÈë¡£ºÍJava IOÒ»Ñù£¬ËüÃÇÀíËùµ±È»µØÐèÒª¡°·â×°¡±ÆðÀ´£¬ËùÒÔÎÒÃÇ×îºóµÃµ½µÄÊÇÒ»¸öPrintStreamºÍDataInputStream¡£
Õâ¸ö³ÌÐòµÄËùÓй¤×÷¶¼ÊÇÔÚ¹¹½¨Æ÷ÄÚ½øÐеġ£ÎªÆô¶¯C³ÌÐò£¬ÐèҪȡµÃµ±Ç°µÄRuntime¶ÔÏó¡£ÎÒÃÇÓÃËüµ÷ÓÃexec()£¬ÔÙÓɺóÕß·µ»ØProcess¶ÔÏó¡£ÔÚProcess¶ÔÏóÖУ¬´ó¼Ò¿É¿´µ½Í¨¹ýÒ»¼òµ¥µÄµ÷Óü´¿ÉÉú³ÉÊý¾ÝÁ÷£ºgetOutputStream()ºÍgetInputStream()¡£´ÓÕâ¸öʱºò¿ªÊ¼£¬ÎÒÃÇÐèÒª¿¼ÂǵÄÈ«²¿ÊÂÇé¾ÍÊǽ«Êý¾Ý´«¸øÊý¾ÝÁ÷nameList£¬²¢´ÓaddResultÖÐÈ¡µÃ½á¹û¡£
ºÍÍù³£Ò»Ñù£¬ÎÒÃǽ«DatagramSocketͬһ¸ö¶Ë¿ÚÁ¬½Óµ½Ò»Æð¡£ÔÚÎÞÏÞwhileÑ­»·ÖУ¬³ÌÐò»áµ÷ÓÃreceive()¡ª¡ª³ý·ÇÒ»¸öÊý¾Ý±¨µ½À´£¬·ñÔòreceive()»áÒ»Æð´¦ÓÚ¡°¶ÂÈû¡±×´Ì¬¡£Êý¾Ý±¨³öÏÖÒÔºó£¬ËüµÄÄÚÈÝ»áÌáÈ¡µ½String rcvdÀï¡£ÎÒÃÇÊ×ÏȽ«¸Ã×Ö´®Á½Í·µÄ¿Õ¸ñÌÞ³ý£¨trim£©£¬ÔÙ½«Æä·¢¸øC³ÌÐò¡£ÈçÏÂËùʾ£º
nameList.println(rcvd.trim());
Ö®ËùÒÔÄÜÕâÑù±àÂ룬ÊÇÒòΪJavaµÄexec()ÔÊÐíÎÒÃÇ·ÃÎÊÈκοÉÖ´ÐÐÄ£¿é£¬Ö»ÒªËüÄÜ´Ó±ê×¼ÊäÈëÖжÁ£¬²¢ÄÜÏò±ê×¼Êä³öÖÐд¡£»¹ÓÐÁíһЩ·½Ê½¿ÉÓë·ÇJava´úÂë¡°½»Ì¸¡±£¬Õ⽫ÔÚ¸½Â¼AÖÐÌÖÂÛ¡£
´ÓC³ÌÐòÖв¶»ñ½á¹û¾ÍÏÔµÃÉÔ΢Â鷳һЩ¡£ÎÒÃDZØÐëµ÷ÓÃread()£¬²¢Ìṩһ¸ö»º³åÇø£¬ÒԱ㱣´æ½á¹û¡£read()µÄ·µ»ØÖµÊÇÀ´×ÔC³ÌÐòµÄ×Ö½ÚÊý¡£ÈôÕâ¸öֵΪ-1£¬Òâζ×Åij¸öµØ·½³öÏÖÁËÎÊÌâ¡£·ñÔò£¬ÎÒÃǾͽ«resultBuf£¨½á¹û»º³åÇø£©×ª»»³ÉÒ»¸ö×Ö´®£¬È»ºóͬÑùÇå³ý¶àÓàµÄ¿Õ¸ñ¡£Ëæºó£¬Õâ¸ö×Ö´®»áÏóÍù³£Ò»Ñù½øÈëÒ»¸öDatagramPacket£¬²¢´«»Øµ±³õ·¢³öÇëÇóµÄÄǸöͬÑùµÄµØÖ·¡£×¢Òâ·¢ËÍ·½µÄµØÖ·Ò²ÊÇÎÒÃǽÓÊÕµ½µÄDatagramPacketµÄÒ»²¿·Ö¡£
¼Çס¾¡¹ÜC³ÌÐò±ØÐëÔÚWeb·þÎñÆ÷ÉϱàÒ룬µ«Java³ÌÐòµÄ±àÒ볡Ëù¿ÉÒÔÊÇÈÎÒâµÄ¡£ÕâÊÇÓÉÓÚ²»¹ÜʹÓõÄÊÇʲôӲ¼þƽ̨ºÍ²Ù×÷ϵͳ£¬±àÒëµÃµ½µÄ×Ö½ÚÂë¶¼ÊÇÒ»ÑùµÄ¡£¾Í¾ÍÊÇJavaµÄ¡°¿çƽ̨¡±¼æÈÝÄÜÁ¦¡£

15.5.2 NameSender³ÌÐòƬ
ÕýÈçÔçÏÈÖ¸³öµÄÄÇÑù£¬³ÌÐòƬ±ØÐëÓÃJava 1.0±àд£¬Ê¹ÆäÄÜÓë¾ø´ó¶àÊýµÄä¯ÀÀÆ÷ÊÊÓ¦¡£Ò²ÕýÊÇÓÉÓÚÕâ¸öÔ­Òò£¬ÎÒÃDzúÉúµÄÀàÊýÁ¿Ó¦¾¡¿ÉÄܵØÉÙ¡£ËùÒÔÎÒÃÇÔÚÕâ¶ù²»¿¼ÂÇʹÓÃÇ°ÃæÉè¼ÆºÃµÄDgramÀ࣬¶ø½«Êý¾Ý±¨µÄËùÓÐά»¤¹¤×÷¶¼×ªµ½´úÂëÐÐÖнøÐС£´ËÍ⣬³ÌÐòƬҪÓÃÒ»¸öÏ̼߳àÊÓÓÉ·þÎñÆ÷´«»ØµÄÏìÓ¦ÐÅÏ¢£¬¶ø·ÇʵÏÖRunnable½Ó¿Ú£¬Óü¯³Éµ½³ÌÐòƬµÄÒ»¸ö¶ÀÁ¢Ïß³ÌÀ´×öÕâ¼þÊÂÇé¡£µ±È»£¬ÕâÑù×ö¶Ô´úÂëµÄ¿É¶ÁÐÔ²»Àû£¬µ«È´ÄܲúÉúÒ»¸öµ¥ÀࣨÒÔ¼°µ¥¸ö·þÎñÆ÷ÇëÇ󣩳ÌÐòƬ£º

858-860Ò³³ÌÐò

³ÌÐòƬµÄUI£¨Óû§½çÃæ£©·Ç³£¼òµ¥¡£Ëü°üº¬ÁËÒ»¸öTestField£¨Îı¾×ֶΣ©£¬ÒÔ±ãÎÒÃǼüÈëÒ»¸öµç×Óº¯¼þµØÖ·£»ÒÔ¼°Ò»¸öButton£¨°´Å¥£©£¬ÓÃÓÚ½«µØÖ··¢¸ø·þÎñÆ÷¡£Á½¸öLabel£¨±êÇ©£©ÓÃÓÚÏòÓû§±¨¸æ×´Ì¬ÐÅÏ¢¡£
µ½ÏÖÔÚΪֹ£¬´ó¼ÒÒÑÄÜÅжϳöDatagramSocket¡¢InetAddress¡¢»º³åÇøÒÔ¼°DatagramPacket¶¼ÊôÓÚÍøÂçÁ¬½ÓÖбȽÏÂé·³µÄ²¿·Ö¡£×îºó£¬´ó¼Ò¿É¿´µ½run()·½·¨ÊµÏÖÁËÏ̲߳¿·Ö£¬Ê¹³ÌÐòƬÄܹ»¡°ÕìÌý¡±ÓÉ·þÎñÆ÷´«»ØµÄÏìÓ¦ÐÅÏ¢¡£
init()·½·¨Óôó¼ÒÊìϤµÄ²¼¾Ö¹¤¾ßÉèÖÃGUI£¬È»ºó´´½¨DatagramSocket£¬Ëü½«Í¬Ê±ÓÃÓÚÊý¾Ý±¨µÄÊÕ·¢¡£
action()·½·¨Ö»¸ºÔð¼àÊÓÎÒÃÇÊÇ·ñ°´ÏÂÁË¡°·¢ËÍ¡±£¨send£©°´Å¥¡£¼Çס£¬ÎÒÃÇÒѱ»ÏÞÖÆÔÚJava 1.0ÉÏÃæ£¬ËùÒÔ²»ÄÜÔÙÓýÏÁé»îµÄÄÚ²¿ÀàÁË¡£°´Å¥°´ÏÂÒԺ󣬲ÉÈ¡µÄµÚÒ»ÏîÐж¯±ãÊǼì²éÏß³Ìpl£¬¿´¿´ËüÊÇ·ñΪnull£¨¿Õ£©¡£Èç¹û²»Îªnull£¬±íÃ÷ÓÐÒ»¸ö»î¶¯Ïß³ÌÕýÔÚÔËÐС£ÏûÏ¢Ê״η¢³öʱ£¬»áÆô¶¯Ò»¸öÐÂỊ̈߳¬ÓÃËü¼àÊÓÀ´×Ô·þÎñÆ÷µÄ»ØÓ¦¡£ËùÒÔ¼ÙÈôÓиöÏß³ÌÕýÔÚÔËÐУ¬¾ÍÒâζ×ÅÕâ²¢·ÇÓû§µÚÒ»´Î·¢ËÍÏûÏ¢¡£pl¾ä±ú±»ÉèΪnull£¬Í¬Ê±ÖÐÖ¹Ô­À´µÄ¼àÊÓÕߣ¨ÕâÊÇ×îºÏÀíµÄÒ»ÖÖ×ö·¨£¬ÒòΪstop()Òѱ»Java 1.2¡°·´¶Ô¡±£¬ÕâÔÚǰһÕÂÒѽâÊ͹ýÁË£©¡£
ÎÞÂÛÕâÊÇ·ñ°´Å¥±»µÚÒ»´Î°´Ï£¬I2ÖеÄÎÄ×Ö¶¼»áÇå³ý¡£
ÏÂÒ»×éÓï¾ä½«¼ì²éE-mailÃû×ÖÊÇ·ñºÏ¸ñ¡£String.indexOf()·½·¨µÄ×÷ÓÃÊÇËÑË÷ÆäÖеķǷ¨×Ö·û¡£Èç¹ûÕÒµ½Ò»¸ö£¬¾Í°ÑÇé¿ö±¨¸æ¸øÓû§¡£×¢Òâ½øÐÐËùÓÐÕâЩ¹¤×÷ʱ£¬¶¼²»±ØÉæ¼°ÍøÂçͨÐÅ£¬ËùÒÔËٶȷdz£¿ì£¬¶øÇÒ²»»áÓ°Ïì´ø¿íºÍ·þÎñÆ÷µÄÐÔÄÜ¡£
Ãû×ÖУÑéͨ¹ýÒÔºó£¬Ëü»á´ò°üµ½Ò»¸öÊý¾Ý±¨ÀȻºó²ÉÓÃÓëÇ°ÃæÄǸöÊý¾Ý±¨Ê¾ÀýÒ»ÑùµÄ·½Ê½·¢µ½Ö÷»úµØÖ·ºÍ¶Ë¿Ú±àºÅ¡£µÚÒ»¸ö±êÇ©»á·¢Éú±ä»¯£¬Ö¸³öÒѳɹ¦·¢ËͳöÈ¥¡£¶øÇÒ°´Å¥ÉϵÄÎÄ×ÖÒ²»á¸Ä±ä£¬±ä³É¡°ÖØ·¢¡±£¨resend£©¡£Õâʱ»áÆô¶¯Ị̈߳¬µÚ¶þ¸ö±êÇ©Ôò»á¸æËßÎÒÃdzÌÐòƬÕýÔڵȺòÀ´×Ô·þÎñÆ÷µÄ»ØÓ¦¡£
Ï̵߳Ärun()·½·¨»áÀûÓÃNameSenderÖаüº¬µÄDatagramSocketÀ´½ÓÊÕÊý¾Ý£¨receive()£©£¬³ý·Ç³öÏÖÀ´×Ô·þÎñÆ÷µÄÊý¾Ý±¨°ü£¬·ñÔòreceive()»áÔÝʱ´¦ÓÚ¡°¶ÂÈû¡±»òÕß¡°ÔÝÍ£¡±×´Ì¬¡£½á¹ûµÃµ½µÄÊý¾Ý°ü»á·Å½øNameSenderµÄDatagramPacketdpÖС£Êý¾Ý»á´Ó°üÖÐÌáÈ¡³öÀ´£¬²¢ÖÃÈëNameSenderµÄµÚ¶þ¸ö±êÇ©¡£Ëæºó£¬Ï̵߳ÄÖ´Ðн«Öжϣ¬³ÉΪһ¸ö¡°ËÀ¡±Ï̡߳£Èôij¶Îʱ¼äÀïûÓÐÊÕµ½À´×Ô·þÎñÆ÷µÄ»ØÓ¦£¬Óû§¿ÉÄܱäµÃ²»ÄÍ·³£¬Ôٴΰ´Ï°´Å¥¡£ÕâÑù×ö»áÖжϵ±Ç°Ị̈߳¨Êý¾Ý·¢³öÒԺ󣬻áÔÙ½¨Ò»¸öÐµģ©¡£ÓÉÓÚÓÃÒ»¸öÏß³ÌÀ´¼àÊÓ»ØÓ¦Êý¾Ý£¬ËùÒÔÓû§ÔÚ¼àÊÓÆÚ¼äÈÔÈ»¿ÉÒÔ×ÔÓÉʹÓÃUI¡£

1. WebÒ³
µ±È»£¬³ÌÐòƬ±ØÐë·Åµ½Ò»¸öWebÒ³Àï¡£ÏÂÃæÁгöÍêÕûµÄWebÒ³Ô´Â룻ÉÔ΢Ñо¿Ò»Ï¾Ϳɿ´³ö£¬ÎÒÓÃËü´Ó×Ô¼º¿ª°ìµÄÓʼÄÁÐ±í£¨Mailling List£©Àï×Ô¶¯ÊÕ¼¯Ãû×Ö¡£
³ÌÐòƬ±ê¼Ç£¨<applet>£©µÄʹÓ÷dz£¼òµ¥£¬ºÍµÚ13ÕÂչʾµÄÄÇÒ»¸ö²¢Ã»ÓÐÊ²Ã´Çø±ð¡£

15.5.3 ҪעÒâµÄÎÊÌâ
Ç°Ãæ²ÉÈ¡µÄËÆºõÊÇÒ»ÖÖÍêÃÀµÄ·½·¨¡£Ã»ÓÐCGI±à³Ì£¬ËùÒÔÔÚ·þÎñÆ÷Æô¶¯Ò»¸öCGI³ÌÐòʱ²»»á³öÏÖÑÓ³Ù¡£Êý¾Ý±¨·½Ê½ËƺõÄܲúÉú·Ç³£¿ìµÄÏìÓ¦¡£´ËÍ⣬һµ©Java 1.1µÃµ½¾ø´ó¶àÊýÈ˵IJÉÄÉ£¬·þÎñÆ÷¶ËµÄÄÇÒ»²¿·Ö¾Í¿ÉÍêÈ«ÓÃJava±àд£¨¾¡¹ÜÀûÓñê×¼ÊäÈëºÍÊä³öͬһ¸ö·ÇJava³ÌÐòÁ¬½ÓÒ²·Ç³£ÈÝÒ×£©¡£
µ«±ØÐë×¢Ò⵽һЩÎÊÌâ¡£ÆäÖÐÒ»¸öÌØ±ðÈÝÒ׺öÂÔ£ºÓÉÓÚJavaÓ¦ÓÃÔÚ·þÎñÆ÷ÉÏÊÇÁ¬ÐøÔËÐе쬶øÇÒ»á°Ñ´ó¶àÊýʱ¼ä»¨ÔÚDatagram.receive()·½·¨µÄµÈºòÉÏÃæ£¬ÕâÑù±ãΪCPU´øÀ´Á˶îÍâµÄ¿ªÏú¡£ÖÁÉÙ£¬ÎÒÔÚ×Ô¼ºµÄ·þÎñÆ÷Éϱ㷢ÏÖÁËÕâ¸öÎÊÌâ¡£ÁíÒ»·½Ã棬ÄǸö·þÎñÆ÷Éϲ»»á·¢ÉúÆäËû¸ü¶àµÄÊÂÇé¡£¶øÇÒ¼ÙÈçÎÒÃÇʹÓÃÒ»¸öÈÎÎñ¸üΪ·±ÖصķþÎñÆ÷£¬Æô¶¯³ÌÐòÓá°nice¡±£¨Ò»¸öUnix³ÌÐò£¬ÓÃÓÚ·ÀÖ¹½ø³Ḭ̀³ÔCPU×ÊÔ´£©»òÆäËûµÈ¼Û³ÌÐò¼´¿É½â¾öÎÊÌâ¡£ÔÚÐí¶àÇé¿öÏ£¬¶¼ÓбØÒªÁôÒâÏóÕâÑùµÄһЩӦÓ᪡ªÒ»¸ö¶ÂÈûµÄreceive()ÍêÈ«¿ÉÄÜÔì³ÉCPUµÄ̱»¾¡£
µÚ¶þ¸öÎÊÌâÉæ¼°·À»ðǽ¡£¿É½«·À»ðǽÀí½â³É×Ô¼ºµÄ±¾µØÍøÓëÒòÌØÍøÖ®¼äµÄÒ»µÀǽ£¨Êµ¼ÊÊÇÒ»¸öרÓûúÆ÷»ò·À»ðǽÈí¼þ£©¡£Ëü¼àÊÓ½ø³öÒòÌØÍøµÄËùÓÐͨÐÅ£¬È·±£ÕâЩͨÐŲ»Î¥±³Ô¤ÉèµÄ¹æÔò¡£
·À»ðǽÏԵöàÉÙÓÐЩ±£ÊØ£¬ÒªÇóÑϸñ×ñÊØËùÓйæÔò¡£¼ÙÈçûÓÐ×ñÊØ£¬ËüÃÇ»áÎÞÇ鵨°ÑËüÃǾÜÖ®ÃÅÍâ¡£ÀýÈ磬¼ÙÉèÎÒÃÇλÓÚ·À»ðǽºóÃæµÄÒ»¸öÍøÂçÖУ¬¿ªÊ¼ÓÃWebä¯ÀÀÆ÷ͬÒòÌØÍøÁ¬½Ó£¬·À»ðǽҪÇóËùÓд«Êä¶¼ÓÿÉÒÔ½ÓÊܵÄhttp¶Ë¿Úͬ·þÎñÆ÷Á¬½Ó£¬Õâ¸ö¶Ë¿ÚÊÇ80¡£ÏÖÔÚÀ´ÁËÕâ¸öJava³ÌÐòƬNameSender£¬ËüÊÔͼ½«Ò»¸öÊý¾Ý±¨´«µ½¶Ë¿Ú8080£¬ÕâÊÇΪÁËÔ½¹ý¡°Êܱ£»¤¡±µÄ¶Ë¿Ú·¶Î§0-1024¶øÉèÖõġ£·À»ðǽºÜ×ÔÈ»µØ°ÑËüÏëÏó³É×µÄÇé¿ö¡ª¡ªÓÐÈËʹÓò¡¶¾»òÕß·Ç·¨É¨Ãè¶Ë¿Ú¡ª¡ª¸ù±¾²»ÔÊÐí´«ÊäµÄ¼ÌÐø½øÐС£
Ö»ÒªÎÒÃǵĿͻ§½¨Á¢µÄÊÇÓëÒòÌØÍøµÄԭʼÁ¬½Ó£¨±ÈÈçͨ¹ýµäÐ͵ÄISP½Ó²µInternet£©£¬¾Í²»»á³öÏÖ´ËÀà·À»ðǽÎÊÌâ¡£µ«Ò²¿ÉÄÜÓÐÒ»Ð©ÖØÒªµÄ¿Í»§Òþ²ØÔÚ·À»ðǽºó£¬ËûÃDZ㲻ÄÜʹÓÃÎÒÃÇÉè¼ÆµÄ³ÌÐò¡£
ÔÚѧ¹ýÓйØJavaµÄÕâô¶à¶«Î÷ÒÔºó£¬ÕâÊÇÒ»¼þʹÈËÏ൱¾ÚÉ¥µÄÊÂÇ飬ÒòΪ¿´À´±ØÐë·ÅÆúÔÚ·þÎñÆ÷ÉÏʹÓÃJava£¬¸ÄΪѧϰÈçºÎ±àдC»òPerl½Å±¾³ÌÐò¡£µ«Çë´ó¼Ò²»Òª¾øÍû¡£
Ò»¸ö³öÉ«·½°¸ÊÇÓÉSun¹«Ë¾Ìá³öµÄ¡£ÈçÒ»Çа´¼Æ»®½øÐУ¬Web·þÎñÆ÷×îÖÕ¶¼×°±¸¡°Ð¡·þÎñ³ÌÐò¡±»òÕß¡°·þÎñ³ÌÐòƬ¡±£¨Servlet£©¡£ËüÃǸºÔð½ÓÊÕÀ´×Ô¿Í»§µÄÇëÇ󣨾­¹ý·À»ðǽÔÊÐíµÄ80¶Ë¿Ú£©¡£¶øÇÒ²»ÔÙÊÇÆô¶¯Ò»¸öCGI³ÌÐò£¬ËüÃÇ»áÆô¶¯Ð¡·þÎñ³ÌÐò¡£¸ù¾ÝSunµÄÉèÏ룬ÕâЩС·þÎñ³ÌÐò¶¼ÊÇÓÃJava±àдµÄ£¬¶øÇÒÖ»ÄÜÔÚ·þÎñÆ÷ÉÏÔËÐС£ÔËÐÐÕâÖÖС³ÌÐòµÄ·þÎñÆ÷»á×Ô¶¯Æô¶¯ËüÃÇ£¬ÁîÆä¶Ô¿Í»§µÄÇëÇó½øÐд¦Àí¡£ÕâÒâζ×ÅÎÒÃǵÄËùÓгÌÐò¶¼¿ÉÒÔÓÃJavaд³É£¨100%´¿¿§·È£©¡£ÕâÏÔÈ»ÊÇÒ»Öַdz£ÎüÒýÈ˵ÄÏë·¨£ºÒ»µ©Ï°¹ßÁËJava£¬¾Í²»±Ø»»ÓÃÆäËûÓïÑÔÔÚ·þÎñÆ÷ÉÏ´¦Àí¿Í»§ÇëÇó¡£
ÓÉÓÚÖ»ÄÜÔÚ·þÎñÆ÷ÉÏ¿ØÖÆÇëÇó£¬ËùÒÔС·þÎñ³ÌÐòAPIûÓÐÌṩGUI¹¦ÄÜ¡£Õâ¶ÔNameCollector.javaÀ´Ëµ·Ç³£Êʺϣ¬Ëü±¾À´¾Í²»ÐèÒªÈκÎͼÐνçÃæ¡£
ÔÚ±¾Êéд×÷ʱ£¬java.sun.comÒÑÌṩÁËÒ»¸ö·Ç³£Á®¼ÛµÄС·þÎñ³ÌÐòרÓ÷þÎñÆ÷¡£Sun¹ÄÀøÆäËûWeb·þÎñÆ÷¿ª·¢ÕßΪËûÃǵķþÎñÆ÷Èí¼þ²úÆ·¼ÓÈë¶ÔС·þÎñ³ÌÐòµÄÖ§³Ö¡£

15.6 JavaÓëCGIµÄ¹µÍ¨
Java³ÌÐò¿ÉÏòÒ»¸ö·þÎñÆ÷·¢³öÒ»¸öCGIÇëÇó£¬ÕâÓëHTML±íµ¥Ò³Ã»Ê²Ã´Á½Ñù¡£¶øÇÒºÍHTMLÒ³Ò»Ñù£¬Õâ¸öÇëÇó¼È¿ÉÒÔÉèΪGET£¨ÏÂÔØ£©£¬Òà¿ÉÉèΪPOST£¨ÉÏ´«£©¡£³ý´ËÒÔÍ⣬Java³ÌÐò»¹¿ÉÀ¹½ØCGI³ÌÐòµÄÊä³ö£¬ËùÒÔ²»±ØÒÀÀµ³ÌÐòÀ´¸ñʽ»¯Ò»¸öÐÂÒ³£¬Ò²²»±ØÔÚ³ö´íµÄʱºòÇ¿ÆÈÓû§´ÓÒ»¸öÒ³»Ø×ªµ½ÁíÒ»¸öÒ³¡£ÊÂʵÉÏ£¬³ÌÐòµÄÍâ¹Û¿ÉÒÔ×öµÃ¸úÒÔǰµÄ°æ±¾±ðÎÞ¶þÖ¡£
´úÂëÒ²Òª¼òµ¥Ò»Ð©£¬±Ï¾¹ÓÃCGIÒ²²»ÊǺÜÄѾÍÄÜд³öÀ´£¨Ç°ÌáÊÇÕæÕýµØÀí½âËü£©¡£ËùÒÔÔÚÕâÒ»½ÚÀÎÒÃÇ×¼±¸°ì¸öCGI±à³ÌËٳɰࡣΪ½â¾ö³£¹æÎÊÌ⣬½«ÓÃC++´´½¨Ò»Ð©CGI¹¤¾ß£¬ÒÔ±ãÎÒÃDZàдһ¸öÄܽâ¾öËùÓÐÎÊÌâµÄCGI³ÌÐò¡£ÕâÑù×öµÄºÃ´¦ÊÇÒÆÖ²ÄÜÁ¦ÌرðÇ¿¡ª¡ª¼´½«¿´µ½µÄÀý×ÓÄÜÔÚÖ§³ÖCGIµÄÈκÎϵͳÉÏÔËÐУ¬¶øÇÒ²»´æÔÚ·À»ðǽµÄÎÊÌâ¡£
Õâ¸öÀý×ÓÒ²²ûʾÁËÈçºÎÔÚ³ÌÐòƬ£¨Applet£©ºÍCGI³ÌÐòÖ®¼ä½¨Á¢Á¬½Ó£¬ÒԱ㽫Æä·½±ãµØ¸Ä±àµ½×Ô¼ºµÄÏîÄ¿ÖС£

15.6.1 CGIÊý¾ÝµÄ±àÂë
ÔÚÕâ¸ö°æ±¾ÖУ¬ÎÒÃǽ«ÊÕ¼¯Ãû×ֺ͵ç×Óº¯¼þµØÖ·£¬²¢ÓÃÏÂÊöÐÎʽ½«Æä±£´æµ½ÎļþÖУº
First Last <email@domain.com>;
Õâ¶ÔÈκÎE-mail³ÌÐòÀ´Ëµ¶¼ÊÇÒ»Öַdz£·½±ãµÄ¸ñʽ¡£ÓÉÓÚÖ»ÐèÊÕ¼¯Á½¸ö×ֶΣ¬¶øÇÒCGIΪ×Ö¶ÎÖеıàÂë²ÉÓÃÁËÒ»ÖÖÌØÊâµÄ¸ñʽ£¬ËùÒÔÕâÀïûÓмò±ãµÄ·½·¨¡£Èç¹û×Ô¼º¶¯ÊÖ±àÖÆÒ»¸öԭʼµÄHTMLÒ³£¬²¢¼ÓÈëÏÂÊö´úÂëÐУ¬¼´¿ÉÕýÈ·µØÀí½âÕâÒ»µã£º

865Ò³³ÌÐò

ÉÏÊö´úÂë´´½¨ÁËÁ½¸öÊý¾ÝÊäÈë×ֶΣ¨Çø£©£¬ÃûΪnameºÍemail¡£ÁíÍ⻹ÓÐÒ»¸ösubmit£¨Ìá½»£©°´Å¥£¬ÓÃÓÚÊÕ¼¯Êý¾Ý£¬²¢½«Æä·¢¸øCGI³ÌÐò¡£Listmgr2.exeÊÇפÁôÔÚÌØÊâ³ÌÐòĿ¼ÖеÄÒ»¸ö¿ÉÖ´ÐÐÎļþ¡£ÔÚÎÒÃǵÄWeb·þÎñÆ÷ÉÏ£¬¸ÃĿ¼һ°ã¶¼½Ð×÷¡°cgi-bin¡±£¨×¢ÊÍ¢Û£©¡£Èç¹ûÔÚÄǸöĿ¼ÀïÕÒ²»µ½¸Ã³ÌÐò£¬½á¹û¾ÍÎÞ·¨³öÏÖ¡£ÌîºÃÕâ¸ö±íµ¥£¬È»ºó°´ÏÂÌá½»°´Å¥£¬¼´¿ÉÔÚä¯ÀÀÆ÷µÄURLµØÖ·´°¿ÚÀï¿´µ½ÏóÏÂÃæÕâÑùµÄÄÚÈÝ£º
http://www.myhome.com/cgi-bin/Listmgr2.exe?name=First+Last&email=email@domain.com&submit=Submit

¢Û£ºÔÚWindows32ƽ̨Ï£¬¿ÉÀûÓÃÓëMicrosoft Office 97»òÆäËû²úÆ·ÅäÌ×ÌṩµÄMicrosoft Personal Web Server£¨Î¢Èí¸öÈËWeb·þÎñÆ÷£©½øÐвâÊÔ¡£ÕâÊǽøÐÐÊÔÑéµÄ×îºÃ·½·¨£¬ÒòΪ²»±ØÕýʽÁ¬ÈëÍøÂ磬¿ÉÔÚ±¾µØ»·¾³ÖÐÍê³É²âÊÔ£¨ËÙ¶ÈÒ²·Ç³£¿ì£©¡£Èç¹ûʹÓõÄÊDz»Í¬µÄƽ̨£¬»òÕßûÓÐOffice 97»òÕßFrontPage 98ÄÇÑùµÄ²úÆ·£¬¿Éµ½ÍøÉÏÕÒÒ»¸öÃâ·ÑµÄWeb·þÎñÆ÷¹©×Ô¼º²âÊÔ¡£

µ±È»£¬ÉÏÊöURLʵ¼ÊÏÔʾʱÊDz»»á²ðÐеġ£´ÓÖпÉÉÔ΢¿´³öÈçºÎ¶ÔÊý¾Ý±àÂë²¢´«¸øCGI¡£ÖÁÉÙÓÐÒ»¼þÊÂÇéÄܹ»¿Ï¶¨¡ª¡ª¿Õ¸ñÊDz»ÔÊÐíµÄ£¨ÒòΪËüͨ³£ÓÃÓÚ·Ö¸ôÃüÁîÐвÎÊý£©¡£ËùÓбØÐèµÄ¿Õ¸ñ¶¼Óá°+¡±ºÅÌæ´ú£¬Ã¿¸ö×ֶζ¼°üº¬ÁË×Ö¶ÎÃû£¨¾ßÌåÓÉHTMLÒ³¾ö¶¨£©£¬ºóÃæ¸úËæÒ»¸ö¡°=¡±ºÅÒÔ¼°ÕýʽµÄ×Ö¶ÎÊý¾Ý£¬×îºóÓÃÒ»¸ö¡°&¡±½áÊø¡£
µ½Õâʱ£¬´ó¼ÒÒ²Ðí»á¶Ô¡°+¡±£¬¡°=¡±ÒÔ¼°¡°&¡±µÄʹÓòúÉúÒɻ󡣼ÙÈç±ØÐëÔÚ×Ö¶ÎÀïʹÓÃÕâЩ×Ö·û£¬ÄÇô¸ÃÈçºÎÉùÃ÷ÄØ£¿ÀýÈ磬ÎÒÃÇ¿ÉÄÜʹÓá°John & MarshaSmith¡±Õâ¸öÃû×Ö£¬ÆäÖеġ°&¡±´ú±í¡°And¡±¡£ÊÂʵÉÏ£¬Ëü»á±àÂë³ÉÏÂÃæÕâ¸öÑù×Ó£º
John+%26+Marsha+Smith
Ò²¾ÍÊÇ˵£¬ÌØÊâ×Ö·û»áת»»³ÉÒ»¸ö¡°%¡±£¬²¢ÔÚºóÃæ¸úÉÏËüµÄÊ®Áù½øÖÆASCII±àÂë¡£
ÐÒÔ˵ÄÊÇ£¬JavaÓÐÒ»¸ö¹¤¾ßÀ´°ïÖúÎÒÃǽøÐÐÕâÖÖ±àÂë¡£ÕâÊÇURLEncoderÀàµÄÒ»¸ö¾²Ì¬·½·¨£¬ÃûΪencode()¡£¿ÉÓÃÏÂÊö³ÌÐòÀ´ÊÔÑéÕâ¸ö·½·¨£º

866Ò³³ÌÐò

¸Ã³ÌÐò½«»ñȡһЩÃüÁîÐвÎÊý£¬°ÑËüÃǺϲ¢³ÉÒ»¸öÓɶà¸ö´Ê¹¹³ÉµÄ×Ö´®£¬¸÷´ÊÖ®¼äÓÿոñ·Ö¸ô£¨×îºóÒ»¸ö¿Õ¸ñÓÃString.trim()ÌÞ³ýÁË£©¡£Ëæºó¶ÔËüÃǽøÐбàÂ룬²¢´òÓ¡³öÀ´¡£
Ϊµ÷ÓÃÒ»¸öCGI³ÌÐò£¬³ÌÐòƬҪ×öµÄÈ«²¿ÊÂÇé¾ÍÊÇ´Ó×Ô¼ºµÄ×ֶλòÆäËûµØ·½ÊÕ¼¯Êý¾Ý£¬½«ËùÓÐÊý¾Ý¶¼±àÂë³ÉÕýÈ·µÄURLÑùʽ£¬È»ºó»ã±àµ½µ¥¶ÀÒ»¸ö×Ö´®Àÿ¸ö×Ö¶ÎÃûºóÃæ¶¼¼ÓÉÏÒ»¸ö¡°=¡±·ûºÅ£¬½ô¸úÕýʽÊý¾Ý£¬ÔÙ½ô¸úÒ»¸ö¡°&¡±¡£Îª¹¹½¨ÍêÕûµÄCGIÃüÁÎÒÃǽ«Õâ¸ö×Ö´®ÖÃÓÚCGI³ÌÐòµÄURLÒÔ¼°Ò»¸ö¡°?¡±ºó¡£ÕâÊǵ÷ÓÃËùÓÐCGI³ÌÐòµÄ±ê×¼·½·¨¡£´ó¼ÒÂíÉϾͻῴµ½£¬ÓÃÒ»¸ö³ÌÐòƬÄܹ»ºÜÇáËɵØÍê³ÉËùÓÐÕâЩ±àÂëÓëºÏ²¢¡£

15.6.2 ³ÌÐòƬ
³ÌÐòƬʵ¼ÊÒª±ÈNameSender.java¼òµ¥Ò»Ð©¡£Õⲿ·ÖÊÇÓÉÓÚºÜÈÝÒ×¼´¿É·¢³öÒ»¸öGETÇëÇó¡£´ËÍ⣬Ҳ²»±ØµÈºò»Ø¸´ÐÅÏ¢¡£ÏÖÔÚÓÐÁ½¸ö×ֶΣ¬¶ø·ÇÒ»¸ö£¬µ«´ó¼Ò»á·¢ÏÖÐí¶à³ÌÐòƬ¶¼ÊÇÊìϤµÄ£¬Çë±È½ÏNameSender.java¡£

867-869Ò³³ÌÐò

CGI³ÌÐò£¨²»¾Ã¼´¿É¿´µ½£©µÄÃû×ÖÊÇListmgr2.exe¡£Ðí¶àWeb·þÎñÆ÷¶¼ÔÚUnix»úÆ÷ÉÏÔËÐУ¨LinuxÒ²Ô½À´Ô½Êܵ½Çàíù£©¡£¸ù¾Ý´«Í³£¬ËüÃÇÒ»°ã²»Îª×Ô¼ºµÄ¿ÉÖ´ÐгÌÐò²ÉÓÃ.exeÀ©Õ¹Ãû¡£µ«ÔÚUnix²Ù×÷ϵͳÖУ¬¿ÉÒÔ°Ñ×Ô¼ºµÄ³ÌÐò³ÆºôΪ×Ô¼ºÏ£ÍûµÄÈκζ«Î÷¡£ÈôʹÓõÄÊÇ.exeÀ©Õ¹Ãû£¬³ÌÐòÎãÐèÈκÎÐ޸ļ´¿Éͨ¹ýUnixºÍWin32µÄÔËÐвâÊÔ¡£
ºÍÍù³£Ò»Ñù£¬³ÌÐòƬÉèÖÃÁË×Ô¼ºµÄÓû§½çÃæ£¨Õâ´ÎÊÇÁ½¸öÊäÈë×ֶΣ¬²»ÊÇÒ»¸ö£©¡£Î¨Ò»ÏÔÖøµÄÇø±ðÊÇÔÚaction()·½·¨ÄÚ²úÉúµÄ¡£¸Ã·½·¨µÄ×÷ÓÃÊǶ԰´Å¥°´ÏÂʼþ½øÐпØÖÆ¡£Ãû×Ö¼ì²é¹ýÒԺ󣬴ó¼Ò»á·¢ÏÖÏÂÊö´úÂëÐУº

869-870Ò³³ÌÐò

nameºÍemailÊý¾Ý¶¼ÊÇËüÃǶÔÓ¦µÄÎÄ×Ö¿òÀïÌáÈ¡³öÀ´£¬¶øÇÒÁ½¶Ë¶àÓàµÄ¿Õ¸ñ¶¼ÓÃtrim()ÌÞÈ¥ÁË¡£ÎªÁ˽øÈëÁÐ±í£¬emailÃû×Ö±»Ç¿ÖÆ»»³ÉСдÐÎʽ£¬ÒÔ±ãÄܹ»×¼È·µØ¶Ô±È£¨·ÀÖ¹»ùÓÚ´óСдÐÎʽµÄ´íÎóÅжϣ©¡£À´×Ôÿ¸ö×ֶεÄÊý¾Ý¶¼±àÂëΪURLÐÎʽ£¬Ëæºó²ÉÓÃÓëHTMLÒ³ÖÐÒ»ÑùµÄ·½Ê½»ã±àGET×Ö´®£¨ÕâÑùÒ»À´£¬ÎÒÃǿɽ«Java³ÌÐòƬÓëÏÖÓеÄÈκÎCGI³ÌÐò½áºÏʹÓã¬ÒÔÂú×ã³£¹æµÄHTML GETÇëÇ󣩡£
µ½Õâʱ£¬Ò»Ð©JavaµÄħÁ¦ÒѾ­¿ªÊ¼·¢»Ó×÷ÓÃÁË£ºÈç¹ûÏëͬÈκÎURLÁ¬½Ó£¬Ö»Ðè´´½¨Ò»¸öURL¶ÔÏ󣬲¢½«µØÖ·´«µÝ¸ø¹¹½¨Æ÷¼´¿É¡£¹¹½¨Æ÷»á¸ºÔð½¨Á¢Í¬·þÎñÆ÷µÄÁ¬½Ó£¨¶ÔWeb·þÎñÆ÷À´Ëµ£¬ËùÓÐÁ¬½ÓÐж¯¶¼ÊǸù¾Ý×÷ΪURLʹÓõÄ×Ö´®À´Åжϵģ©¡£¾ÍĿǰÕâÖÖÇé¿öÀ´Ëµ£¬URLÖ¸ÏòµÄÊǵ±Ç°WebÕ¾µãµÄcgi-binĿ¼£¨µ±Ç°WebÕ¾µãµÄ»ù´¡µØÖ·ÊÇÓÃgetDocumentBase()É趨µÄ£©¡£Ò»µ©Web·þÎñÆ÷ÔÚURLÖп´µ½ÁËÒ»¸ö¡°cgi-bin¡±£¬»á½Ó×ÅÏ£ÍûÔÚËüºóÃæ¸úËæÁËcgi-binĿ¼ÄÚµÄij¸ö³ÌÐòµÄÃû×Ö£¬ÄÇÊÇÎÒÃÇÒªÔËÐеÄÄ¿±ê³ÌÐò¡£³ÌÐòÃûºóÃæÊÇÒ»¸öÎʺÅÒÔ¼°CGI³ÌÐò»áÔÚQUERY_STRING»·¾³±äÁ¿ÖвéÕÒµÄÒ»¸ö²ÎÊý×Ö´®£¨ÂíÉϾÍҪѧµ½£©¡£
ÎÒÃÇ·¢³öÈκÎÐÎʽµÄÇëÇóºó£¬Ò»°ã¶¼»áµÃµ½Ò»¸ö»ØÓ¦µÄHTMLÒ³¡£µ«ÈôʹÓÃJavaµÄURL¶ÔÏó£¬ÎÒÃÇ¿ÉÒÔÀ¹½Ø×ÔCGI³ÌÐò´«»ØµÄÈκζ«Î÷£¬Ö»Ðè´ÓURL¶ÔÏóÀïÈ¡µÃÒ»¸öInputStream£¨ÊäÈëÊý¾ÝÁ÷£©¼´¿É¡£ÕâÊÇÓÃURL¶ÔÏóµÄopenStream()·½·¨ÊµÏÖ£¬ËüÒª·â×°µ½Ò»¸öDataInputStreamÀï¡£Ëæºó¾Í¿ÉÒÔ¶ÁÈ¡Êý¾ÝÐУ¬ÈôreadLine()·µ»ØÒ»¸önull£¨¿ÕÖµ£©£¬¾Í±íÃ÷CGI³ÌÐòÒѽáÊøÁËËüµÄÊä³ö¡£
ÎÒÃǼ´½«¿´µ½µÄCGI³ÌÐò·µ»ØµÄ½ö½öÊÇÒ»ÐУ¬ËüÊÇÓÃÓÚ±êÖ¾³É¹¦Óë·ñ£¨ÒÔ¼°Ê§°ÜµÄ¾ßÌåÔ­Òò£©µÄÒ»¸ö×Ö´®¡£ÕâÒ»Ðлᱻ²¶»ñ²¢Ö÷ŵڶþ¸öLabel×Ö¶ÎÀʹÓû§¿´µ½¾ßÌå·¢ÉúÁËʲôÊÂÇé¡£

1. ´Ó³ÌÐòƬÀïÏÔʾһ¸öWebÒ³
³ÌÐòÒà¿É½«CGI³ÌÐòµÄ½á¹û×÷Ϊһ¸öWebÒ³ÏÔʾ³öÀ´£¬¾ÍÏóËüÃÇÔÚÆÕͨHTMLģʽÖÐÔËÐÐÄÇÑù¡£¿ÉÓÃÏÂÊö´úÂë×öµ½ÕâÒ»µã£º
getAppletContext().showDocument(u);
ÆäÖУ¬u´ú±íURL¶ÔÏó¡£ÕâÊǽ«ÎÒÃÇÖØÐ¶¨ÏòÓÚÁíÒ»¸öWebÒ³µÄÒ»¸ö¼òµ¥Àý×Ó¡£ÄǸöÒ³´ÕÇÉÊÇÒ»¸öCGI³ÌÐòµÄÊä³ö£¬µ«¿ÉÒԷdz£·½±ãµØ½øÈëÒ»¸öԭʼµÄHTMLÒ³£¬ËùÒÔ¿ÉÒÔ¹¹½¨Õâ¸ö³ÌÐòƬ£¬ÁîÆä²úÉúÒ»¸öÓÉÃÜÂë±£»¤µÄÍø¹Ø£¬Í¨¹ýËü½øÈë×Ô¼ºWebÕ¾µãµÄÌØÊⲿ·Ö£º

871-872Ò³³ÌÐò

URLÀàµÄ×î´óµÄÌØµã¾ÍÊÇÓÐЧµØ±£»¤ÁËÎÒÃǵݲȫ¡£¿ÉÒÔͬһ¸öWeb·þÎñÆ÷½¨Á¢Á¬½Ó£¬ÎãÐèÖªµÀÄ»ºóµÄÈκζ«Î÷¡£

15.6.3 ÓÃC++дµÄCGI³ÌÐò
¾­¹ýÇ°ÃæµÄѧϰ£¬´ó¼ÒÓ¦¸ÃÄܹ»¸ù¾ÝÀý×ÓÓÃANSI CΪ×Ô¼ºµÄ·þÎñÆ÷д³öCGI³ÌÐò¡£Ö®ËùÒÔÑ¡ÓÃANSI C£¬ÊÇÒòΪËü¼¸ºõËæ´¦¿É¼û£¬ÊÇ×îÁ÷ÐеÄCÓïÑÔ±ê×¼¡£µ±È»£¬ÏÖÔÚµÄC++Ò²·Ç³£Á÷ÐÐÁË£¬ÌرðÊDzÉÓÃGNU C++±àÒëÆ÷£¨g++£©ÐÎʽµÄÄÇһЩ£¨×¢Ê͢ܣ©¡£¿É´ÓÍøÉÏÐí¶àµØ·½Ãâ·ÑÏÂÔØg++£¬¶øÇÒ¿ÉÑ¡Óü¸ºõËùÓÐÆ½Ì¨µÄ°æ±¾£¨Í¨³£ÓëLinuxÄÇÑùµÄ²Ù×÷ϵͳÅäÌ×Ìṩ£¬ÇÒÒÑÔ¤ÏȰ²×°ºÃ£©¡£ÕýÈç´ó¼Ò¼´½«¿´µ½µÄÄÇÑù£¬´ÓCGI³ÌÐò¿É»ñµÃÃæÏò¶ÔÏó³ÌÐòÉè¼ÆµÄÐí¶àºÃ´¦¡£

¢Ü£ºGNUµÄÈ«³ÆÊÇ¡°Gnu's Not Unix¡±¡£Õâ×îÔçÊÇÓÉ¡°×ÔÓÉÈí¼þ»ù½ð»á¡±£¨FSF£©¸ºÔ𿪷¢µÄÒ»¸öÏîÄ¿£¬ÖÂÁ¦ÓÚÓÃÒ»¸öÃâ·ÑµÄ°æ±¾È¡´úÔ­ÓеÄUnix²Ù×÷ϵͳ¡£ÏÖÔÚµÄLinuxËÆºõÕýÔÚ×öǰÈËûÓÐ×öµ½µÄÊÂÇé¡£µ«GNU¹¤¾ßÔÚLinuxµÄ¿ª·¢ÖаçÑÝÁËÖÁ¹ØÖØÒªµÄ½ÇÉ«¡£ÊÂʵÉÏ£¬LinuxµÄÕûÌ×Èí¼þ°ü¸½´øÁËÊýÁ¿·Ç³£¶àµÄGNU×é¼þ¡£

Ϊ±ÜÃâµÚÒ»´Î¾ÍÌá³ö¹ý¶àµÄиÅÄÕâ¸ö³ÌÐò²¢Î´´òËã³ÉΪһ¸ö¡°´¿¡±C++³ÌÐò£»ÓÐЩ´úÂëÊÇÓÃÆÕͨCд³ÉµÄ¡ª¡ª¾¡¹Ü»¹¿ÉÑ¡ÓÃC++µÄÒ»Ð©ÌæÓÃÐÎʽ¡£µ«Õâ²¢²»ÊǸöÍ»³öµÄÎÊÌ⣬ÒòΪ¸Ã³ÌÐòÓÃC++ÖÆ×÷×î´óµÄºÃ´¦¾ÍÊÇÄܹ»´´½¨Àà¡£ÔÚ½âÎöCGIÐÅÏ¢µÄʱºò£¬ÓÉÓÚÎÒÃÇ×î¹ØÐĵÄÊÇ×ֶεġ°Ãû³Æ£¯Öµ¡±¶Ô£¬ËùÒÔÒªÓÃÒ»¸öÀࣨPair£©À´´ú±íµ¥¸öÃû³Æ£¯Öµ¶Ô£»ÁíÒ»¸öÀࣨCGI_vector£©Ôò½«CGI×Ö´®×Ô¶¯½âÎöµ½Ëü»áÈÝÄɵÄPair¶ÔÏóÀ×÷Ϊһ¸övector£©£¬ÕâÑù¼´¿ÉÔÚÓпյÄʱºò°Ñÿ¸öPair£¨¶Ô£©¶¼È¡³öÀ´¡£
Õâ¸ö³ÌÐòͬʱҲ·Ç³£ÓÐȤ£¬ÒòΪËüÑÝʾÁËC++ÓëJavaÏà±ÈµÄÐí¶àÓÅȱµã¡£´ó¼Ò»á¿´µ½Ò»Ð©ÏàËÆµÄ¶«Î÷£»±ÈÈçclass¹Ø¼ü×Ö¡£·ÃÎÊ¿ØÖÆÊ¹ÓõÄÊÇÍêÈ«ÏàͬµÄ¹Ø¼ü×ÖpublicºÍprivate£¬µ«Ó÷¨È´ÓÐËù²»Í¬¡£ËüÃÇ¿ØÖƵÄÊÇÒ»¸ö¿é£¬¶ø·Çµ¥¸ö·½·¨»ò×ֶΣ¨Ò²¾ÍÊÇ˵£¬Èç¹ûÖ¸¶¨private:£¬ºóÐøµÄÿ¸ö¶¨Òå¶¼¾ßÓÐprivateÊôÐÔ£¬Ö±µ½ÎÒÃÇÔÙÖ¸¶¨public:Ϊֹ£©¡£ÁíÍâÔÚ´´½¨Ò»¸öÀàµÄʱºò£¬ËùÓж¨Òå¶¼×Ô¶¯Ä¬ÈÏΪprivate¡£
ÔÚÕâ¶ùʹÓÃC++µÄÒ»¸öÔ­ÒòÊÇÒªÀûÓÃC++¡°±ê׼ģ°å¿â¡±£¨STL£©ÌṩµÄ±ãÀû¡£ÖÁÉÙ£¬STL°üº¬ÁËÒ»¸övectorÀà¡£ÕâÊÇÒ»¸öC++Ä£°å£¬¿ÉÔÚ±àÒëÆÚ¼ä½øÐÐÅäÖã¬ÁîÆäÖ»ÈÝÄÉÒ»ÖÖÌØ¶¨ÀàÐ͵ĶÔÏó£¨ÕâÀïÊÇPair¶ÔÏ󣩡£ºÍJavaµÄVector²»Í¬£¬Èç¹ûÎÒÃÇÊÔͼ½«³ýPair¶ÔÏóÖ®ÍâµÄÈκζ«Î÷ÖÃÈëvector£¬C++µÄvectorÄ£°å¶¼»áÔì³ÉÒ»¸ö±àÒëÆÚ´íÎó£»¶øJavaµÄVectorÄܹ»ÕÕµ¥È«ÊÕ¡£¶øÇÒ´ÓvectorÀïÈ¡³öʲô¶«Î÷µÄʱºò£¬Ëü»á×Ô¶¯³ÉΪһ¸öPair¶ÔÏó£¬ÎãÐè½øÐÐÔìÐÍ´¦Àí¡£ËùÒÔ¼ì²éÔÚ±àÒëÆÚ½øÐУ¬Õâʹ³ÌÐòÏԵøüΪ¡°½¡×³¡±¡£´ËÍ⣬³ÌÐòµÄÔËÐÐËÙ¶ÈÒ²¿ÉÒԼӿ죬ÒòΪûÓбØÒª½øÐÐÔËÐÐÆÚ¼äµÄÔìÐÍ¡£vectorÒ²»á¹ýÔØoperator[]£¬ËùÒÔ¿ÉÒÔÀûÓ÷dz£·½±ãµÄÓï·¨À´ÌáÈ¡Pair¶ÔÏó¡£vectorÄ£°å½«ÔÚCGI_vector´´½¨Ê±Ê¹Óã»ÔÚÄÇʱ£¬´ó¼Ò¾Í¿ÉÒÔÌå»áµ½Èç´Ë¼ò¶ÌµÄÒ»¸ö¶¨Òå¾ÓÈ»Ô̲ØÓÐÄÇô¾Þ´óµÄÄÜÁ¿¡£
ÈôÌᵽȱµã£¬¾ÍÒ»¶¨²»ÒªÍü¼ÇPairÔÚÏÂÁдúÂëÖж¨ÒåʱµÄ¸´Ôӳ̶ȡ£ÓëÎÒÃÇÔÚJava´úÂëÖп´µ½µÄÏà±È£¬PairµÄ·½·¨¶¨ÒåÒª¶àµÃ¶à¡£ÕâÊÇÓÉÓÚC++µÄ³ÌÐòÔ±±ØÐëÌáǰ֪µÀÈçºÎÓø±±¾¹¹½¨Æ÷¿ØÖƸ´Öƹý³Ì£¬¶øÇÒÒªÓùýÔØµÄoperator=Íê³É¸³Öµ¡£ÕýÈçµÚ12Õ½âÊ͵ÄÄÇÑù£¬ÎÒÃÇÓÐʱҲҪÔÚJavaÖп¼ÂÇͬÑùµÄÊÂÇé¡£µ«ÔÚC++ÖУ¬¼¸ºõÒ»¿Ì¶¼²»ÄÜ·ÅËɶÔÕâЩÎÊÌâµÄ¹Ø×¢¡£
Õâ¸öÏîÄ¿Ê×ÏÈ´´½¨Ò»¸ö¿ÉÒÔÖØ¸´Ê¹ÓõIJ¿·Ö£¬ÓÉC++Í·ÎļþÖеÄPairºÍCGI_vector¹¹³É¡£´Ó¼¼Êõ½Ç¶È¿´£¬È·Êµ²»Ó¦°ÑÕâЩ¶«Î÷¶¼Èûµ½Ò»¸öÍ·ÎļþÀï¡£µ«¾ÍĿǰµÄÀý×ÓÀ´Ëµ£¬ÕâÑù×ö²»»áÔì³ÉÈκη½ÃæµÄË𺦣¬¶øÇÒ¸ü¾ßÓÐJava·ç¸ñ£¬ËùÒÔ´ó¼ÒÔĶÁÀí½â´úÂëʱҪÏÔµÃÇáËÉһЩ£º

873-877Ò³³ÌÐò

ÔÚ#includeÓï¾äºó£¬¿É¿´µ½ÓÐÒ»ÐÐÊÇ£º
using namespace std;
C++Öеġ°ÃüÃû¿Õ¼ä¡±£¨Namespace£©½â¾öÁËÓÉJavaµÄpackage¸ºÔðµÄÒ»¸öÎÊÌ⣺½«¿âÃûÒþ²ØÆðÀ´¡£stdÃüÃû¿Õ¼äÒýÓõÄÊDZê×¼C++¿â£¬¶øvector¾ÍÔÚÕâ¸ö¿âÖУ¬ËùÒÔÕâÒ»ÐÐÊDZØÐèµÄ¡£
PairÀà±íÃæ¿´Òì³£¼òµ¥£¬Ö»ÊÇÈÝÄÉÁËÁ½¸ö£¨private£©×Ö·ûÖ¸Õë¶øÒÑ¡ª¡ªÒ»¸öÓÃÓÚÃû×Ö£¬ÁíÒ»¸öÓÃÓÚÖµ¡£Ä¬ÈϹ¹½¨Æ÷½«ÕâÁ½¸öÖ¸Õë¼òµ¥µØÉèΪÁã¡£ÕâÊÇÓÉÓÚÔÚC++ÖУ¬¶ÔÏóµÄÄÚ´æ²»»á×Ô¶¯ÖÃÁã¡£µÚ¶þ¸ö¹¹½¨Æ÷µ÷Ó÷½·¨decodeURLString()£¬ÔÚзÖÅäµÄ¶ÑÄÚ´æÖÐÉú³ÉÒ»¸ö½âÂë¹ýºóµÄ×Ö´®¡£Õâ¸öÄÚ´æÇøÓò±ØÐëÓɶÔÏó¸ºÔð¹ÜÀí¼°Çå³ý£¬ÕâÓë¡°ÆÆ»µÆ÷¡±Öмûµ½µÄÏàͬ¡£name()ºÍvalue()·½·¨ÎªÏà¹ØµÄ×ֶβúÉúÖ»¶ÁÖ¸Õë¡£ÀûÓÃempty()·½·¨£¬ÎÒÃDzéѯPair¶ÔÏóËüµÄij¸ö×Ö¶ÎÊÇ·ñΪ¿Õ£»·µ»ØµÄ½á¹ûÊÇÒ»¸öbool¡ª¡ªC++ÄÚ½¨µÄ»ù±¾²¼¶ûÊý¾ÝÀàÐÍ¡£operator bool()ʹÓõÄÊÇC++¡°ÔËËã·û¹ýÔØ¡±µÄÒ»ÖÖÌØÊâÐÎʽ¡£ËüÔÊÐíÎÒÃÇ¿ØÖÆ×Ô¶¯ÀàÐÍת»»¡£Èç¹ûÓÐÒ»¸öÃûΪpµÄPair¶ÔÏ󣬶øÇÒÔÚÒ»¸ö±¾À´Ï£ÍûÊDz¼¶û½á¹ûµÄ±í´ïʽÖÐʹÓ㬱ÈÈçif(p){//...£¬ÄÇô±àÒëÆ÷Äܱæ±ð³öËüÓÐÒ»¸öPair£¬¶øÇÒÐèÒªµÄÊǸö²¼¶ûÖµ£¬ËùÒÔ×Ô¶¯µ÷ÓÃoperator bool()£¬½øÐбØÒªµÄת»»¡£
½ÓÏÂÀ´µÄÈý¸ö·½·¨ÊôÓÚ³£¹æ±àÂ룬ÔÚC++Öд´½¨Ààʱ±ØÐëÓõ½ËüÃÇ¡£¸ù¾ÝC++Àà²ÉÓõÄËùν¡°¾­µäÐÎʽ¡±£¬ÎÒÃDZØÐ붨Òå±ØÒªµÄ¡°Ô­Ê¼¡±¹¹½¨Æ÷£¬ÒÔ¼°Ò»¸ö¸±±¾¹¹½¨Æ÷ºÍ¸³ÖµÔËËã·û¡ª¡ªoperator=£¨ÒÔ¼°ÆÆ»µÆ÷£¬ÓÃÓÚÇå³ýÄڴ棩¡£Ö®ËùÒÔÒª×÷ÕâÑùµÄ¶¨Ò壬ÊÇÓÉÓÚ±àÒëÆ÷»á¡°Ä¬Ä¬¡±µØµ÷ÓÃËüÃÇ¡£ÔÚ¶ÔÏó´«Èë¡¢´«³öÒ»¸öº¯ÊýµÄʱºò£¬ÐèÒªµ÷Óø±±¾¹¹½¨Æ÷£»¶øÔÚ·ÖÅä¶ÔÏóʱ£¬ÐèÒªµ÷Óø³ÖµÔËËã·û¡£Ö»ÓÐÕæÕýÕÆÎÕÁ˸±±¾¹¹½¨Æ÷ºÍ¸³ÖµÔËËã·ûµÄ¹¤×÷Ô­Àí£¬²ÅÄÜÔÚC++Àïд³öÕæÕý¡°½¡×³¡±µÄÀ࣬µ«ÕâÐèÒªÐèÒªÒ»¸ö±È½Ï¼è¿àµÄ¹ý³Ì£¨×¢Ê͢ݣ©¡£

¢Ý£ºÎҵġ¶Thinking in C++¡·£¨Prentice-Hall,1995£©ÓÃÁËÒ»ÕûÕµĵط½À´ÌÖÂÛÕâ¸öÖ÷Ìâ¡£ÈôÐè¸ü¶àµÄ°ïÖú£¬ÇëÎñ±Ø¿´¿´ÄÇÒ»Õ¡£

Ö»Òª½«Ò»¸ö¶ÔÏó°´Öµ´«Èë»ò´«³öº¯Êý£¬¾Í»á×Ô¶¯µ÷Óø±±¾¹¹½¨Æ÷Pair(const Pair&)¡£Ò²¾ÍÊÇ˵£¬¶ÔÓÚ×¼±¸ÎªÆäÖÆ×÷Ò»¸öÍêÕû¸±±¾µÄÄǸö¶ÔÏó£¬ÎÒÃDz»×¼±¸ÔÚº¯Êý¿ò¼ÜÖд«µÝËüµÄµØÖ·¡£Õâ²¢²»ÊÇJavaÌṩµÄÒ»¸öÑ¡ÏÓÉÓÚÎÒÃÇÖ»ÄÜ´«µÝ¾ä±ú£¬ËùÒÔÔÚJavaÀïûÓÐËùνµÄ¸±±¾¹¹½¨Æ÷£¨Èç¹ûÏëÖÆ×÷Ò»¸ö±¾µØ¸±±¾£¬¿ÉÒÔ¡°¿Ë¡¡±ÄǸö¶ÔÏ󡪡ªÊ¹ÓÃclone()£¬²Î¼ûµÚ12Õ£©¡£ÀàËÆµØ£¬Èç¹ûÔÚJavaÀï·ÖÅäÒ»¸ö¾ä±ú£¬Ëü»á¼òµ¥µØ¸´ÖÆ¡£µ«C++Öеĸ³ÖµÒâζ×ÅÕû¸ö¶ÔÏó¶¼»á¸´ÖÆ¡£ÔÚ¸±±¾¹¹½¨Æ÷ÖУ¬ÎÒÃÇ´´½¨ÐµĴ洢¿Õ¼ä£¬²¢¸´ÖÆÔ­Ê¼Êý¾Ý¡£µ«¶ÔÓÚ¸³ÖµÔËËã·û£¬ÎÒÃDZØÐëÔÚ·ÖÅäд洢¿Õ¼ä֮ǰÊÍ·ÅÀÏ´æ´¢¿Õ¼ä¡£ÎÒÃÇÒª¼ûµ½µÄÒ²ÐíÊÇC++Àà×ÔÓµÄÒ»ÖÖÇé¿ö£¬µ«ÄÇÕýÊÇJavaµÄÖ§³ÖÕßÃÇÂÛÖ¤Java±ÈC++¼òµ¥µÃ¶àµÄÓÐÁ¦Ö¤¾Ý¡£ÔÚJavaÖУ¬ÎÒÃÇ¿ÉÒÔ×ÔÓÉ´«µÝ¾ä±ú£¬Éƺó¹¤×÷ÔòÓÉÀ¬»øÊÕ¼¯Æ÷¸ºÔð£¬ËùÒÔ¿ÉÒÔÇáËÉÐí¶à¡£
µ«ÊÂÇ鲢ûÓÐÍê¡£PairÀàΪnmºÍvalʹÓõÄÊÇchar*£¬×ÔÓµÄÇé¿öÖ÷ÒªÊÇÎ§ÈÆÖ¸ÕëÕ¹¿ªµÄ¡£Èç¹ûÓýÏʱ÷ÖµÄC++ stringÀàÀ´´úÌæchar*£¬ÊÂÇé¾ÍÒª±äµÃ¼òµ¥µÃ¶à£¨µ±È»£¬²¢²»ÊÇËùÓбàÒëÆ÷¶¼ÌṩÁ˶ÔstringµÄÖ§³Ö£©¡£ÄÇô£¬PairµÄµÚÒ»²¿·Ö¿´ÆðÀ´¾ÍÏóÏÂÃæÕâÑù£º

878Ò³³ÌÐò

£¨´ËÍ⣬¶ÔÕâ¸öÀàdecodeURLString()»á·µ»ØÒ»¸östring£¬¶ø²»ÊÇÒ»¸öchar*£©¡£ÎÒÃDz»±Ø¶¨Ò帱±¾¹¹½¨Æ÷¡¢operator=»òÕßÆÆ»µÆ÷£¬ÒòΪ±àÒëÆ÷ÒѰïÎÒÃÇ×öÁË£¬¶øÇÒ×öµÃ·Ç³£ºÃ¡£µ«¼´Ê¹ÓÐЩÊÂÇéÊÇ×Ô¶¯½øÐеģ¬C++³ÌÐòÔ±Ò²±ØÐëÁ˽⸱±¾¹¹½¨ÒÔ¼°¸³ÖµµÄϸ½Ú¡£
PairÀàʣϵIJ¿·ÖÓÉÁ½¸ö·½·¨¹¹³É£ºdecodeURLString()ÒÔ¼°Ò»¸ö¡°°ïÖúÆ÷¡±·½·¨translateHex()¡ª¡ª½«ÓÉdecodeURLString()ʹÓá£×¢ÒâtranslateHex()²¢²»ÄÜ·À·¶Óû§µÄ¶ñÒâÊäÈ룬±ÈÈç¡°%1H¡±¡£·ÖÅäºÃ×ã¹»µÄ´æ´¢¿Õ¼äºó£¨±ØÐëÓÉÆÆ»µÆ÷ÊÍ·Å£©£¬decodeURLString()¾Í»áÆäÖбéÀú£¬½«ËùÓС°+¡±¶¼»»³ÉÒ»¸ö¿Õ¸ñ£»½«ËùÓÐÊ®Áù½øÖÆ´úÂ루ÒÔÒ»¸ö¡°%¡±´òÍ·£©»»³É¶ÔÓ¦µÄ×Ö·û¡£
CGI_vectorÓÃÓÚ½âÎöºÍÈÝÄÉÕû¸öCGI GETÃüÁî¡£ËüÊÇ´ÓSTL vectorÀï¼Ì³ÐµÄ£¬ºóÕßÀýʾΪÈÝÄÉPair¡£C++Öеļ̳ÐÊÇÓÃÒ»¸öðºÅ±íʾ£¬ÔÚJavaÖÐÔòÒªÓÃextends¡£´ËÍ⣬¼Ì³ÐĬÈÏΪprivateÊôÐÔ£¬ËùÒÔ¼¸ºõ¿Ï¶¨ÐèÒªÓõ½public¹Ø¼ü×Ö£¬¾ÍÏóÕâÑù×öµÄÄÇÑù¡£´ó¼ÒÒ²»á·¢ÏÖCGI_vectorÓÐÒ»¸ö¸±±¾¹¹½¨Æ÷ÒÔ¼°Ò»¸öoperator=£¬µ«ËüÃǶ¼ÉùÃ÷³Éprivate¡£ÕâÑù×öÊÇΪÁË·ÀÖ¹±àÒëÆ÷ͬ²½Á½¸öº¯Êý£¨Èç¹û²»×Ô¼ºÉùÃ÷ËüÃÇ£¬Á½Õ߾ͻáͬ²½£©¡£µ«ÕâͬʱҲ½ûÖ¹Á˿ͻ§³ÌÐòÔ±°´Öµ»òÕßͨ¹ý¸³Öµ´«µÝÒ»¸öCGI_vector¡£
CGI_vectorµÄ¹¤×÷ÊÇ»ñÈ¡QUERY_STRING£¬²¢°ÑËü½âÎö³É¡°Ãû³Æ£¯Öµ¡±¶Ô£¬ÕâÐèÒªÔÚPairµÄ°ïÖúÏÂÍê³É¡£ËüÊ×ÏȽ«×Ö´®¸´ÖƵ½±¾µØ·ÖÅäµÄÄڴ棬²¢Óó£ÊýÖ¸Õëstart¸ú×ÙÆðʼµØÖ·£¨ÉÔºó»áÔÚÆÆ»µÆ÷ÖÐÓÃÓÚÊÍ·ÅÄڴ棩¡£Ëæºó£¬ËüÓÃ×Ô¼ºµÄnextPair()·½·¨½«×Ö´®½âÎö³ÉԭʼµÄ¡°Ãû³Æ£¯Öµ¡±¶Ô£¬¸÷¸ö¶ÔÖ®¼äÓÃÒ»¸ö¡°=¡±ºÍ¡°&¡±·ûºÅ·Ö¸ô¡£ÕâЩ¶ÔÓÉnextPair()´«µÝ¸øPair¹¹½¨Æ÷£¬ËùÒÔnextPair()·µ»ØµÄÊÇÒ»¸öPair¶ÔÏó¡£ËæºóÓÃpush_back()½«¸Ã¶ÔÏó¼ÓÈëvector¡£nextPair()±éÀúÍêÕû¸öQUERY_STRINGºó£¬»á·µ»ØÒ»¸öÁãÖµ¡£
ÏÖÔÚ»ù±¾¹¤¾ßÒѶ¨ÒåºÃ£¬ËüÃÇ¿ÉÒÔ¼òµ¥µØÔÚÒ»¸öCGI³ÌÐòÖÐʹÓ㬾ÍÏóÏÂÃæÕâÑù£º

879-881Ò³³ÌÐò

alreadyInList()º¯ÊýÓëǰһ¸ö°æ±¾¼¸ºõÊÇÍêÈ«ÏàͬµÄ£¬Ö»ÊÇËü¼Ù¶¨ËùÓеç×Óº¯¼þµØÖ·¶¼ÔÚÒ»¸ö¡°<>¡±ÄÚ¡£
ÔÚʹÓÃGET·½·¨Ê±£¨Í¨¹ýÔÚFORMÒýµ¼ÃüÁîµÄMETHOD±ê¼ÇÄÚ²¿ÉèÖ㬵«ÕâÔÚÕâÀïÓÉÊý¾Ý·¢Ë͵ķ½Ê½¿ØÖÆ£©£¬Web·þÎñÆ÷»áÊÕ¼¯Î»ÓÚ¡°?¡±ºóÃæµÄËùÓÐÐÅÏ¢£¬²¢°ÑËüÃÇÖÃÈë»·¾³±äÁ¿QUERY_STRING£¨²éѯ×Ö´®£©Àï¡£ËùÒÔΪÁ˶ÁÈ¡ÄÇЩÐÅÏ¢£¬±ØÐë»ñµÃQUERY_STRINGµÄÖµ£¬ÕâÊÇÓñê×¼µÄC¿âº¯Êýgetnv()Íê³ÉµÄ¡£ÔÚmain()ÖУ¬×¢Òâ¶ÔQUERY_STRINGµÄ½âÎöÓжàôÈÝÒ×£ºÖ»Ðè°ÑËü´«µÝ¸øÓÃÓÚCGI_vector¶ÔÏóµÄ¹¹½¨Æ÷£¨ÃûΪquery£©£¬Ê£ÏµÄËùÓй¤×÷¶¼»á×Ô¶¯½øÐС£´ÓÕâʱ¿ªÊ¼£¬ÎÒÃǾͿÉÒÔ´ÓqueryÖÐÈ¡³öÃû³ÆºÍÖµ£¬°ÑËüÃǵ±×÷Êý×é¿´´ý£¨ÕâÊÇÓÉÓÚoperator[]ÔÚvectorÀïÒѾ­¹ýÔØÁË£©¡£ÔÚµ÷ÊÔ´úÂëÖУ¬´ó¼Ò¿É¿´µ½ÕâÒ»ÇÐÊÇÈçºÎÔË×÷µÄ£»µ÷ÊÔ´úÂë·â×°ÔÚÔ¤´¦ÀíÆ÷Òýµ¼ÃüÁî#if defined(DEBUG)ºÍ#endif(DEBUG)Ö®¼ä¡£
ÏÖÔÚ£¬ÎÒÃÇÆÈÇÐÐèÒªÕÆÎÕһЩÓëCGIÓйصĶ«Î÷¡£CGI³ÌÐòÓÃÁ½¸ö·½Ê½Ö®Ò»´«µÝËüÃǵÄÊäÈ룺ÔÚGETÖ´ÐÐÆÚ¼äͨ¹ýQUERY_STRING´«µÝ£¨Ä¿Ç°ÓõÄÕâÖÖ·½Ê½£©£¬»òÕßÔÚPOSTÆÚ¼äͨ¹ý±ê×¼ÊäÈë¡£µ«CGI³ÌÐòͨ¹ý±ê×¼Êä³ö·¢ËÍ×Ô¼ºµÄÊä³ö£¬Õâͨ³£ÊÇÓÃC³ÌÐòµÄprintf()ÃüÁîʵÏֵġ£ÄÇôÕâ¸öÊä³öµ½ÄÄÀïÈ¥ÁËÄØ£¿Ëü»Øµ½ÁËWeb·þÎñÆ÷£¬ÓÉ·þÎñÆ÷¾ö¶¨¸ÃÈçºÎ´¦ÀíËü¡£·þÎñÆ÷×÷³ö¾ö¶¨µÄÒÀ¾ÝÊÇcontent-type£¨ÄÚÈÝÀàÐÍ£©Í·Êý¾Ý¡£ÕâÒâζ׿ÙÈçcontent-typeÍ·²»ÊÇËü¿´µ½µÄµÚÒ»¼þ¶«Î÷£¬¾Í²»ÖªµÀ¸ÃÈçºÎ´¦ÀíÊÕµ½µÄÊý¾Ý¡£Òò´Ë£¬ÎÒÃÇÎÞÂÛÈçºÎҲҪʹËùÓÐCGI³ÌÐò¶¼´Ócontent-typeÍ·¿ªÊ¼Êä³ö¡£
ÔÚĿǰÕâÖÖÇé¿öÏ£¬ÎÒÃÇÏ£Íû·þÎñÆ÷½«ËùÓÐÐÅÏ¢¶¼Ö±½Ó·´À¡»Ø¿Í»§³ÌÐò£¨Ò༴ÎÒÃǵijÌÐòƬ£¬ËüÃÇÕýÔڵȺò¸ø×Ô¼ºµÄ»Ø¸´£©¡£ÐÅÏ¢Ó¦¸ÃÔ­·â²»¶¯£¬ËùÒÔcontent-typeÉèΪtext/plain£¨´¿Îı¾£©¡£Ò»µ©·þÎñÆ÷¿´µ½Õâ¸öÍ·£¬¾Í»á½«ËùÓÐ×Ö´®¶¼Ö±½Ó·¢»¹¸ø¿Í»§¡£ËùÒÔÿ¸ö×Ö´®£¨Èý¸öÓÃÓÚ³ö´íÌõ¼þ£¬Ò»¸öÓÃÓڳɹ¦µÄ¼ÓÈ룩¶¼»á·µ»Ø³ÌÐòƬ¡£
ÎÒÃÇÓÃÏàͬµÄ´úÂëÌí¼Óµç×Óº¯¼þÃû³Æ£¨Óû§µÄÐÕÃû£©¡£µ«ÔÚCGI½Å±¾µÄÇé¿öÏ£¬²¢²»´æÔÚÎÞÏÞÑ­»·¡ª¡ª³ÌÐòÖ»ÊǼòµ¥µØÏìÓ¦£¬È»ºó¾ÍÖжϡ£Ã¿´ÎÓÐÒ»¸öCGIÇëÇóµÖ´ïʱ£¬³ÌÐò¶¼»áÆô¶¯£¬¶ÔÄǸöÇëÇó×÷³ö·´Ó¦£¬È»ºó×ÔÐйرա£ËùÒÔCPU²»¿ÉÄÜÏÝÈë¿ÕµÈ´ýµÄÞÏÞξ³µØ£¬Ö»ÓÐÆô¶¯³ÌÐòºÍ´ò¿ªÎļþʱ²Å´æÔÚÐÔÄÜÉϵÄÒþ»¼¡£Web·þÎñÆ÷¶ÔCGIÇëÇó½øÐпØÖÆÊ±£¬ËüµÄ¿ªÏú»á½«ÕâÖÖÒþ»¼¼õÇáµ½×îµÍ³Ì¶È¡£
ÕâÖÖÉè¼ÆµÄÁíÒ»¸öºÃ´¦ÊÇÓÉÓÚPairºÍCGI_vector¶¼µÃµ½Á˶¨Ò壬´ó¶àÊý¹¤×÷¶¼°ïÎÒÃÇ×Ô¶¯Íê³ÉÁË£¬ËùÒÔÖ»ÐèÐÞ¸Ämain()¼´¿ÉÇáËÉ´´½¨×Ô¼ºµÄCGI³ÌÐò¡£¾¡¹ÜС·þÎñ³ÌÐò£¨Servlet£©×îÖÕ»á±äµÃÔ½À´Ô½Á÷ÐУ¬µ«ÎªÁË´´½¨¿ìËÙµÄCGI³ÌÐò£¬C++ÈÔÈ»ÏԵ÷dz£·½±ã¡£

15.6.4 POSTµÄ¸ÅÄî
ÔÚÐí¶àÓ¦ÓóÌÐòÖÐʹÓÃGET¶¼Ã»ÓÐÎÊÌâ¡£µ«ÊÇ£¬GETÒªÇóͨ¹ýÒ»¸ö»·¾³±äÁ¿½«×Ô¼ºµÄÊý¾Ý´«µÝ¸øCGI³ÌÐò¡£µ«¼ÙÈçGET×Ö´®¹ý³¤£¬ÓÐЩWeb·þÎñÆ÷¿ÉÄÜÓùâ×Ô¼ºµÄ»·¾³¿Õ¼ä£¨Èô×Ö´®³¤¶È³¬¹ý200×Ö·û£¬¾ÍÓ¦¿ªÊ¼¹ØÐÄÕâ·½ÃæµÄÎÊÌ⣩¡£CGIΪ´ËÌṩÁËÒ»¸ö½â¾ö·½°¸£ºPOST¡£Í¨¹ýPOST£¬Êý¾Ý¿ÉÒÔ±àÂ룬²¢°´ÓëGETÏàͬµÄ·½·¨Á¬½áÆðÀ´¡£µ«POSTÀûÓñê×¼ÊäÈ뽫±àÂë¹ýºóµÄ²éѯ×Ö´®´«µÝ¸øCGI³ÌÐò¡£ÎÒÃÇÒª×öµÄÈ«²¿ÊÂÇé¾ÍÊÇÅжϲéѯ×Ö´®µÄ³¤¶È£¬¶øÕâ¸ö³¤¶ÈÒÑÔÚ»·¾³±äÁ¿CONTENT_LENGTHÖб£´æºÃÁË¡£Ò»µ©ÖªµÀÁ˳¤¶È£¬¾Í¿É×ÔÓÉ·ÖÅä´æ´¢¿Õ¼ä£¬²¢´Ó±ê×¼ÊäÈëÖжÁÈëÖ¸¶¨ÊýÁ¿µÄ×Ö·û¡£
¶ÔÒ»¸öÓÃÀ´¿ØÖÆPOSTµÄCGI³ÌÐò£¬ÓÉCGITools.hÌṩµÄPairºÍCGI_vector¾ù¿É²»¼ÓË¿ºÁ¸Ä±äµØÊ¹Óá£ÏÂÃæÕâ¶Î³ÌÐò½ÒʾÁËдÕâÑùµÄÒ»¸öCGI³ÌÐòÓжàô¼òµ¥¡£Õâ¸öÀý×Ó½«²ÉÓá°´¿¡±C++£¬ËùÒÔstudio.h¿â±»iostream£¨IOÊý¾ÝÁ÷£©´úÌæ¡£¶ÔÓÚiostream£¬ÎÒÃÇ¿ÉÒÔʹÓÃÁ½¸öÔ¤Ïȶ¨ÒåºÃµÄ¶ÔÏó£ºcin£¬ÓÃÓÚͬ±ê×¼ÊäÈëÁ¬½Ó£»ÒÔ¼°cout£¬ÓÃÓÚͬ±ê×¼Êä³öÁ¬½Ó¡£Óм¸¸ö°ì·¨¿É´ÓcinÖжÁÈëÊý¾ÝÒÔ¼°ÏòcoutÖÐдÈë¡£µ«ÏÂÃæÕâ¸ö³ÌÐò×¼±¸²ÉÓñê×¼·½·¨£ºÓá°<<¡±½«ÐÅÏ¢·¢¸øcout£¬²¢ÓÃÒ»¸ö³ÉÔ±º¯Êý£¨´ËʱÊÇread()£©´ÓcinÖжÁÈëÊý¾Ý£º

883Ò³³ÌÐò

getenv()º¯Êý·µ»ØÖ¸ÏòÒ»¸ö×Ö´®µÄÖ¸Õ룬ÄǸö×Ö´®Ö¸Ê¾×ÅÄÚÈݵij¤¶È¡£ÈôÖ¸ÕëΪÁ㣬±íÃ÷CONTENT_LENGTH»·¾³±äÁ¿ÉÐδÉèÖã¬ËùÒԿ϶¨Ä³¸öµØ·½³öÁËÎÊÌâ¡£·ñÔò¾Í±ØÐëÓÃANSI C¿âº¯Êýatoi()½«×Ö´®×ª»»³ÉÒ»¸öÕûÊý¡£Õâ¸ö³¤¶È½«ÓënewÒ»ÆðÔËÓ㬷ÖÅä×ã¹»µÄ´æ´¢¿Õ¼ä£¬ÒÔ±ãÈÝÄɲéѯ×Ö´®£¨Áí¼ÓËüµÄ¿ÕÖÐÖ¹·û£©¡£ËæºóΪcin()µ÷ÓÃread()¡£read()º¯ÊýÐèҪȡµÃÖ¸ÏòÄ¿±ê»º³åÇøµÄÒ»¸öÖ¸ÕëÒÔ¼°Òª¶ÁÈëµÄ×Ö½ÚÊý¡£ËæºóÓÿÕ×Ö·û£¨null£©ÖÐÖ¹query_str£¬Ö¸³öÒѾ­µÖ´ï×Ö´®µÄĩ⣬Õâ¾Í½Ð×÷¡°¿ÕÖÐÖ¹¡±¡£
µ½Õâ¸öʱºò£¬ÎÒÃǵõ½µÄ²éѯ×Ö´®ÓëGET²éѯ×Ö´®ÒѾ­Ã»ÓÐÊ²Ã´Çø±ð£¬ËùÒÔ°ÑËü´«µÝ¸øÓÃÓÚCGI_vectorµÄ¹¹½¨Æ÷¡£Ëæºó±ãºÍǰÀýÒ»Ñù£¬ÎÒÃÇ¿ÉÒÔ×ÔÓÉvectorÄÚ²»Í¬µÄ×ֶΡ£
Ϊ²âÊÔÕâ¸ö³ÌÐò£¬±ØÐë°ÑËü±àÒëµ½Ö÷»úWeb·þÎñÆ÷µÄcgi-binĿ¼Ï¡£È»ºó¾Í¿ÉÒÔдһ¸ö¼òµ¥µÄHTMLÒ³½øÐвâÊÔ£¬¾ÍÏóÏÂÃæÕâÑù£º

884Ò³³ÌÐò

ÌîºÃÕâ¸ö±íµ¥²¢Ìá½»³öÈ¥ÒԺ󣬻áµÃµ½Ò»¸ö¼òµ¥µÄÎı¾Ò³£¬ÆäÖаüº¬Á˽âÎö³öÀ´µÄ½á¹û¡£´ÓÖпÉÖªµÀCGI³ÌÐòÊÇ·ñÔÚÕý³£¹¤×÷¡£
µ±È»£¬ÓÃÒ»¸ö³ÌÐòƬÀ´Ìá½»Êý¾ÝÏԵøüÓÐȤһЩ¡£È»¶ø£¬POSTÊý¾ÝµÄÌá½»ÊôÓÚÒ»¸ö²»Í¬µÄ¹ý³Ì¡£ÔÚÓ󣹿·½Ê½µ÷ÓÃÁËCGI³ÌÐòÒԺ󣬱ØÐëÁíÐн¨Á¢Óë·þÎñÆ÷µÄÒ»¸öÁ¬½Ó£¬ÒԱ㽫²éѯ×Ö´®·´À¡¸øËü¡£·þÎñÆ÷Ëæºó»á½øÐÐÒ»·¬´¦Àí£¬ÔÙͨ¹ý±ê×¼ÊäÈ뽫²éѯ×Ö´®·´À¡»ØCGI³ÌÐò¡£
Ϊ½¨Á¢Óë·þÎñÆ÷µÄÒ»¸öÖ±½ÓÁ¬½Ó£¬±ØÐëÈ¡µÃ×Ô¼º´´½¨µÄURL£¬È»ºóµ÷ÓÃopenConnection()´´½¨Ò»¸öURLConnection¡£µ«ÊÇ£¬ÓÉÓÚURLConnectionÒ»°ã²»ÔÊÐíÎÒÃǰÑÊý¾Ý·¢¸øËü£¬ËùÒÔ±ØÐëºÜ¿ÉЦµØµ÷ÓÃsetDoOutput(true)º¯Êý£¬Í¬Ê±µ÷ÓõϹ°üÀ¨setDoInput(true)ÒÔ¼°setAllowUserInteraction(false)¡ª¡ª×¢ÊÍ¢Þ¡£×îºó£¬¿Éµ÷ÓÃgetOutputStream()À´´´½¨Ò»¸öOutputStream£¨Êä³öÊý¾ÝÁ÷£©£¬²¢°ÑËü·â×°µ½Ò»¸öDataOutputStreamÀÒÔ±ãÄܰ´´«Í³·½Ê½Í¬ËüͨÐÅ¡£ÏÂÃæÁгöµÄ±ãÊÇÒ»¸öÓÃÓÚÍê³ÉÉÏÊö¹¤×÷µÄ³ÌÐòƬ£¬±ØÐëÔÚ´ÓËüµÄ¸÷¸ö×Ö¶ÎÀïÊÕ¼¯ÁËÊý¾ÝÖ®ºóÔÙÖ´ÐÐËü£º

885-887Ò³³ÌÐò

¢Þ£ºÎÒ²»µÃ²»Ëµ×Ô¼º²¢Ã»ÓÐÕæÕýÀí½âÕâ¶ù¶¼·¢ÉúÁËʲôÊÂÇ飬ÕâЩ¸ÅÄî¶¼ÊÇ´ÓElliotte Rusty Harold±àÖøµÄ¡¶Java Network Programming¡·ÀïµÃÀ´µÄ£¬¸ÃÊéÓÉO'ReillyÓÚ1997Äê³ö°æ¡£ËûÔÚÊéÖÐÌáµ½ÁËJavaÁ¬Íøº¯Êý¿âÖгöÏÖµÄÐí¶àÁîÈËÃÔ»óµÄBug¡£ËùÒÔÒ»µ©Éæ×ãÕâЩÁìÓò£¬ÊÂÇé¾Í²»ÊDZàд´úÂ룬ȻºóÈÃËü×Ô¼ºÔËÐÐÄÇô¼òµ¥¡£Ò»¶¨Òª¾¯ÌèDZÔÚµÄÏÝÚ壡

ÐÅÏ¢·¢Ë͵½·þÎñÆ÷ºó£¬ÎÒÃǵ÷ÓÃgetInputStream()£¬²¢°Ñ·µ»ØÖµ·â×°µ½Ò»¸öDataInputStreamÀÒÔ±ã×Ô¼ºÄܶÁÈ¡½á¹û¡£Òª×¢ÒâµÄÒ»¼þÊÂÇéÊǽá¹ûÒÔÎı¾ÐеÄÐÎʽÏÔʾÔÚÒ»¸öTextArea£¨Îı¾ÇøÓò£©ÖС£ÎªÊ²Ã´²»¼òµ¥µØÊ¹ÓÃgetAppletContext().showDocument(u)ÄØ£¿ÊÂʵÉÏ£¬ÕâÕýÊÇÄÇЩÏÝÚåÖеÄÒ»¸ö¡£ÉÏÊö´úÂë¿ÉÒԺܺõع¤×÷£¬µ«¼ÙÈçÊÔͼ»»ÓÃshowDocument()£¬¼¸ºõÒ»Çж¼»áÍ£Ö¹ÔËÐС£Ò²¾ÍÊÇ˵£¬showDocument()ȷʵ¿ÉÒÔÔËÐУ¬µ«´ÓPOSTtestµÃµ½µÄ·µ»Ø½á¹ûÊÇ¡°Zero CONTENT_LENGTH¡±£¨ÄÚÈݳ¤¶ÈΪÁ㣩¡£ËùÒÔ²»ÖªµÀΪʲôԭÒò£¬showDocument()×èÖ¹ÁËPOST²éѯÏòCGI³ÌÐòµÄ´«µÝ¡£ÎÒºÜÄÑÅжÏÕâµ½µ×ÊÇÒ»¸öÔÚÒÔºó°æ±¾Àï»áÐÞ¸´µÄBug£¬»¹ÊÇÓÉÓÚÎÒµÄÀí½â²»¹»£¨ÎÒ¿´¹ýµÄÊé¶Ô´Ë½²µÃ¶¼ºÜÄ£ºý£©¡£µ«ÎÞÂÛÔÚÄÄÖÖÇé¿öÏ£¬Ö»ÒªÄܼá³ÖÔÚÎı¾ÇøÓòÀï¹Û¿´×ÔCGI³ÌÐò·µ»ØµÄÄÚÈÝ£¬ÉÏÊö³ÌÐòƬÔËÐÐʱ¾ÍûÓÐÎÊÌâ¡£

15.7 ÓÃJDBCÁ¬½ÓÊý¾Ý¿â
¾Ý¹ÀË㣬½«½üÒ»°ëµÄÈí¼þ¿ª·¢¶¼ÒªÉæ¼°¿Í»§£¨»ú£©£¯·þÎñÆ÷·½ÃæµÄ²Ù×÷¡£JavaΪ×Ô¼º±£Ö¤µÄÒ»Ïî³öÉ«ÄÜÁ¦¾ÍÊǹ¹½¨ÓëÆ½Ì¨Î޹صĿͻ§»ú£¯·þÎñÆ÷Êý¾Ý¿âÓ¦Óá£ÔÚJava 1.1ÖУ¬ÕâÒ»±£Ö¤Í¨¹ýJavaÊý¾Ý¿âÁ¬½Ó£¨JDBC£©ÊµÏÖÁË¡£
Êý¾Ý¿â×îÖ÷ÒªµÄÒ»¸öÎÊÌâ¾ÍÊǸ÷¼Ò¹«Ë¾Ö®¼äµÄ¹æ¸ñ´óÕ½¡£È·Êµ´æÔÚÒ»ÖÖ¡°±ê×¼¡±Êý¾Ý¿âÓïÑÔ£¬¼´¡°½á¹¹²éѯÓïÑÔ¡±£¨SQL-92£©£¬µ«Í¨³£¶¼±ØÐëÈ·ÇÐÖªµÀ×Ô¼ºÒªºÍÄļÒÊý¾Ý¿â¹«Ë¾´ò½»µÀ£¬·ñÔò¼«Ò׳öÎÊÌ⣬¾¡¹Ü´æÔÚËùνµÄ¡°±ê×¼¡±¡£JDBCÊÇÃæÏò¡°ÓëÆ½Ì¨Î޹ء±Éè¼ÆµÄ£¬ËùÒÔÔÚ±à³ÌµÄʱºò²»±Ø¹ØÐÄ×Ô¼ºÒªÊ¹ÓõÄÊÇʲôÊý¾Ý¿â²úÆ·¡£È»¶ø£¬´ÓJDBCÀïÈÔÓпÉÄÜ·¢³ö¶ÔijЩÊý¾Ý¿â¹«Ë¾×¨Óù¦Äܵĵ÷Óã¬ËùÒÔÈÔÈ»²»¿ÉÈÎÐÔÍýΪ¡£
ºÍJavaÖеÄÐí¶àAPIÒ»Ñù£¬JDBCÒ²×öµ½Á˾¡Á¿µÄ¼ò»¯¡£ÎÒÃÇ·¢³öµÄ·½·¨µ÷ÓöÔÓ¦ÓÚ´ÓÊý¾Ý¿âÊÕ¼¯Êý¾ÝʱÏ뵱ȻµÄ×ö·¨£ºÍ¬Êý¾Ý¿âÁ¬½Ó£¬´´½¨Ò»¸öÓï¾ä²¢Ö´Ðвéѯ£¬È»ºó´¦Àí½á¹û¼¯¡£
ΪʵÏÖÕâÒ»¡°ÓëÆ½Ì¨Î޹ء±µÄÌØµã£¬JDBCΪÎÒÃÇÌṩÁËÒ»¸ö¡°Çý¶¯³ÌÐò¹ÜÀíÆ÷¡±£¬ËüÄܶ¯Ì¬Î¬»¤Êý¾Ý¿â²éѯËùÐèµÄËùÓÐÇý¶¯³ÌÐò¶ÔÏó¡£ËùÒÔ¼ÙÈçÒªÁ¬½ÓÓÉÈý¼Ò¹«Ë¾¿ª·¢µÄ²»Í¬ÖÖÀàµÄÊý¾Ý¿â£¬¾ÍÐèÒªÈý¸öµ¥¶ÀµÄÇý¶¯³ÌÐò¶ÔÏó¡£Çý¶¯³ÌÐò¶ÔÏó»áÔÚ×°ÔØÊ±ÓÉ¡°Çý¶¯³ÌÐò¹ÜÀíÆ÷¡±×Ô¶¯×¢²á£¬²¢¿ÉÓÃClass.forName()Ç¿ÐÐ×°ÔØ¡£
Ϊ´ò¿ªÒ»¸öÊý¾Ý¿â£¬±ØÐë´´½¨Ò»¸ö¡°Êý¾Ý¿âURL¡±£¬ËüÒªÖ¸¶¨ÏÂÊöÈý·½ÃæµÄÄÚÈÝ£º
(1) Óá°jdbc¡±Ö¸³öҪʹÓÃJDBC¡£
(2) ¡°×ÓЭÒ顱£ºÇý¶¯³ÌÐòµÄÃû×Ö»òÕßÒ»ÖÖÊý¾Ý¿âÁ¬½Ó»úÖÆµÄÃû³Æ¡£ÓÉÓÚJDBCµÄÉè¼Æ´ÓODBCÎüÊÕÁËÐí¶àÁé¸Ð£¬ËùÒÔ¿ÉÒÔÑ¡ÓõĵÚÒ»ÖÖ×ÓЭÒé¾ÍÊÇ¡°jdbc-odbcÇÅ¡±£¬ËüÓá°odbc¡±¹Ø¼ü×Ö¼´¿ÉÖ¸¶¨¡£
(3) Êý¾Ý¿â±êʶ·û£ºËæÊ¹ÓõÄÊý¾Ý¿âÇý¶¯³ÌÐòµÄ²»Í¬¶ø±ä»¯£¬µ«Ò»°ã¶¼ÌṩÁËÒ»¸ö±È½Ï·ûºÏÂß¼­µÄÃû³Æ£¬ÓÉÊý¾Ý¿â¹ÜÀíÈí¼þÓ³É䣨¶ÔÓ¦£©µ½±£´æÁËÊý¾Ý±íµÄÒ»¸öÎïÀíĿ¼¡£ÎªÊ¹×Ô¼ºµÄÊý¾Ý¿â±êʶ·û¾ßÓÐÈκκ¬Ò壬±ØÐëÓÃ×Ô¼ºµÄÊý¾Ý¿â¹ÜÀíÈí¼þΪ×Ô¼ºÏ²»¶µÄÃû×Ö×¢²á£¨×¢²áµÄ¾ßÌå¹ý³ÌÓÖËæÔËÐÐÆ½Ì¨µÄ²»Í¬¶ø±ä»¯£©¡£
ËùÓÐÕâЩÐÅÏ¢¶¼Í³Ò»±àÒëµ½Ò»¸ö×Ö´®À¼´¡°Êý¾Ý¿âURL¡±¡£¾Ù¸öÀý×ÓÀ´Ëµ£¬ÈôÏëͨ¹ýODBC×ÓЭÒéͬһ¸ö±êʶΪ¡°people¡±µÄÊý¾Ý¿âÁ¬½Ó£¬ÏàÓ¦µÄÊý¾Ý¿âURL¿ÉÉèΪ£º
String dbUrl = "jdbc:odbc:people"
Èç¹ûͨ¹ýÒ»¸öÍøÂçÁ¬½Ó£¬Êý¾Ý¿âURLÒ²ÐèÒª°üº¬¶ÔÔ¶³Ì»úÆ÷½øÐбêʶµÄÐÅÏ¢¡£
×¼±¸ºÃͬÊý¾Ý¿âÁ¬½Óºó£¬¿Éµ÷Óþ²Ì¬·½·¨DriverManager.getConnection()£¬½«Êý¾Ý¿âµÄURLÒÔ¼°½øÈëÄǸöÊý¾Ý¿âËùÐèµÄÓû§ÃûÃÜÂë´«µÝ¸øËü¡£µÃµ½µÄ·µ»Ø½á¹ûÊÇÒ»¸öConnection¶ÔÏó£¬ÀûÓÃËü¼´¿É²éѯºÍ²Ù×ÝÊý¾Ý¿â¡£
ÏÂÃæÕâ¸öÀý×Ó½«´ò¿ªÒ»¸öÁªÂçÐÅÏ¢Êý¾Ý¿â£¬²¢¸ù¾ÝÃüÁîÐÐÌṩµÄ²ÎÊý²éѯһ¸öÈ˵ÄÐÕ£¨Last Name£©¡£ËüֻѡÔñÄÇЩÓÐE-mailµØÖ·µÄÈ˵ÄÃû×Ö£¬È»ºóÁÐÓ¡³ö·ûºÏ²éѯÌõ¼þµÄËùÓÐÈË£º

888-889Ò³³ÌÐò

¿ÉÒÔ¿´µ½£¬Êý¾Ý¿âURLµÄ´´½¨¹ý³ÌÓëÎÒÃÇÇ°Ãæ½²ÊöµÄÍêȫһÑù¡£ÔÚ¸ÃÀýÖУ¬Êý¾Ý¿âδÉèÃÜÂë±£»¤£¬ËùÒÔÓû§ÃûºÍÃÜÂë¶¼Êǿմ®¡£
ÓÃDriverManager.getConnection()½¨ºÃÁ¬½Óºó£¬½ÓÏÂÀ´¿É¸ù¾Ý½á¹ûConnection¶ÔÏó´´½¨Ò»¸öStatement£¨Óï¾ä£©¶ÔÏó£¬ÕâÊÇÓÃcreateStatement()·½·¨ÊµÏֵġ£¸ù¾Ý½á¹ûStatement£¬ÎÒÃǿɵ÷ÓÃexecuteQuery()£¬ÏòÆä´«µÝ°üº¬ÁËSQL-92±ê×¼SQLÓï¾äµÄÒ»¸ö×Ö´®£¨²»¾Ã¾Í»á¿´µ½ÈçºÎ×Ô¶¯´´½¨ÕâÀàÓï¾ä£¬ËùÒÔû±ØÒªÔÚÕâÀïÖªµÀ¹ØÓÚSQL¸ü¶àµÄ¶«Î÷£©¡£
executeQuery()·½·¨»á·µ»ØÒ»¸öResultSet£¨½á¹û¼¯£©¶ÔÏó£¬ËüÓë¼Ì³ÐÆ÷·Ç³£ÏàËÆ£ºnext()·½·¨½«¼Ì³ÐÆ÷ÒÆÖÁÓï¾äÖеÄÏÂÒ»Ìõ¼Ç¼£»Èç¹ûÒѵִï½á¹û¼¯µÄĩ⣬Ôò·µ»Ønull¡£ÎÒÃǿ϶¨ÄÜ´ÓexecuteQuery()·µ»ØÒ»¸öResultSet¶ÔÏ󣬼´Ê¹²éѯ½á¹ûÊǸö¿Õ¼¯£¨Ò²¾ÍÊÇ˵£¬²»»á²úÉúÒ»¸öÎ¥Àý£©¡£×¢ÒâÔÚÊÔͼ¶ÁÈ¡ÈκμǼÊý¾Ý֮ǰ£¬¶¼±ØÐëµ÷ÓÃÒ»´Înext()¡£Èô½á¹û¼¯Îª¿Õ£¬ÄÇô¶Ônext()µÄÕâ¸öÊ״ε÷Óþͻ᷵»Øfalse¡£¶ÔÓÚ½á¹û¼¯ÖеÄÿÌõ¼Ç¼£¬¶¼¿É½«×Ö¶ÎÃû×÷Ϊ×Ö´®Ê¹Ó㨵±È»»¹ÓÐÆäËû·½·¨£©£¬´Ó¶øÑ¡Ôñ²»Í¬µÄ×ֶΡ£ÁíÍâҪעÒâµÄÊÇ×Ö¶ÎÃûµÄ´óСдÊÇÎ޹ؽôÒªµÄ¡ª¡ªSQLÊý¾Ý¿â²»ÔÚºõÕâ¸öÎÊÌ⡣Ϊ¾ö¶¨·µ»ØµÄÀàÐÍ£¬¿Éµ÷ÓÃgetString()£¬getFloat()µÈµÈ¡£µ½Õâ¸öʱºò£¬ÎÒÃÇÒѾ­ÓÃJavaµÄԭʼ¸ñʽµÃµ½ÁË×Ô¼ºµÄÊý¾Ý¿âÊý¾Ý£¬½ÓÏÂÈ¥¿ÉÓÃJava´úÂë×ö×Ô¼ºÏë×öµÄÈκÎÊÂÇéÁË¡£

15.7.1 ÈÃʾÀýÔËÐÐÆðÀ´
¾ÍJDBCÀ´Ëµ£¬´úÂë±¾ÉíÊǺÜÈÝÒ×Àí½âµÄ¡£×îÁîÈËÃÔ»óµÄ²¿·ÖÊÇÈçºÎʹËüÔÚ×Ô¼ºÌض¨µÄϵͳÉÏÔËÐÐÆðÀ´¡£Ö®ËùÒÔ»á¸Ðµ½ÃÔ»ó£¬ÊÇÓÉÓÚËüÒªÇóÎÒÃÇÕÆÎÕÈçºÎ²ÅÄÜʹJDBCÇý¶¯³ÌÐòÕýÈ·×°ÔØ£¬ÒÔ¼°ÈçºÎÓÃÎÒÃǵÄÊý¾Ý¿â¹ÜÀíÈí¼þÀ´ÉèÖÃÒ»¸öÊý¾Ý¿â¡£
µ±È»£¬¾ßÌåµÄ²Ù×÷¹ý³ÌÔÚ²»Í¬µÄ»úÆ÷ÉÏÒ²»áÓÐËùÇø±ð¡£µ«Õâ¶ùÌṩµÄÔÚ32λWindows»·¾³Ï²Ù×÷¹ý³Ì¿ÉÓÐЧ°ïÖú´ó¼ÒÀí½âÔÚÆäËûƽ̨ÉϵIJÙ×÷¡£

1. ²½Öè1£ºÑ°ÕÒJDBCÇý¶¯³ÌÐò
ÉÏÊö³ÌÐò°üº¬ÁËÏÂÃæÕâÌõÓï¾ä£º
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
ÕâËÆºõ°µÊ¾×ÅÒ»¸öĿ¼½á¹¹£¬µ«´ó¼Ò²»Òª±»ËüÃÉÆ­ÁË¡£ÔÚÎÒÊÖÉÏÕâ¸öJDK 1.1°²×°°æ±¾ÖУ¬¸ù±¾²»´æÔÚ½Ð×÷JdbcOdbcDriver.classµÄÒ»¸öÎļþ¡£ËùÒÔ¼ÙÈçÔÚ¿´ÁËÕâ¸öÀý×ÓºóȥѰÕÒËü£¬ÄÇô±ØÈ»»áͽÀͶø·µ¡£ÁíһЩÈËÌṩµÄÀý×ÓʹÓõÄÊÇÒ»¸ö¼ÙÃû×Ö£¬Èç¡°myDriver.ClassName¡±£¬µ«ÈËÃÇ´Ó×ÖÃæÉϵò»µ½ÈκΰïÖú¡£ÊÂʵÉÏ£¬ÉÏÊöÓÃÓÚ×°ÔØjdbc-odbcÇý¶¯³ÌÐò£¨Êµ¼ÊÊÇÓëJDK 1.1ÅäÌ×ÌṩµÄΨһÇý¶¯£©µÄÓï¾äÔÚÁª»úÎĵµµÄ¶à´¦µØ·½¾ùÓгöÏÖ£¨ÌرðÊÇÔÚÒ»¸ö±ê¼ÇΪ¡°JDBC-ODBC Bridge Driver¡±µÄÒ³ÄÚ£©¡£ÈôÉÏÃæµÄ×°ÔØÓï¾ä²»Äܹ¤×÷£¬ÄÇôËüµÄÃû×Ö¿ÉÄÜÒÑËæ×ÅJavaа汾µÄ·¢²¼¶ø¸Ä±äÁË£»´ËʱӦµ½Áª»úÎĵµÀïѰÕÒеıíÊö·½Ê½¡£
Èô×°ÔØÓï¾ä³ö´í£¬»áÔÚÕâ¸öʱºòµÃµ½Ò»¸öÎ¥Àý¡£ÎªÁ˼ìÑéÇý¶¯³ÌÐò×°ÔØÓï¾äÊDz»ÊÇÄÜÕý³£¹¤×÷£¬Ç뽫¸ÃÓï¾äºóÃæÖ±µ½catch´Ó¾äÖ®¼äµÄ´úÂëÔÝʱÉèΪעÊÍ¡£Èç¹û³ÌÐòÔËÐÐʱδ³öÏÖÎ¥Àý£¬±íÃ÷Çý¶¯³ÌÐòµÄ×°ÔØÊÇÕýÈ·µÄ¡£

2. ²½Öè2£ºÅäÖÃÊý¾Ý¿â
ͬÑùµØ£¬ÎÒÃÇÖ»ÏÞÓÚÔÚ32λWindows»·¾³Öй¤×÷£»Äú¿ÉÄÜÐèÒªÑо¿Ò»ÏÂ×Ô¼ºµÄ²Ù×÷ϵͳ£¬ÕÒ³öÊʺÏ×Ô¼ºÆ½Ì¨µÄÅäÖ÷½·¨¡£
Ê×ÏÈ´ò¿ª¿ØÖÆÃæ°å¡£ÆäÖпÉÄÜÓÐÁ½¸öͼ±ê¶¼º¬ÓС°ODBC¡±×ÖÑù£¬±ØÐëÑ¡ÔñÄǸö¡°32λODBC¡±£¬ÒòΪÁíÒ»¸öÊÇΪÁ˱£³ÖÓë16λÈí¼þµÄÏòºó¼æÈݶøÉèÖõģ¬ºÍJDBC»ìÓÃûÓÐÈκνá¹û¡£Ë«»÷¡°32λODBC¡±Í¼±êºó£¬¿´µ½µÄÓ¦¸ÃÊÇÒ»¸ö¿¨Æ¬Ê½¶Ô»°¿ò£¬ÉÏÃæÒ»ÅÅÓжà¸ö¿¨Æ¬±êÇ©£¬ÆäÖаüÀ¨¡°Óû§DSN¡±¡¢¡°ÏµÍ³DSN¡±¡¢¡°ÎļþDSN¡±µÈµÈ¡£ÆäÖУ¬¡°DSN¡±´ú±í¡°Êý¾ÝÔ´Ãû³Æ¡±£¨Data Source Name£©¡£ËüÃǶ¼ÓëJDBC-ODBCÇÅÓйأ¬µ«ÉèÖÃÊý¾Ý¿âÊ±Î¨Ò»ÖØÒªµÄµØ·½¡°ÏµÍ³DSN¡±¡£¾¡¹ÜÈç´Ë£¬ÓÉÓÚÐèÒª²âÊÔ×Ô¼ºµÄÅäÖÃÒÔ¼°´´½¨²éѯ£¬ËùÒÔÒ²ÐèÒªÔÚ¡°ÎļþDSN¡±ÖÐÉèÖÃ×Ô¼ºµÄÊý¾Ý¿â¡£ÕâÑù±ã¿ÉÈÃMicrosoft Query¹¤¾ß£¨ÓëMicrosoft OfficeÅäÌ×Ìṩ£©ÕýÈ·µØÕÒµ½Êý¾Ý¿â¡£×¢ÒâһЩÈí¼þ¹«Ë¾Ò²Éè¼ÆÁË×Ô¼ºµÄ²éѯ¹¤¾ß¡£
×îÓÐȤµÄÊý¾Ý¿âÊÇÎÒÃÇÒѾ­Ê¹ÓùýµÄÒ»¸ö¡£±ê×¼ODBCÖ§³Ö¶àÖÖÎļþ¸ñʽ£¬ÆäÖаüÀ¨Óɲ»Í¬¹«Ë¾×¨ÓõÄһЩ¸ñʽ£¬ÈçdBASE¡£È»¶ø£¬ËüÒ²°üÀ¨Á˼òµ¥µÄ¡°¶ººÅ·Ö¸ôASCII¡±¸ñʽ£¬Ëü¼¸ºõÊÇÿÖÖÊý¾Ý¹¤¾ß¶¼Äܹ»Éú³ÉµÄ¡£¾ÍĿǰµÄÀý×ÓÀ´Ëµ£¬ÎÒֻѡÔñ×Ô¼ºµÄ¡°people¡±Êý¾Ý¿â¡£ÕâÊÇÎÒ¶àÄêÀ´Ò»Ö±ÔÚά»¤µÄÒ»¸öÊý¾Ý¿â£¬ÖмäʹÓÃÁ˸÷ÖÖÁªÂç¹ÜÀí¹¤¾ß¡£ÎÒ°ÑËüµ¼³ö³ÉΪһ¸ö¶ººÅ·Ö¸ôµÄASCIIÎļþ£¨Ò»°ãÓиö.csvÀ©Õ¹Ãû£¬ÓÃOutlook Expressµ¼³öͨÐŲ¾Ê±Òà¿ÉÑ¡ÓÃͬÑùµÄÎļþ¸ñʽ£©¡£ÔÚ¡°ÎļþDSN¡±ÇøÓò£¬ÎÒ°´Ï¡°Ìí¼Ó¡±°´Å¥£¬Ñ¡ÔñÓÃÓÚ¿ØÖƶººÅ·Ö¸ôASCIIÎļþµÄÎı¾Çý¶¯³ÌÐò£¨Microsoft Text Driver£©£¬È»ºó³·Ïû¶Ô¡°Ê¹Óõ±Ç°Ä¿Â¼¡±µÄÑ¡Ôñ£¬ÒԱ㵼³öÊý¾ÝÎļþʱ¿ÉÒÔ×ÔÐÐÖ¸¶¨Ä¿Â¼¡£
´ó¼Ò»á×¢Òâµ½ÔÚ½øÐÐÕâЩ¹¤×÷µÄʱºò£¬²¢Ã»ÓÐʵ¼ÊÖ¸¶¨Ò»¸öÎļþ£¬Ö»ÊÇÒ»¸öĿ¼¡£ÄÇÊÇÒòΪÊý¾Ý¿âͨ³£ÊÇÓÉij¸öĿ¼ÏµÄһϵÁÐÎļþ¹¹³ÉµÄ£¨¾¡¹ÜÒ²¿ÉÄܲÉÓÃÆäËûÐÎʽ£©¡£Ã¿¸öÎļþÒ»°ã¶¼°üº¬Á˵¥¸ö¡°Êý¾Ý±í¡±£¬¶øÇÒSQLÓï¾ä¿ÉÒÔ²úÉú´ÓÊý¾Ý¿âÖжà¸ö±íժȡ³öÀ´µÄ½á¹û£¨Õâ½Ð×÷¡°ÁªºÏ¡±£¬»òÕßjoin£©Ö»°üº¬Á˵¥ÕűíµÄÊý¾Ý¿â£¨¾ÍÏóĿǰÕâ¸ö£©Í¨³£½Ð×÷¡°Æ½ÃæÎļþÊý¾Ý¿â¡±¡£¶ÔÓÚ´ó¶àÊýÎÊÌ⣬Èç¹ûÒѾ­³¬¹ýÁ˼òµ¥µÄÊý¾Ý´æ´¢Óë»ñÈ¡Á¦ËùÄܼ°µÄ·¶Î§£¬ÄÇô±ØÐëʹÓöà¸öÊý¾Ý±í¡£Í¨¹ý¡°ÁªºÏ¡±£¬´Ó¶ø»ñµÃÏ£ÍûµÄ½á¹û¡£ÎÒÃǰÑÕâЩ½Ð×÷¡°¹ØÏµÐÍ¡±Êý¾Ý¿â¡£

3. ²½Öè3£º²âÊÔÅäÖÃ
ΪÁ˶ÔÅäÖýøÐвâÊÔ£¬ÐèÓÃÒ»ÖÖ·½Ê½ºËʵÊý¾Ý¿âÊÇ·ñ¿ÉÓɲéѯËüµÄÒ»¸ö³ÌÐò¡°¼ûµ½¡±¡£µ±È»£¬¿ÉÒÔ¼òµ¥µØÔËÐÐÉÏÊöµÄJDBCʾ·¶³ÌÐò£¬²¢¼ÓÈëÏÂÊöÓï¾ä£º
Connection c = DriverManager.getConnection(
dbUrl, user, password);
ÈôÖÀ³öÒ»¸öÎ¥Àý£¬±íÃ÷ÄãµÄÅäÖÃÓÐÎó¡£
È»¶ø£¬´ËʱºÜÓбØÒªÊ¹ÓÃÒ»¸ö×Ô¶¯»¯µÄ²éѯÉú³É¹¤¾ß¡£ÎÒʹÓõÄÊÇÓëMicrosoft OfficeÅäÌ×ÌṩµÄMicrosoft Query£¬µ«ÄãÍêÈ«¿ÉÒÔ×ÔÐÐÑ¡ÔñÒ»¸ö¡£²éѯ¹¤¾ß±ØÐëÖªµÀÊý¾Ý¿âÔÚʲôµØ·½£¬¶øMicrosoft QueryÒªÇóÎÒ½øÈëODBC AdministratorµÄ¡°ÎļþDSN¡±¿¨Æ¬£¬²¢ÔÚÄÇÀïÐÂÌíÒ»¸öÌõÄ¿¡£Í¬ÑùÖ¸¶¨Îı¾Çý¶¯³ÌÐòÒÔ¼°±£´æÊý¾Ý¿âµÄĿ¼¡£ËäÈ»¿É½«Õâ¸öÌõÄ¿ÃüÃûΪ×Ô¼ºÏ²»¶µÄÈκζ«Î÷£¬µ«×îºÃ»¹ÊÇʹÓÃÓ롰ϵͳDSN¡±ÖÐÏàͬµÄÃû×Ö¡£
×öÍêÕâЩ¹¤×÷ºó£¬ÔÙÓòéѯ¹¤¾ß´´½¨Ò»¸öвéѯʱ£¬±ã»á·¢ÏÖ×Ô¼ºµÄÊý¾Ý¿â¿ÉÒÔʹÓÃÁË¡£

4. ²½Öè4£º½¨Á¢×Ô¼ºµÄSQL²éѯ
ÎÒÓÃMicrosoft Query´´½¨µÄ²éѯ²»½öÖ¸³öÄ¿±êÊý¾Ý¿â´æÔÚÇÒ´ÎÐòÁ¼ºÃ£¬Ò²»á×Ô¶¯Éú³ÉSQL´úÂ룬ÒԱ㽫Æä²åÈëÎÒ×Ô¼ºµÄJava³ÌÐò¡£ÎÒÏ£ÍûÕâ¸ö²éѯÄܹ»¼ì²é¼Ç¼ÖÐÊÇ·ñ´æÔÚÓëÆô¶¯Java³ÌÐòʱÔÚÃüÁîÐмüÈëµÄÏàͬµÄ¡°ÐÕ¡±£¨Last Name£©¡£ËùÒÔ×÷Ϊһ¸öÆðµã£¬ÎÒËÑË÷×Ô¼ºµÄÐÕ¡°Eckel¡±¡£ÁíÍ⣬ÎÒÏ£ÍûÖ»ÏÔʾ³öÓжÔÓ¦E-mailµØÖ·µÄÄÇЩÃû×Ö¡£´´½¨Õâ¸ö²éѯµÄ²½ÖèÈçÏ£º
(1) Æô¶¯Ò»¸öвéѯ£¬²¢Ê¹ÓòéѯÏòµ¼£¨Query Wizard£©¡£Ñ¡Ôñ¡°people¡±Êý¾Ý¿â£¨µÈ¼ÛÓÚÓÃÊÊÓ¦µÄÊý¾Ý¿âURL´ò¿ªÊý¾Ý¿âÁ¬½Ó£©¡£
(2) Ñ¡ÔñÊý¾Ý¿âÖеġ°people¡±±í¡£´ÓÕâÕÅÊý¾Ý±íÖУ¬Ñ¡ÔñFIRST£¬LASTºÍEMAILÁС£
(3) ÔÚ¡°Filter Data¡±£¨¹ýÂËÆ÷Êý¾Ý¿â£©Ï£¬Ñ¡ÔñLAST£¬²¢Ñ¡Ôñ¡°equals¡±£¨µÈÓÚ£©£¬¼ÓÉϲÎÊýEckel¡£µãÑ¡¡°And¡±µ¥Ñ¡Å¥¡£
(4) Ñ¡ÔñEMAIL£¬²¢Ñ¡ÖС°Is not Null¡±£¨²»Îª¿Õ£©¡£
(5) ÔÚ¡°Sort By¡±Ï£¬Ñ¡ÔñFIRST¡£
²éѯ½á¹û»áÏòÎÒÃÇչʾ³öÊÇ·ñÄܵõ½×Ô¼ºÏ£ÍûµÄ¶«Î÷¡£
ÏÖÔÚ¿ÉÒÔ°´ÏÂSQL°´Å¥¡£²»ÐèÒªÎÒÃÇÈκη½ÃæµÄ½éÈ룬ÕýÈ·µÄSQL´úÂë»áÁ¢¼´µ¯ÏÖ³öÀ´£¬ÒÔ±ãÎÒÃÇÕ³ÌùºÍ¸´ÖÆ¡£¶ÔÓÚÕâ¸ö²éѯ£¬ÏàÓ¦µÄSQL´úÂëÈçÏ£º

893Ò³ÉϳÌÐò

Èô²éѯ±È½Ï¸´ÔÓ£¬ÊÖ¹¤±àÂ뼫Ò׳ö´í¡£µ«ÀûÓÃÒ»¸ö²éѯ¹¤¾ß£¬¾Í¿ÉÒÔ½»»¥Ê½µØ²âÊÔ×Ô¼ºµÄ²éѯ£¬²¢×Ô¶¯»ñµÃÕýÈ·µÄ´úÂë¡£ÊÂʵÉÏ£¬Ç×ÊÖΪÕâЩÊÂÇé±àÂëÊÇÄÑÒÔÈÃÈ˽ÓÊܵġ£

5. ²½Öè5£ºÔÚ×Ô¼ºµÄ²éѯÖÐÐ޸ĺÍÕ³Ìù
ÎÒÃÇ×¢Òâµ½ÉÏÊö´úÂëÓë³ÌÐòÖÐʹÓõĴúÂëÊÇÓÐËùÇø±ðµÄ¡£ÄÇÊÇÓÉÓÚ²éѯ¹¤¾ß¶ÔËùÓÐÃû×Ö¶¼½øÐÐÁËÏÞ¶¨£¬¼´±ãÉæ¼°µÄ½öÓÐÒ»¸öÊý¾Ý±í£¨ÈôÕæµÄÉæ¼°¶à¸öÊý¾Ý±í£¬ÕâÖÖÏÞ¶¨¿É±ÜÃâÀ´×Ô²»Í¬±íµÄͬÃûÊý¾ÝÁз¢Éú³åÍ»£©¡£ÓÉÓÚÕâ¸ö²éѯֻÐèÒªÓõ½Ò»¸öÊý¾Ý±í£¬ËùÒÔ¿É¿¼ÂÇ´Ó´ó¶àÊýÃû×ÖÖÐɾ³ý¡°people¡±ÏÞ¶¨·û£¬¾ÍÏóÏÂÃæÕâÑù£º

893ҳϳÌÐò

´ËÍ⣬ÎÒÃDz»Ï£Íû¡°Ó²±àÂ롱Õâ¸ö³ÌÐò£¬´Ó¶øÖ»ÄܲéÕÒÒ»¸öÌØ¶¨µÄÃû×Ö¡£Ïà·´£¬ËüÓ¦¸ÃÄܲéÕÒÎÒÃÇÔÚÃüÁîÐж¯Ì¬ÌṩµÄÒ»¸öÃû×Ö¡£ËùÒÔ»¹Òª½øÐбØÒªµÄÐ޸쬲¢½«SQLÓï¾äת»»³ÉÒ»¸ö¶¯Ì¬Éú³ÉµÄ×Ö´®¡£ÈçÏÂËùʾ£º

893-894Ò³³ÌÐò

SQL»¹ÓÐÒ»ÖÖ·½Ê½¿É½«Ãû×Ö²åÈëÒ»¸ö²éѯ£¬ÃûΪ¡°³ÌÐò¡±£¨Procedures£©£¬ËüµÄËٶȷdz£¿ì¡£µ«¶ÔÓÚÎÒÃǵĴó¶àÊýʵÑéÐÔÊý¾Ý¿â²Ù×÷£¬ÒÔ¼°Ò»Ð©³õ¼¶Ó¦Óã¬ÓÃJava¹¹½¨²éѯ×Ö´®ÒѾ­ºÜ²»´íÁË¡£
´ÓÕâ¸öÀý×Ó¿ÉÒÔ¿´³ö£¬ÀûÓÃĿǰÕҵõ½µÄ¹¤¾ß¡ª¡ªÌرðÊDzéѯ¹¹½¨¹¤¾ß¡ª¡ªÉæ¼°SQL¼°JDBCµÄÊý¾Ý¿â±à³ÌÊǷdz£¼òµ¥ºÍÖ±¹ÛµÄ¡£

15.7.2 ²éÕÒ³ÌÐòµÄGUI°æ±¾
×îºÃµÄ·½·¨ÊÇÈòéÕÒ³ÌÐòÒ»Ö±±£³ÖÔËÐУ¬Òª²éÕÒʲô¶«Î÷ʱֻÐè¼òµ¥µØÇл»µ½Ëü£¬²¢¼üÈëÒª²éÕÒµÄÃû×Ö¼´¿É¡£ÏÂÃæÕâ¸ö³ÌÐò½«²éÕÒ³ÌÐò×÷Ϊһ¸ö¡°application/applet¡±´´½¨£¬ÇÒÌí¼ÓÁËÃû×Ö×Ô¶¯Ìîд¹¦ÄÜ£¬ËùÒÔ²»±Ø¼üÈëÍêÕûµÄÐÕ£¬¼´¿É¿´µ½Êý¾Ý£º

894-896Ò³³ÌÐò

Êý¾Ý¿âµÄÐí¶àÂß¼­¶¼ÊÇÏàͬµÄ£¬µ«´ó¼Ò¿É¿´µ½ÕâÀïÌí¼ÓÁËÒ»¸öTextListener£¬ÓÃÓÚ¼àÊÓÔÚTextField£¨Îı¾×ֶΣ©µÄÊäÈë¡£ËùÒÔÖ»Òª¼üÈëÒ»¸öÐÂ×Ö·û£¬ËüÊ×ÏȾͻáÊÔ×ŲéÕÒÊý¾Ý¿âÖеġ°ÐÕ¡±£¬²¢ÏÔʾ³öÓ뵱ǰÊäÈëÏà·ûµÄµÚÒ»Ìõ¼Ç¼£¨½«ÆäÖÃÈëcompletion Label£¬²¢ÓÃËü×÷ΪҪ²éÕÒµÄÎı¾£©¡£Òò´Ë£¬Ö»ÒªÎÒÃǼüÈëÁË×ã¹»µÄ×Ö·û£¬Ê¹³ÌÐòÄÜÕÒµ½ÓëÖ®Ïà·ûµÄΨһһÌõ¼Ç¼£¬¾Í¿ÉÒÔÍ£ÊÖÁË¡£

15.7.3 JDBC APIΪºÎÈçºÎ¸´ÔÓ
ÔÄÀÀJDBCµÄÁª»ú°ïÖúÎĵµÊ±£¬ÎÒÃÇÍùÍù»á²úÉúηÄÑÇéÐ÷¡£ÌرðÊÇDatabaseMetaData½Ó¿Ú¡ª¡ªÓëJavaÖп´µ½µÄ´ó¶àÊý½Ó¿ÚÏà·´£¬ËüµÄÌå»ýÏԵ÷dz£ÅӴ󡪡ª´æÔÚ×ÅÊýÁ¿ÖÚ¶àµÄ·½·¨£¬±ÈÈçdataDefinitionCausesTransactionCommit()£¬getMaxColumnNameLength()£¬getMaxStatementLength()£¬storesMixedCaseQuotedIdentifiers()£¬supportsANSI92IntermediateSQL()£¬supportsLimitedOuterJoins()µÈµÈ¡£ËüÃÇÓÐÕâ¶ùÓÐʲôÒâÒåÂð£¿
ÕýÈçÔçÏÈÖ¸³öµÄÄÇÑù£¬Êý¾Ý¿âÆð³õÒ»Ö±´¦ÓÚÒ»ÖÖ»ìÂÒ״̬¡£ÕâÖ÷ÒªÊÇÓÉÓÚ¸÷ÖÖÊý¾Ý¿âÓ¦ÓÃÌá³öµÄÒªÇóÔì³ÉµÄ£¬ËùÒÔÊý¾Ý¿â¹¤¾ßÏԵ÷dz£¡°Ç¿´ó¡±¡ª¡ª»»ÑÔÖ®£¬¡°ÅӴ󡱡£Ö»Êǽü¼¸Äê²ÅÓ¿ÏÖ³öÁËSQLµÄͨÓÃÓïÑÔ£¨³£ÓõϹÓÐÆäËûÐí¶àÊý¾Ý¿âÓïÑÔ£©¡£µ«¼´±ãÏóSQLÕâÑùµÄ¡°±ê×¼¡±£¬Ò²´æÔÚÎÞÊýµÄ±äÖÖ£¬ËùÒÔJDBC±ØÐëÌṩһ¸ö¾Þ´óµÄDatabaseMetaData½Ó¿Ú£¬Ê¹ÎÒÃǵĴúÂëÄÜÕæÕýÀûÓõ±Ç°ÒªÁ¬½ÓµÄÒ»ÖÖ¡°±ê×¼¡±SQLÊý¾Ý¿âµÄÄÜÁ¦¡£¼òÑÔÖ®£¬ÎÒÃǿɱàд³ö¼òµ¥µÄ¡¢ÄÜÒÆÖ²µÄSQL¡£µ«Èç¹ûÏëÓÅ»¯´úÂëµÄÖ´ÐÐËÙ¶È£¬ÄÇôΪÁËÊÊÓ¦²»Í¬Êý¾Ý¿âÀàÐ͵ÄÌØµã£¬ÎÒÃǵıàд´úÂëµÄÂé·³¾Í´óÁË¡£
µ±È»£¬Õâ²¢²»ÊÇJavaµÄȱÏÝ¡£Êý¾Ý¿â²úÆ·Ö®¼äµÄ²îÒìÊÇÎÒÃǺÍJDBC¶¼ÒªÃæ¶ÔµÄÒ»¸öÏÖʵ¡£µ«ÊÇ£¬Èç¹ûÄܱàдͨÓõIJéѯ£¬¶ø²»±ØÌ«¹ØÐÄÐÔÄÜ£¬ÄÇôÊÂÇé¾ÍÒª¼òµ¥µÃ¶à¡£¼´Ê¹±ØÐë¶ÔÐÔÄÜ×÷Ò»·¬µ÷Õû£¬Ö»ÒªÖªµÀ×îÖÕÃæÏòµÄƽ̨£¬Ò²²»±ØÕë¶ÔÿһÖÖÇé¿ö¶¼±àд²»Í¬µÄÓÅ»¯´úÂë¡£
ÔÚSun·¢²¼µÄJava 1.1²úÆ·ÖУ¬ÅäÌ×ÌṩÁËһϵÁеç×ÓÎĵµ£¬ÆäÖÐÓжÔJDBC¸üÈ«ÃæµÄ½éÉÜ¡£´ËÍ⣬ÔÚÓÉHamilton CattelºÍFisher±àÖø¡¢Addison-WesleyÓÚ1997Äê³ö°æµÄ¡¶JDBC Database Access with Java¡·ÖУ¬Ò²ÌṩÁËÓйØÕâÒ»Ö÷ÌâµÄÐí¶àÓÐÓÃ×ÊÁÏ¡£Í¬Ê±£¬ÊéµêÀïÒ²¾­³£³öÏÖһЩÓйØJDBCµÄÐÂÊé¡£

15.8 Ô¶³Ì·½·¨
Ϊͨ¹ýÍøÂçÖ´ÐÐÆäËû»úÆ÷ÉϵĴúÂ룬´«Í³µÄ·½·¨²»½öÄÑÒÔѧϰºÍÕÆÎÕ£¬Ò²¼«Ò׳ö´í¡£Ë¼¿¼Õâ¸öÎÊÌâ×î¼ÑµÄ·½Ê½ÊÇ£ºÄ³Ð©¶ÔÏóÕýºÃλÓÚÁíһ̨»úÆ÷£¬ÎÒÃÇ¿ÉÏòËüÃÇ·¢ËÍÒ»ÌõÏûÏ¢£¬²¢»ñµÃ·µ»Ø½á¹û£¬¾ÍÏóÄÇЩ¶ÔÏóλÓÚ×Ô¼ºµÄ±¾µØ»úÆ÷Ò»Ñù¡£Java 1.1µÄ¡°Ô¶³Ì·½·¨µ÷Óá±£¨RMI£©²ÉÓõÄÕýÊÇÕâÖÖ³éÏó¡£±¾½Ú½«Òýµ¼´ó¼Ò¾­ÀúһЩ±ØÒªµÄ²½Ö裬´´½¨×Ô¼ºµÄRMI¶ÔÏó¡£

15.8.1 Ô¶³Ì½Ó¿Ú¸ÅÄî
RMI¶Ô½Ó¿ÚÓÐ×ÅÇ¿ÁÒµÄÒÀÀµ¡£ÔÚÐèÒª´´½¨Ò»¸öÔ¶³Ì¶ÔÏóµÄʱºò£¬ÎÒÃÇͨ¹ý´«µÝÒ»¸ö½Ó¿ÚÀ´Òþ²Ø»ù²ãµÄʵʩϸ½Ú¡£ËùÒÔ¿Í»§µÃµ½Ô¶³Ì¶ÔÏóµÄÒ»¸ö¾ä±úʱ£¬ËüÃÇÕæÕýµÃµ½µÄÊǽӿھä±ú¡£Õâ¸ö¾ä±úÕýºÃͬһЩ±¾µØµÄ¸ù´úÂëÁ¬½Ó£¬ÓɺóÕ߸ºÔðͨ¹ýÍøÂçͨÐÅ¡£µ«ÎÒÃDz¢²»¹ØÐÄÕâЩÊÂÇ飬ֻÐèͨ¹ý×Ô¼ºµÄ½Ó¿Ú¾ä±ú·¢ËÍÏûÏ¢¼´¿É¡£
´´½¨Ò»¸öÔ¶³Ì½Ó¿Úʱ£¬±ØÐë×ñÊØÏÂÁйæÔò£º
(1) Ô¶³Ì½Ó¿Ú±ØÐëΪpublicÊôÐÔ£¨²»ÄÜÓС°°ü·ÃÎÊ¡±£»Ò²¾ÍÊÇ˵£¬Ëü²»ÄÜÊÇ¡°ÓѺõġ±£©¡£·ñÔò£¬Ò»µ©¿Í»§ÊÔÍ¼×°ÔØÒ»¸öʵÏÖÁËÔ¶³Ì½Ó¿ÚµÄÔ¶³Ì¶ÔÏ󣬾ͻáµÃµ½Ò»¸ö´íÎó¡£
(2) Ô¶³Ì½Ó¿Ú±ØÐëÀ©Õ¹½Ó¿Újava.rmi.Remote¡£
(3) ³ýÓëÓ¦ÓóÌÐò±¾ÉíÓйصÄÎ¥ÀýÖ®Í⣬Զ³Ì½Ó¿ÚÖеÄÿ¸ö·½·¨¶¼±ØÐëÔÚ×Ô¼ºµÄthrows´Ó¾äÖÐÉùÃ÷java.rmi.RemoteException¡£
(4) ×÷Ϊ²ÎÊý»ò·µ»ØÖµ´«µÝµÄÒ»¸öÔ¶³Ì¶ÔÏ󣨲»¹ÜÊÇÖ±½ÓµÄ£¬»¹ÊÇÔÚ±¾µØ¶ÔÏóÖÐǶÈ룩±ØÐëÉùÃ÷ΪԶ³Ì½Ó¿Ú£¬²»¿ÉÉùÃ÷ΪʵʩÀà¡£

ÏÂÃæÊÇÒ»¸ö¼òµ¥µÄÔ¶³Ì½Ó¿ÚʾÀý£¬Ëü´ú±íµÄÊÇÒ»¸ö¾«È·¼ÆÊ±·þÎñ£º

898Ò³³ÌÐò

Ëü±íÃæÉÏÓëÆäËû½Ó¿ÚÊÇÀàËÆµÄ£¬Ö»ÊǶÔRemote½øÐÐÁËÀ©Õ¹£¬¶øÇÒËüµÄËùÓз½·¨¶¼»á¡°ÖÀ¡±³öRemoteException£¨Ô¶³ÌÎ¥Àý£©¡£¼Çס½Ó¿ÚºÍËüËùÓеķ½·¨¶¼ÊÇpublicµÄ¡£

15.8.2 Ô¶³Ì½Ó¿ÚµÄʵʩ
·þÎñÆ÷±ØÐë°üº¬Ò»¸öÀ©Õ¹ÁËUnicastRemoteObjectµÄÀ࣬²¢ÊµÏÖÔ¶³Ì½Ó¿Ú¡£Õâ¸öÀàÒ²¿ÉÒÔº¬Óи½¼ÓµÄ·½·¨£¬µ«¿Í»§Ö»ÄÜʹÓÃÔ¶³Ì½Ó¿ÚÖеķ½·¨¡£ÕâÊÇÏÔÈ»µÄ£¬ÒòΪ¿Í»§µÃµ½µÄÖ»ÊÇÖ¸Ïò½Ó¿ÚµÄÒ»¸ö¾ä±ú£¬¶ø·ÇʵÏÖËüµÄÄǸöÀà¡£
±ØÐëΪԶ³Ì¶ÔÏóÃ÷È·¶¨Òå¹¹½¨Æ÷£¬¼´Ê¹Ö»×¼±¸¶¨ÒåÒ»¸öĬÈϹ¹½¨Æ÷£¬ÓÃËüµ÷Óûù´¡À๹½¨Æ÷¡£±ØÐë°ÑËüÃ÷È·µØ±àд³öÀ´£¬ÒòΪËü±ØÐë¡°ÖÀ¡±³öRemoteExceptionÎ¥Àý¡£
ÏÂÃæÁгöÔ¶³Ì½Ó¿ÚPerfectTimeµÄʵʩ¹ý³Ì£º

899-900Ò³³ÌÐò

ÔÚÕâÀmain()¿ØÖÆ×ÅÉèÖ÷þÎñÆ÷µÄÈ«²¿Ï¸½Ú¡£±£´æRMI¶ÔÏóʱ£¬±ØÐëÔÚ³ÌÐòµÄij¸öµØ·½²ÉÈ¡ÏÂÊö²Ù×÷£º
(1) ´´½¨ºÍ°²×°Ò»¸ö°²È«¹ÜÀíÆ÷£¬ÁîÆäÖ§³ÖRMI¡£×÷ΪJava·¢ÐаüµÄÒ»²¿·Ö£¬ÊÊÓÃÓÚRMIΨһһ¸öÊÇRMISecurityManager¡£
(2) ´´½¨Ô¶³Ì¶ÔÏóµÄÒ»¸ö»ò¶à¸öʵÀý¡£ÔÚÕâÀ´ó¼Ò¿É¿´µ½´´½¨µÄÊÇPerfectTime¶ÔÏó¡£
(3) ÏòRMIÔ¶³Ì¶ÔÏó×¢²á±í×¢²áÖÁÉÙÒ»¸öÔ¶³Ì¶ÔÏó¡£Ò»¸öÔ¶³Ì¶ÔÏóÓµÓеķ½·¨¿ÉÉú³ÉÖ¸ÏòÆäËûÔ¶³Ì¶ÔÏóµÄ¾ä±ú¡£ÕâÑùÒ»À´£¬¿Í»§Ö»Ðèµ½×¢²á±íÀï·ÃÎÊÒ»´Î£¬µÃµ½µÚÒ»¸öÔ¶³Ì¶ÔÏó¼´¿É¡£

1. ÉèÖÃ×¢²á±í
ÔÚÕâ¶ù£¬´ó¼Ò¿É¿´µ½¶Ô¾²Ì¬·½·¨Naming.bind()µÄÒ»¸öµ÷Óá£È»¶ø£¬Õâ¸öµ÷ÓÃÒªÇó×¢²á±í×÷Ϊ¼ÆËã»úÉϵÄÒ»¸ö¶ÀÁ¢½ø³ÌÔËÐС£×¢²á±í·þÎñÆ÷µÄÃû×ÖÊÇrmiregistry¡£ÔÚ32λWindows»·¾³ÖУ¬¿ÉʹÓãº
start rmiregistry
ÁîÆäÔÚºǫ́ÔËÐС£ÔÚUnixÖУ¬Ê¹Óãº
rmiregistry &
ºÍÐí¶àÍøÂç³ÌÐòÒ»Ñù£¬rmiregistryλÓÚ»úÆ÷Æô¶¯ËüËùÔÚµÄij¸öIPµØÖ·´¦£¬µ«ËüÒ²±ØÐë¼àÊÓÒ»¸ö¶Ë¿Ú¡£Èç¹ûÏóÉÏÃæÄÇÑùµ÷ÓÃrmiregistry£¬²»Ê¹ÓòÎÊý£¬×¢²á±íµÄ¶Ë¿Ú¾Í»áĬÈÏΪ1099¡£ÈôÏ£ÍûËüλÓÚÆäËûij¸ö¶Ë¿Ú£¬Ö»ÐèÔÚÃüÁîÐÐÌí¼ÓÒ»¸ö²ÎÊý£¬Ö¸¶¨ÄǸö¶Ë¿Ú±àºÅ¼´¿É¡£¶ÔÕâ¸öÀý×ÓÀ´Ëµ£¬¶Ë¿Ú½«Î»ÓÚ2005£¬ËùÒÔrmiregistryÓ¦¸ÃÏóÏÂÃæÕâÑùÆô¶¯£¨¶ÔÓÚ32λWindows£©£º
start rmiregistry 2005
¶ÔÓÚUnix£¬ÔòʹÓÃÏÂÊöÃüÁ
rmiregistry 2005 &
Óë¶Ë¿ÚÓйصÄÐÅÏ¢±ØÐë´«Ë͸øbind()ÃüÁͬʱ´«Ë͵ϹÓÐ×¢²á±íËùÔÚµÄÄÇ̨»úÆ÷µÄIPµØÖ·¡£µ«¼ÙÈôÎÒÃÇÏëÔÚ±¾µØ²âÊÔRMI³ÌÐò£¬¾ÍÏó±¾ÕµÄÍøÂç³ÌÐòÒ»Ö±²âÊÔµÄÄÇÑù£¬ÕâÑù×ö¾Í»á´øÀ´ÎÊÌâ¡£ÔÚJDK 1.1.1°æ±¾ÖУ¬´æÔÚ×ÅÏÂÊöÁ½·½ÃæµÄÎÊÌ⣨עÊ͢ߣ©£º
(1) localhost²»ÄÜËæRMI¹¤×÷¡£ËùÒÔΪÁËÔÚµ¥¶Àһ̨»úÆ÷ÉÏÍê³É¶ÔRMIµÄ²âÊÔ£¬±ØÐëÌṩ»úÆ÷µÄÃû×Ö¡£ÎªÁËÔÚ32λWindows»·¾³Öе÷²é×Ô¼º»úÆ÷µÄÃû×Ö£¬¿É½øÈë¿ØÖÆÃæ°å£¬Ñ¡Ôñ¡°ÍøÂ硱£¬Ñ¡Ôñ¡°±êʶ¡±¿¨Æ¬£¬ÆäÖÐÁгöÁ˼ÆËã»úµÄÃû×Ö¡£¾ÍÎÒ×Ô¼ºµÄÇé¿öÀ´Ëµ£¬ÎҵĻúÆ÷½Ð×÷¡°Colossus¡±£¨ÒòΪÎÒÓü¸¸ö´óÈÝÁ¿µÄÓ²Å̱£´æ¸÷ÖÖ²»Í¬µÄ¿ª·¢ÏµÍ³¡ª¡ªClossusÊÇ¡°¾ÞÈË¡±µÄÒâ˼£©¡£Ëƺõ´óдÐÎʽ»á±»ºöÂÔ¡£
(2) ³ý·Ç¼ÆËã»úÓÐÒ»¸ö»î¶¯µÄTCP/IPÁ¬½Ó£¬·ñÔòRMI²»Äܹ¤×÷£¬¼´Ê¹ËùÓÐ×é¼þ¶¼Ö»ÐèÒªÔÚ±¾µØ»úÆ÷ÀﻥÏàͨÐÅ¡£ÕâÒâζ×ÅÔÚÊÔͼÔËÐгÌÐò֮ǰ£¬±ØÐëÁ¬½Óµ½×Ô¼ºµÄISP£¨ÒòÌØÍø·þÎñÌṩÕߣ©£¬·ñÔò»áµÃµ½Ò»Ð©º¬ÒåÄ£ºýµÄÎ¥ÀýÏûÏ¢¡£

¢ß£ºÎªÕÒ³öÕâЩÐÅÏ¢£¬ÎÒ²»ÖªËðÉËÁ˶àÉÙ¸öÄÔϸ°û¡£

¿¼Âǵ½ÕâЩÒòËØ£¬bind()ÃüÁî±ä³ÉÁËÏÂÃæÕâ¸öÑù×Ó£º
Naming.bind("//colossus:2005/PerfectTime", pt);
ÈôʹÓÃĬÈ϶˿Ú1099£¬¾ÍûÓбØÒªÖ¸¶¨Ò»¸ö¶Ë¿Ú£¬ËùÒÔ¿ÉÒÔʹÓãº
Naming.bind("//colossus/PerfectTime", pt);
ÔÚJDKδÀ´µÄ°æ±¾ÖУ¨1.1Ö®ºó£©£¬Ò»µ©¸ÄÕýÁËlocalhostµÄÎÊÌ⣬¾ÍÄÜÕý³£µØ½øÐб¾µØ²âÊÔ£¬È¥µôIPµØÖ·£¬Ö»Ê¹Óñêʶ·û£º
Naming.bind("PerfectTime", pt);
·