»ùÓÚJava¼´Ê±ÁÄÌìϵͳµÄÉè¼ÆÓëʵÏÖ×îбÏÒµÂÛÎÄÉè¼Æ ÁªÏµ¿Í·þ

·¢²¼Ê±¼ä : ÐÇÆÚÁù ÎÄÕ»ùÓÚJava¼´Ê±ÁÄÌìϵͳµÄÉè¼ÆÓëʵÏÖ×îбÏÒµÂÛÎÄÉè¼Æ¸üÐÂÍê±Ï¿ªÊ¼ÔĶÁ47926254cd1755270722192e453610661ed95aef

ͼ1 2²ãCS½á¹¹Ê¾Òâͼ

¿Í»§²ãÒ²½Ð×öÓ¦Óñíʾ²ã£¬Ò²¾ÍÊÇÎÒÃÇ˵µÄ¿Í»§¶Ë£¬ÕâÊÇÓ¦ÓóÌÐòµÄÓû§½Ó¿Ú²¿·Ö¡£¸ø¼´Ê±Í¨Ñ¶¹¤¾ßÉè¼ÆÒ»¸ö¿Í»§²ã¾ßÓкܶàÓŵ㣬ÕâÊÇÒòΪ¿Í»§²ãµ£¸º×ÅÓû§ÓëÓ¦ÓüäµÄ¶Ô»°¹¦ÄÜ¡£ËüÓÃÓÚ¼ì²éÓû§µÄÊäÈëÊý¾Ý£¬ÏÔʾӦÓõÄÊä³öÊý¾Ý¡£ÎªÁËʹÓû§ÄÜÖ±½ÓµØ½øÐвÙ×÷£¬¿Í»§²ãÐèҪʹÓÃͼÐÎÓû§½Ó¿Ú¡£ÈôͨѶÓû§±ä¸ü£¬ÏµÍ³Ö»ÐèÒª¸ÄдÏÔʾ¿ØÖƺÍÊý¾Ý¼ì²é³ÌÐò¾Í¿ÉÒÔÁË£¬¶ø²»»áÓ°ÏìÆäËûÁ½²ã¡£

·þÎñ²ãÓÖ½Ð×ö¹¦Äܲ㣬Ï൱ÓÚÓ¦Óõı¾Ì壬ËüÊǽ«¾ßÌåµÄÒµÎñ´¦ÀíÂß¼­±àÈë³ÌÐòÖС£ÀýÈ磬Óû§ÐèÒª¼ì²éÊý¾Ý£¬ÏµÍ³Éè·¨½«ÓйؼìË÷ÒªÇóµÄÐÅÏ¢Ò»´ÎÐԵش«Ë͸ø¹¦Äܲ㣻¶øÓû§µÇ¼ºó£¬ÁÄÌìµÇ¼ÐÅÏ¢ÊÇÓɹ¦Äܲ㴦Àí¹ýµÄ¼ìË÷½á¹ûÊý¾Ý£¬ËüÒ²ÊÇÒ»´ÎÐÔ´«Ë͸ø±íʾ²ãµÄ¡£ÔÚÓ¦ÓÃÉè¼ÆÖУ¬±ØÐë±ÜÃâÔÚ±íʾ²ãºÍ¹¦ÄܲãÖ®¼ä½øÐжà´ÎµÄÊý¾Ý½»»»£¬Õâ¾ÍÐèÒª¾¡¿ÉÄܽøÐÐÒ»´ÎÐÔµÄÒµÎñ´¦Àí£¬´ïµ½ÓÅ»¯ÕûÌåÉè¼ÆµÄÄ¿µÄ¡£ 4.1¼´Ê±ÁÄÌìϵͳµÄʵʩԭÀí 4.1.1 ¹¤×÷·½Ê½ºÍ¼¼ÊõÔ­Àí

µäÐ͵ÄIM¹¤×÷·½Ê½ÈçÏ£ºµÇ½CHATͨѶ·þÎñÆ÷£¬»ñÈ¡Ò»¸ö×Ô½¨Á¢µÄÀúÊ·µÄ½»Á÷¶ÔÏóÁÐ±í£¨Í¬ÊÂÁÐ±í£©£¬È»ºó×ÔÉí±ê־ΪÔÚÏß״̬£¬µ±ºÃÓÑÁбíÖеÄijÈËÔÚÈκÎʱºòµÇ¼ÉÏÏß²¢ÊÔͼͨ¹ýÄãµÄ¼ÆËã»úÁªÏµÄãʱ£¬IMϵͳ»á·¢Ò»¸öÏûÏ¢ÌáÐÑÄ㣬ȻºóÄãÄÜÓëËû½¨Á¢Ò»¸öÁÄÌì»á»°Í¨µÀ½øÐи÷ÖÖÏûÏ¢Èç¼üÈëÎÄ×Ö¡¢Í¨¹ýÓïÒôµÈµÄ½»Á÷£¬´Ó¼¼ÊõÉÏÀ´Ëµ£¬ÁÄÌìϵͳµÄ»ù±¾¼¼ÊõÔ­ÀíÈçÏ£º

µÚÒ»²½£¬Óû§AÊäÈë×Ô¼ºµÄÓû§ÃûºÍÃÜÂëµÇ¼IM·þÎñÆ÷£¬·þÎñÆ÷ͨ¹ý¶ÁÈ¡Óû§Êý¾Ý¿âÀ´ÑéÖ¤Óû§Éí·Ý£¬Èç¹ûÑé֤ͨ¹ý£¬µÇ¼ÇÓû§AµÄIPµØÖ·¡¢IM¿Í»§¶ËÈí¼þµÄ°æ±¾ºÅ¼°Ê¹ÓõÄTCPUDP¶Ë¿ÚºÅ£¬È»ºó·µ»ØÓû§AµÇ¼³É¹¦µÄ±êÖ¾£¬´ËʱÓû§AÔÚIMϵͳÖеÄ״̬ΪÔÚÏߣ¨Online Presence£©¡£

µÚ¶þ²½£¬¸ù¾ÝÓû§A´æ´¢ÔÚIM·þÎñÆ÷ÉϵĺÃÓÑÁÐ±í£¨Buddy List£©£¬·þÎñÆ÷½«Óû§AÔÚÏßµÄÏà¹ØÐÅÏ¢·¢Ë͸øҲͬʱÔÚÏßµÄIMºÃÓѵÄPC»ú£¬ÕâЩÐÅÏ¢°üÀ¨ÔÚÏß״̬¡¢IPµØÖ·¡¢IM¿Í»§¶ËʹÓõÄTCP¶Ë¿Ú£¨Port£©ºÅµÈ£¬IMºÃÓѵĿͻ§¶ËÊÕµ½´ËÐÅÏ¢ºó½«ÔÚÓèÒÔÌáʾ¡£

µÚÈý²½ÊÇIM·þÎñÆ÷°ÑÓû§A´æ´¢ÔÚ·þÎñÆ÷ÉϵĺÃÓÑÁÐ±í¼°Ïà¹ØÐÅÏ¢»ØË͵½ËûµÄ¿Í»§¶Ë»ú£¬ÕâЩÐÅÏ¢°üÀ¨Ò²ÔÚÏß״̬¡¢IPµØÖ·¡¢IM¿Í»§¶ËʹÓõÄTCP¶Ë¿Ú£¨Port£©ºÅµÈÐÅÏ¢£¬Óû§AµÄIM¿Í»§¶ËÊÕµ½ºó½«ÏÔʾÕâЩºÃÓÑÁÐ±í¼°ÆäÔÚÏß״̬¡£ 4.1.2 ͨѶ·½Ê½

(1)ÔÚÏßÖ±½ÓͨѶ

Èç¹ûÓû§AÏëÓëËûµÄÔÚÏߺÃÓÑÓû§BÁÄÌ죬Ëû½«Ö±½Óͨ¹ý·þÎñÆ÷·¢Ë͹ýÀ´µÄÓû§BµÄIPµØÖ·¡¢TCP¶Ë¿ÚºÅµÈÐÅÏ¢£¬Ö±½ÓÏòÓû§BµÄPC»ú·¢³öÁÄÌìÐÅÏ¢£¬Óû§BµÄIM

¿Í»§¶ËÈí¼þÊÕµ½ºóÏÔʾÔÚÆÁÄ»ÉÏ£¬È»ºóÓû§BÔÙÖ±½Ó»Ø¸´µ½Óû§AµÄPC»ú£¬ÕâÑùË«·½µÄ¼´Ê±ÎÄ×ÖÏûÏ¢¾Í²»ÔÙIM·þÎñÆ÷ÖÐת£¬¶øÊÇÖ±½Óͨ¹ýÍøÂç½øÐеã¶ÔµãµÄͨѶ£¬¼´

¡¾5¡¿

¶ÔµÈͨѶ·½Ê½£¨Peer To Peer£©¡£

(2)ÔÚÏß´úÀíͨѶ

Óû§AÓëÓû§BµÄµã¶ÔµãͨѶÓÉÓÚ·À»ðǽ¡¢ÍøÂçËٶȵÈÔ­ÒòÄÑÒÔ½¨Á¢»òÕßËٶȺÜÂý£¬IM·þÎñÆ÷½«»áÖ÷¶¯ÌṩÏûÏ¢ÖÐת·þÎñ£¬¼´Óû§AºÍÓû§BµÄ¼´Ê±ÏûϢȫ²¿ÏÈ·¢Ë͵½IM·þÎñÆ÷£¬ÔÙÓÉ·þÎñÆ÷ת·¢¸ø¶Ô·½¡£ 4.2Èí¼þÉè¼ÆÁ÷³Ì

ÒòΪ¸ÃϵͳÆäÐèÇóÊÇÊ®·ÖÃ÷È·µÄ£¬ËùÒÔ¸ÃϵͳµÄ¿ª·¢Á÷³Ì²ÉÓÃÆÙ²¼Ä£ÐͽøÐÐÉè¼Æ£¬·ÖΪ¼¸´ó²½Ö裺ÏȽøÐÐÐèÇó·ÖÎö£¬ÔÙÊÇϵͳÉè¼Æ£¬È»ºóÊÇÏêϸÉè¼ÆÓë±àÂ룬Æä´ÎÊÇÈí

¡¾6¡¿¼þµÄ²âÊÔ£¬×îºóÊÇÈí¼þµÄÔËÐкÍά»¤¡£ÔÚʵ¼Ê¹ý³ÌÖÐÕâЩ²½Öè¾­³£ÊÇÖصþºÍ±Ë´Ë¼ä

ÓÐÐÅÏ¢½»»»£¬Ëü²»ÊÇÒ»¸ö¼òµ¥ÏßÐÔ¹ý³Ì£¬¶øÊÇ°üÀ¨¿ª·¢²½ÖèµÄ¶à¸ö·´¸´¡£Èçͼ2Ëùʾ¡£

ͼ2 ¼´Ê±Í¨Ñ¶ÏµÍ³¿ª·¢Á÷³Ìͼ

4.3¹¦ÄÜÄ£¿é»®·Ö

¸Ã¼´Ê±ÁÄÌ칤¾ß°´ÈçϹý³ÌÍê³ÉͨÐÅ£º

(1)¿Í»§Ïò·þÎñÆ÷×¢²á£¬¸æÖª·þÎñÆ÷¸Ã¿Í»§¼àÌýijÖ÷Ì⣻ (2)¿Í»§×¢²áÖ®ºó£¬Ïò·þÎñÆ÷·¢ËÍÏûÏ¢£»

(3)·þÎñÆ÷ÔÙ°ÑÏûÏ¢·¢Ë͸øËùÓмàÌý´ËÖ÷ÌâµÄ¿Í»§¡£ ¸ù¾ÝÒÔÉÏÃèÊö£¬¸Ãϵͳ¹¦ÄÜÄ£¿éͼÇë¼ûͼ3¡£

ͼ3 ͨѶϵͳµÄ¹¦ÄÜÄ£¿é

4.3.1 ·þÎñÆ÷¶Ë

ÓÉͼ3¿ÉÖª·þÎñÆ÷¶ËÍê³ÉÖÁÉÙ3´ó¹¦ÄÜ£º½¨Á¢Á¬½Ó¡¢´æ´¢Êý¾ÝºÍ¼àÌý¿Í»§¡£Õâ3´ó¹¦ÄܵľßÌ庬ÒåÈçÏ£º

(1)½¨Á¢Ò»¸öServerSocketÁ¬½Ó£¬²»¶ÏÕìÌýÊÇ·ñÓпͻ§¶ËÁ¬½Ó»òÕ߶ϿªÁ¬½Ó¡£ (2)·þÎñÆ÷¶ËÊÇÒ»¸öÐÅÏ¢·¢ËÍÖÐÐÄ£¬ËùÓпͻ§¶ËµÄÐÅÏ¢¶¼´«µ½·þÎñÆ÷¶Ë£¬ÔÙÓÉ·þÎñÆ÷¸ù¾ÝÒªÇó·Ö·¢³öÈ¥¡£

(3)Êý¾Ý¿âÊý¾Ý²Ù×÷°üÀ¨½«Óû§ÐÅÏ¢´æ´¢µ½Êý¾Ý¿âµÈ¡£ 4.3.2 ¿Í»§¶Ë

¿Í»§¶ËÒªÍê³É4´ó¹¦ÄÜ£ºÐ½¨Á¢Óû§¡¢Óû§µÇ¼¡¢Í¨ÐŽ»Á÷¡£ÕâЩ¹¦Äܵĺ¬ÒåÈçÏ£º

(1)н¨Á¢Óû§£º¿Í»§¶ËÓë·þÎñÆ÷¶Ë½¨Á¢Í¨ÐÅÐŵÀ£¬Ïò·þÎñÆ÷¶Ë·¢ËÍн¨Óû§µÄÐÅÏ¢£¬½ÓÊÕÀ´×Ô·þÎñÆ÷µÄÐÅÏ¢½øÐÐ×¢²á¡£

(2)Óû§µÇ¼£º¿Í»§¶ËÓë·þÎñÆ÷¶Ë½¨Á¢Í¨ÐÅÐŵÀ£¬Ïò·þÎñÆ÷¶Ë·¢ËÍÐÅÏ¢£¬Íê³ÉÓû§

µÇ¼¡£

(3)ͨÐŽ»Á÷£º¿Í»§¶Ë¿ÉÍê³ÉµÄÐÅÏ¢µÄ±à¼­¡¢·¢ËͺͽÓÊյȹ¦ÄÜ¡£ 4.4 Êý¾Ý¿â¸ÅÒªÉè¼Æ

ÒòΪ±¾ÏµÍ³²ÉÓõÄÊÇ2¼¶CS½á¹¹Ä£Ê½£¬ËùÒÔ£¬ÎªÁ˼õÉÙ·þÎñÆ÷µÄ´æ´¢Á¿£¬·½±ã³ÌÐòÉè¼Æ£¬±¾ÏµÍ³Ö»¶ÔÓû§ÐÅÏ¢½øÐд洢¡£ÀûÓÃJAVAÖеÄhibernate¿ò¼Ü¼¼Êõ½øÐд洢¡£ÔÚHibernateÖУ¬¸÷±íµÄÓ³ÉäÎļþ?. newMessage¡£ÆäÖУ¬staticÊǹؼü×Ö£¬±íʾ¾²Ì¬±äÁ¿£¬Boolean±íʾ±äÁ¿ÀàÐÍΪ²¼¶ûÐÍ£¬±äÁ¿ÃûΪnewMessage¡£ÕâÌõÓï¾äµÄÒâ˼ÊǶ¨ÒåÒ»¸ö¾²Ì¬±äÁ¿newMessage£¬ËüµÄÀàÐÍΪ²¼¶ûÐÍ¡£ÖµµÃÇ¿µ÷µÄÊDz¼¶ûÐÍÊý¾ÝÖ»ÓÐÁ½¸öÖµtrueºÍfalse£¬²¢ÇÒËüÃDz»¶ÔÓ¦ÈËÊýÕûÊýÖµ¡£

if(start) {

sFrame.txtStatus.setText(\ÒÑÆô¶¯...\

log(null,\·þÎñÆ÷ÒÑÆô¶¯..\

}else { }

sFrame.txtStatus.setText(\¹Ø±ÕÖÐ...\

ÕâÊÇÒ»ÌõifÌõ¼þÅжÏÓï¾ä£¬Ëü±íʾ±äÁ¿startÈç¹û²»Îª¿Õ£¬ÄÇôִÐÐÓï¾äµÚÒ»¸ö´óÀ¨ºÅÖеÄÓï¾ä£¬Èç¹ûΪ¿Õ£¬ÔòÖ´ÐÐelseÖеÄÓï¾ä¡£ÆäÖУ¬logΪÊä³öÓï¾ä£¬±íʾÔÚ´°¿ÚÖÐÊä³ö¡°·þÎñÆ÷ÒÑÆô¶¯¡±ÐÅÏ¢¡£

public void run() {

try {while (start) {

}

Socket client = serverSocket.accept();

Connection con = new Connection(client, u, v, userInfo);

} catch (IOException e) {

log(e, \²»ÄܼàÌý£¡\

}

}

Õâ¸öº¯ÊýµÄ×÷ÓÃÊǼàÌýÓû§ÐÅÏ¢£¬void±íʾ¶¨ÒåµÄº¯Êý²»ÐèÒª·µ»ØÖµ£¬whileÊÇÑ­»·Óï¾ä¹Ø¼ü×Ö£¬ÔÚÓï¾äÖеÄÒâ˼Ϊֱµ½startµÄÖµ²»Îª¿Õ£¬½«Ñ­»·Ö´ÐкóÃæÀ¨ºÅµÄÓï¾ä£¬Ö±µ½startֵΪ¿Õºó£¬Ñ­»·²Å½áÊø¡£Connection con±íʾÁ¬½ÓÓû§ÐÅÏ¢¡£CatchÊǶÔjavaÖеÄÒì³£½øÐⶻñ£¬²¢ÇÒÄܹ»Å׳öÒì³££¬±ãÓÚ³ÌÐòÄܹ»Õý³£ÔËÐС£ 5.1.2 µÇ¼Ñé֤ģ¿é

ϵͳµÄµÇ¼ģ¿éÊDZȽÏÖØÒªµÄ£¬ÕâÊÇÓû§µÄÒ»¸öÉí·ÝÑéÖ¤£¬ÊÇͨѶϵͳ±ØÐëµÄÒ»

¸ö¹¦ÄÜÄ£¿é¡£Èç¹û¿Í»§¶ËÊäÈëµÄ×Ö·û´®±í·½Ê½ÐèÒªµÇ¼£¬ÄÇô·þÎñÆ÷ÔÚ½ÓÊÕµ½¸ÃÐÅÏ¢ºóÁ¬½ÓÊý¾Ý¿â£¬×¼±¸´ÓÊý¾Ý¿âÑ¡ÔñêdzƺÍÃÜÂë¡£·þÎñÆ÷½ÓÊÕµ½¿Í»§¶Ë·¢Ë͹ýÀ´µÄºÅÂëºÍÃÜÂëÐÅÏ¢ºó£¬É趨Êý¾Ý¿â²éÑ°Ìõ¼þ£¬²¢Ö´ÐÐÊý¾Ý¿â²éÑ°£¬Í¨¹ý±È½ÏÊäÈëµÄÓû§ÃûºÍÃÜÂëÊý¾Ý¿âÐÅÏ¢À´È´ÇëÓû§µÄµÇ¼ÊÇ·ñ³É¹¦¡£ÒÔÏÂΪµÇ½ÑéÖ¤µÄÁ÷³Ìͼ¡£

ͼ5 Óû§µÇ¼Á÷³Ìͼ

5.1.3 ×¢²á´¦ÀíÄ£¿é

н¨Óû§ÊǼ´Ê±Í¨Ñ¶¹¤¾ßµÄÒ»¸ö»ù±¾¹¦ÄÜ¡£Óû§Ð½¨¹ý³ÌÒ²ÔÚÏ̼߳àÌýº¯Êýrun()ÖС£Ð½¨Óû§µÄ¹ý³ÌÊÇÕâÑùµÄ£ºÊ×ÏÈʹÓÃRegister_Customer()·½·¨¼ÓÔØÊý¾Ý¿âÇý¶¯ÀࣻȻºóʹÓÃdao.getUser()·½·¨»ñÈ¡Êý¾Ý£»ÔÚ»ñȡע²áÃûʱ£¬½øÐÐÅжϣ¬²é¿´Óû§ÃûÊÇ·ñÖظ´£¬Èç¹ûÖظ´£¬ÔòÏò¿Í»§¶Ëµ¯³öÌáʾÐÅÏ¢£¬¼ûͼ6£»Èç¹û²»Öظ´£¬·þÎñÆ÷½ÓÊÕ¿Í»§¶ËÓû§·¢Ë͵Äêdzơ¢ÃÜÂë¡¢Óû§E-mailµÈÐÅÏ¢£¬Ö´ÐÐÊý¾Ý¿âÌí¼Ó²Ù×÷Íê³ÉÓû§µÄ´´½¨£»×îºóÏòÓû§·´À¡×¢²á³É¹¦ÐÅÏ¢¡£

ͼ6 ×¢²áÃûÖظ´ÌáʾÐÅÏ¢

5.2 ¿Í»§¶ËµÄÉè¼ÆÓëʵÏÖ

Ç°Ò»Õ½éÉÜÁË·þÎñÆ÷¶ËµÄÉè¼ÆÓëʵÏÖ£¬¶ÔÓÚCSģʽµÄϵͳ¶øÑÔ£¬»¹±ØÐë¶ÔϵͳµÄ¿Í»§¶Ë½øÐÐÉè¼ÆºÍʵÏÖ¡£ÏÂÃæ¾ÍÀ´½â¾öÕâÑùÒ»¸öÎÊÌâ¡£

¿Í»§¶Ëͨ¹ýSocketÓë·þÎñÆ÷½¨Á¢Á¬½Ó¡£·þÎñÆ÷Óë¿Í»§¶¼Í¨¹ý¹¹ÔìBufferedReader¡¢PrintWriterÀ´½¨Á¢ÊäÈëÁ÷ºÍÊä³öÁ÷£¬Ë«·½Í¨¹ý¸ÃÊäÈëÁ÷ºÍÊä³öÁ÷À´Ï໥´«µÝÐÅÏ¢¡£Ö»ÒªÊÕµ½¿Í»§¶ËµÄÁ¬½ÓÇëÇ󣬷þÎñÆ÷ÀûÓÃaccept()º¯Êý·µ»ØÒ»¸öн¨µÄSocket¶ÔÏó£¬Ëæºó¿Í»§¶ËÏò·þÎñÆ÷·¢ËÍÏûÏ¢£¬ÖîÈç×¢²á¡¢µÇ¼ºÍ²éÕÒͬʵÈÇëÇ󣬷þÎñÆ÷ÊÕµ½ÇëÇóºó£¬Õë¶Ô²»Í¬µÄÏûÏ¢´¦ÀíÇëÇó¡£ 5.2.1 Óû§×¢²áÄ£¿é

µ±Óû§Ïò·þÎñÆ÷¶Ë·¢³ö×¢²áÇëÇóºó£¬¿Í»§¶Ë½«Ïò·þÎñÆ÷·¢ËÍ¿Í»§´«µÝµÄÐÅÏ¢£¬ÖîÈç¿Í»§µÄêdzơ¢ÐԱ𡢸öÈË×ÊÁϵÈÐÅÏ¢¡£µÈ·þÎñÆ÷½ÓÊÕÍê±Ïºó£¬·þÎñÆ÷»áͨ¹ýhibernate¿ò¼Ü¶ÁÈ¡Êý¾Ý¿âÐÅÏ¢£¬²¢½øÐÐÅжϣ¬×îºóÔÚ¿Í»§¶ËÊÕµ½·þÎñÆ÷µÄ·´À¡ÐÅÏ¢¡£

ÏÖ¶Ô²¿·Ö¹Ø¼üÓï¾ä½øÐн²½â¡£

public class Register extends JFrame implements ActionListener {

Toolkit toolkit=Toolkit.getDefaultToolkit(); JButton btnOk,btnCancel,btnClear; public Register(String ip)

{

btnOk=new JButton(\È·¶¨(O)\