°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ£¬°´¼üÅÌÉ쵀 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¡¡¿ÉÒÔÖظ´Ê¹Óá£ËüÓÐÒ»¸ö¶Ë¿ÚºÅ£¬ÒòΪÕâÊôÓÚ·þÎñ¡¡
Æ÷£¬¿Í»§±ØÐëÈ·ÇÐÖªµÀ×Ô¼º°ÑÊý¾Ý±¨·¢µ½ÄĸöµØÖ·¡£¾¡¹ÜÓÐÒ»¸ö¶Ë¿ÚºÅ£¬µ«Ã»ÓÐΪËü·ÖÅäÒòÌØÍøµØÖ·£¬ÒòΪ¡¡
Ëü¾ÍפÁôÔÚ¡°Õ⡱̨»úÆ÷ÄÚ£¬ËùÒÔÖªµÀ×Ô¼ºµÄÒòÌØÍøµØÖ·ÊÇʲô£