ÓÑÇéÌáʾ£ºÈç¹û±¾ÍøÒ³´ò¿ªÌ«Âý»òÏÔʾ²»ÍêÕû£¬Çë³¢ÊÔÊó±êÓÒ¼ü¡°Ë¢Ð¡±±¾ÍøÒ³£¡ÔĶÁ¹ý³Ì·¢ÏÖÈκδíÎóÇë¸æËßÎÒÃÇ£¬Ð»Ð»£¡£¡ ±¨¸æ´íÎó
Ò»ÊÀÊé³Ç ·µ»Ø±¾ÊéĿ¼ ÎÒµÄÊé¼Ü ÎÒµÄÊéÇ© TXTÈ«±¾ÏÂÔØ ½øÈëÊé°É ¼ÓÈëÊéÇ©

Java±à³Ì˼ÏëµÚ4°æ[ÖÐÎÄ°æ](PDF¸ñʽ)-µÚ176ÕÂ

°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·­Ò³£¬°´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ£¬°´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿£¡
¡ª¡ª¡ª¡ªÎ´ÔĶÁÍꣿ¼ÓÈëÊéÇ©ÒѱãÏ´μÌÐøÔĶÁ£¡




×Ö´´½¨ºÃÒԺ󣬵«ÔÚ¹¹½¨Æ÷Íê³É֮ǰ£¬¼ÙÈô¹¹½¨Æ÷ʧ°Ü£¬Ì×½Ó×ֻᱻÇå³ý¡£·ñÔò£¬ÎªÌ×½Ó×Öµ÷Óá¡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¡¡·þÎñ³Ì¡¡

Ðò£¬Á½ÕßÖ®¼ä²»»á²úÉú³åÍ»¡£¡¡¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡547¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡549¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡

´ó¼ÒÒ²ÐíÈÏΪÁ½¸ö¹¹½¨Æ÷´´½¨ÁËÁ½¸ö²»Í¬µÄ¶ÔÏó£ºÒ»¸öÓÃÓÚ½ÓÊÕÊý¾Ý±¨£¬ÁíÒ»¸öÓÃÓÚ·¢ËÍËüÃÇ¡£Èç¹ûÊǺõġ¡

ÃæÏò¶ÔÏóµÄÉè¼Æ·½°¸£¬»á½¨Òé°ÑËüÃÇ´´½¨³ÉÁ½¸ö²»Í¬µÄÀ࣬¶ø²»ÊǾßÓв»Í¬µÄÐÐΪµÄÒ»¸öÀࣨ¾ßÌåÐÐΪȡ¾ö¡¡

ÓÚÎÒÃÇÈçºÎ¹¹½¨¶ÔÏ󣩡£ÕâÒ²Ðí»á³ÉΪһ¸öÑÏÖصÄÎÊÌ⣬µ«ÐÒÔ˵ÄÊÇ£¬DatagramPacket¡¡µÄʹÓÃÏ൱¼òµ¥£¬ÎÒ¡¡

ÃDz»ÐèÒªÔÚÕâ¸öÎÊÌâÉϾÀ²ø²»Çå¡£ÕâÒ»µãÔÚÏÂÀýÀォÓкÜÃ÷È·µÄ˵Ã÷¡£¸ÃÀýÀàËÆÓÚÇ°ÃæÕë¶Ô¡¡TCP¡¡Ì×½Ó×ֵġ¡

MultiJabberServer¡¡ºÍMultiJabberClient¡¡Àý×Ó¡£¶à¸ö¿Í»§¶¼»á½«Êý¾Ý±¨·¢¸ø·þÎñÆ÷£¬ºóÕ߻ὫÆä·´À¡»Ø×î¡¡

³õ·¢³öÏûÏ¢µÄͬÑùµÄ¿Í»§¡£¡¡¡¡

Ϊ¼ò»¯´ÓÒ»¸öString¡¡Àï´´½¨¡¡DatagramPacket¡¡µÄ¹¤×÷£¨»òÕß´ÓDatagramPacket¡¡Àï´´½¨¡¡String£©£¬Õâ¸öÀý×Ó¡¡

Ê×ÏÈÓõ½ÁËÒ»¸ö¹¤¾ßÀ࣬ÃûΪDgram£º¡¡¡¡

¡¡¡¡

//£º¡¡Dgram¡£java¡¡¡¡

//¡¡A¡¡utility¡¡class¡¡to¡¡convert¡¡back¡¡and¡¡forth¡¡¡¡

//¡¡Between¡¡Strings¡¡and¡¡DataGramPackets¡£¡¡¡¡

import¡¡java¡£*£»¡¡¡¡

¡¡¡¡

public¡¡class¡¡Dgram¡¡£û¡¡¡¡

¡¡¡¡public¡¡static¡¡DatagramPacket¡¡toDatagram£¨¡¡¡¡

¡¡¡¡¡¡¡¡String¡¡s£»¡¡InetAddress¡¡destIA£»¡¡int¡¡destPort£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡//¡¡Deprecated¡¡in¡¡Java¡¡1¡£1£»¡¡but¡¡it¡¡works£º¡¡¡¡

¡¡¡¡¡¡¡¡byte£§£§¡¡buf¡¡=¡¡new¡¡byte£§s¡£length£¨£©¡¡£«¡¡1£§£»¡¡¡¡

¡¡¡¡¡¡¡¡s¡£getBytes£¨0£»¡¡s¡£length£¨£©£»¡¡buf£»¡¡0£©£»¡¡¡¡

¡¡¡¡¡¡¡¡//¡¡The¡¡correct¡¡Java¡¡1¡£1¡¡approach£»¡¡but¡¡it's¡¡¡¡

¡¡¡¡¡¡¡¡//¡¡Broken¡¡£¨it¡¡truncates¡¡the¡¡String£©£º¡¡¡¡

¡¡¡¡¡¡¡¡//¡¡byte£§£§¡¡buf¡¡=¡¡s¡£getBytes£¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡return¡¡new¡¡DatagramPacket£¨buf£»¡¡buf¡£length£»¡¡¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡destIA£»¡¡destPort£©£»¡¡¡¡

¡¡¡¡£ý¡¡¡¡

¡¡¡¡public¡¡static¡¡String¡¡toString£¨DatagramPacket¡¡p£©£û¡¡¡¡

¡¡¡¡¡¡¡¡//¡¡The¡¡Java¡¡1¡£0¡¡approach£º¡¡¡¡

¡¡¡¡¡¡¡¡//¡¡return¡¡new¡¡String£¨p¡£getData£¨£©£»¡¡¡¡¡¡

¡¡¡¡¡¡¡¡//¡¡¡¡0£»¡¡0£»¡¡p¡£getLength£¨£©£©£»¡¡¡¡

¡¡¡¡¡¡¡¡//¡¡The¡¡Java¡¡1¡£1¡¡approach£º¡¡¡¡

¡¡¡¡¡¡¡¡return¡¡¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡new¡¡String£¨p¡£getData£¨£©£»¡¡0£»¡¡p¡£getLength£¨£©£©£»¡¡¡¡

¡¡¡¡£ý¡¡¡¡

£ý¡¡///£º~¡¡¡¡

¡¡¡¡

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¡¡¹¹½¨Æ÷£©¡£¡¡¡¡

ÏÂÃæÊÇÓÃÓÚÊý¾Ý±¨ÑÝʾµÄ·þÎñÆ÷´úÂ룺¡¡¡¡

//£º¡¡ChatterServer¡£java¡¡¡¡

//¡¡A¡¡server¡¡that¡¡echoes¡¡datagrams¡¡¡¡

import¡¡java¡£*£»¡¡¡¡

import¡¡java¡£io¡£*£»¡¡¡¡

import¡¡java¡£util¡£*£»¡¡¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡548¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡550¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡

public¡¡class¡¡ChatterServer¡¡£û¡¡¡¡

¡¡¡¡static¡¡final¡¡int¡¡INPORT¡¡=¡¡1711£»¡¡¡¡

¡¡¡¡private¡¡byte£§£§¡¡buf¡¡=¡¡new¡¡byte£§1000£§£»¡¡¡¡

¡¡¡¡private¡¡DatagramPacket¡¡dp¡¡=¡¡¡¡¡¡

¡¡¡¡¡¡¡¡new¡¡DatagramPacket£¨buf£»¡¡buf¡£length£©£»¡¡¡¡

¡¡¡¡//¡¡Can¡¡listen¡¡&¡¡send¡¡on¡¡the¡¡same¡¡socket£º¡¡¡¡

¡¡¡¡private¡¡DatagramSocket¡¡socket£»¡¡¡¡

¡¡¡¡

¡¡¡¡public¡¡ChatterServer£¨£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡try¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡socket¡¡=¡¡new¡¡DatagramSocket£¨INPORT£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Server¡¡started¡¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡while£¨true£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡//¡¡Block¡¡until¡¡a¡¡datagram¡¡appears£º¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡socket¡£receive£¨dp£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡String¡¡rcvd¡¡=¡¡Dgram¡£toString£¨dp£©¡¡£«¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¨£»¡¡from¡¡address£º¡¡¡¨¡¡£«¡¡dp¡£getAddress£¨£©¡¡£«¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¨£»¡¡port£º¡¡¡¨¡¡£«¡¡dp¡£getPort£¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡System¡£out¡£println£¨rcvd£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡String¡¡echoString¡¡=¡¡¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¨Echoed£º¡¡¡¨¡¡£«¡¡rcvd£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡//¡¡Extract¡¡the¡¡address¡¡and¡¡port¡¡from¡¡the¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡//¡¡received¡¡datagram¡¡to¡¡find¡¡out¡¡where¡¡to¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡//¡¡send¡¡it¡¡back£º¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡DatagramPacket¡¡echo¡¡=¡¡¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dgram¡£toDatagram£¨echoString£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡dp¡£getAddress£¨£©£»¡¡dp¡£getPort£¨£©£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡socket¡£send£¨echo£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡£ý¡¡¡¡

¡¡¡¡¡¡¡¡£ý¡¡catch£¨SocketException¡¡e£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡System¡£err¡£println£¨¡¨Can't¡¡open¡¡socket¡¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡System¡£exit£¨1£©£»¡¡¡¡

¡¡¡¡¡¡¡¡£ý¡¡catch£¨IOException¡¡e£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡System¡£err¡£println£¨¡¨munication¡¡error¡¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡e¡£printStackTrace£¨£©£»¡¡¡¡

¡¡¡¡¡¡¡¡£ý¡¡¡¡

¡¡¡¡£ý¡¡¡¡

¡¡¡¡public¡¡static¡¡void¡¡main£¨String£§£§¡¡args£©¡¡£û¡¡¡¡

¡¡¡¡¡¡¡¡new¡¡ChatterServer£¨£©£»¡¡¡¡

¡¡¡¡£ý¡¡¡¡

£ý¡¡///£º~¡¡¡¡

¡¡¡¡

ChatterServer¡¡´´½¨ÁËÒ»¸öÓÃÀ´½ÓÊÕÏûÏ¢µÄDatagramSocket¡¡£¨Êý¾Ý±¨Ì×½Ó×Ö£©£¬¶ø²»ÊÇÔÚÎÒÃÇÿ´Î×¼±¸½ÓÊÕ¡¡

Ò»ÌõÐÂÏûϢʱ¶¼Ð½¨Ò»¸ö¡£Õâ¸öµ¥Ò»µÄDatagramSocket¡¡¿ÉÒÔÖظ´Ê¹Óá£ËüÓÐÒ»¸ö¶Ë¿ÚºÅ£¬ÒòΪÕâÊôÓÚ·þÎñ¡¡

Æ÷£¬¿Í»§±ØÐëÈ·ÇÐÖªµÀ×Ô¼º°ÑÊý¾Ý±¨·¢µ½ÄĸöµØÖ·¡£¾¡¹ÜÓÐÒ»¸ö¶Ë¿ÚºÅ£¬µ«Ã»ÓÐΪËü·ÖÅäÒòÌØÍøµØÖ·£¬ÒòΪ¡¡

Ëü¾ÍפÁôÔÚ¡°Õ⡱̨»úÆ÷ÄÚ£¬ËùÒÔÖªµÀ×Ô¼ºµÄÒòÌØÍøµØÖ·ÊÇʲô£
·µ»ØĿ¼ ÉÏÒ»Ò³ ÏÂÒ»Ò³ »Øµ½¶¥²¿ ÔÞ£¨0£© ²È£¨0£©
δÔĶÁÍꣿ¼ÓÈëÊéÇ©ÒѱãÏ´μÌÐøÔĶÁ£¡
ÎÂÜ°Ìáʾ£º ο´Ð¡ËµµÄͬʱ·¢±íÆÀÂÛ£¬Ëµ³ö×Ô¼ºµÄ¿´·¨ºÍÆäËüС»ï°éÃÇ·ÖÏíÒ²²»´íŶ£¡·¢±íÊéÆÀ»¹¿ÉÒÔ»ñµÃ»ý·ÖºÍ¾­Ñé½±Àø£¬ÈÏÕæдԭ´´ÊéÆÀ ±»²ÉÄÉΪ¾«ÆÀ¿ÉÒÔ»ñµÃ´óÁ¿½ð±Ò¡¢»ý·ÖºÍ¾­Ñé½±ÀøŶ£¡