ÄúµÄλÖãºÊ×Ò³ ¡ú ¼¼ÊõÖÐÐÄ ¡ú voip¼¼Êõ ¡úIP¶à²¥¼¼Êõ¼°Æä±à³Ì


IP¶à²¥¼¼Êõ¼°Æä±à³Ì

×÷Õߣº¡¡·¢²¼Ê±¼ä£º2007-07-19 00:16:25¡¡À´Ô´£º µã»÷:18



IP¶à²¥£¨Ò²³Æ¶àÖ·¹ã²¥»ò×é²¥£©¼¼Êõ£¬ÊÇÒ»ÖÖÔÊÐíһ̨»ò¶ą̀Ö÷»ú£¨¶à²¥Ô´£©·¢Ë͵¥Ò»Êý¾Ý°üµ½¶ą̀Ö÷»ú£¨Ò»´ÎµÄ£¬Í¬Ê±µÄ£©µÄTCP/IPÍøÂç¼¼Êõ¡£¶à²¥×÷Ϊһµã¶Ô¶àµãµÄͨÐÅ£¬ÊǽÚÊ¡ÍøÂç´ø¿íµÄÓÐЧ·½·¨Ö®Ò»¡£ÔÚÍøÂçÒôƵ/ÊÓÆµ¹ã²¥µÄÓ¦ÓÃÖУ¬µ±ÐèÒª½«Ò»¸ö½ÚµãµÄÐźŴ«Ë͵½¶à¸ö½Úµãʱ£¬ÎÞÂÛÊDzÉÓÃÖØ¸´µã¶ÔµãͨÐÅ·½Ê½£¬»¹ÊDzÉÓù㲥·½Ê½£¬¶¼»áÑÏÖØÀË·ÑÍøÂç´ø¿í£¬Ö»Óжಥ²ÅÊÇ×îºÃµÄÑ¡Ôñ¡£¶à²¥ÄÜʹһ¸ö»ò¶à¸ö¶à²¥Ô´Ö»°ÑÊý¾Ý°ü·¢Ë͸øÌض¨µÄ¶à²¥×飬¶øÖ»ÓмÓÈë¸Ã¶à²¥×éµÄÖ÷»ú²ÅÄܽÓÊÕµ½Êý¾Ý°ü¡£Ä¿Ç°£¬IP¶à²¥¼¼Êõ±»¹ã·ºÓ¦ÓÃÔÚÍøÂçÒôƵ/ÊÓÆµ¹ã²¥¡¢AOD/VOD¡¢ÍøÂçÊÓÆµ»áÒé¡¢¶àýÌåÔ¶³Ì½ÌÓý¡¢¡°push¡±¼¼Êõ£¨Èç¹ÉƱÐÐÇéµÈ£©ºÍÐéÄâÏÖʵÓÎÏ·µÈ·½Ãæ¡£

¡¡¡¡Ò»¡¢IP¶à²¥¼¼Êõ¼ò½é

¡¡¡¡1£®IP¶à²¥µØÖ·ºÍ¶à²¥×é

¡¡¡¡IP¶à²¥Í¨ÐűØÐëÒÀÀµÓÚIP¶à²¥µØÖ·£¬ÔÚIPv4ÖÐËüÊÇÒ»¸öDÀàIPµØÖ·£¬·¶Î§´Ó224.0.0.0µ½239.255.255.255£¬²¢±»»®·ÖΪ¾Ö²¿Á´½Ó¶à²¥µØÖ·¡¢Ô¤Áô¶à²¥µØÖ·ºÍ¹ÜÀíȨÏ޶ಥµØÖ·ÈýÀà¡£ÆäÖУ¬¾Ö²¿Á´½Ó¶à²¥µØÖ··¶Î§ÔÚ224.0.0.0~224.0.0.255£¬ÕâÊÇΪ·ÓÉЭÒéºÍÆäËüÓÃ;±£ÁôµÄµØÖ·£¬Â·ÓÉÆ÷²¢²»×ª·¢ÊôÓÚ´Ë·¶Î§µÄIP°ü£»Ô¤Áô¶à²¥µØÖ·Îª224.0.1.0~238.255.255.255£¬¿ÉÓÃÓÚÈ«Çò·¶Î§£¨ÈçInternet£©»òÍøÂçЭÒ飻¹ÜÀíȨÏ޶ಥµØÖ·Îª239.0.0.0~239.255.255.255£¬¿É¹©×éÖ¯ÄÚ²¿Ê¹Óã¬ÀàËÆÓÚ˽ÓÐIPµØÖ·£¬²»ÄÜÓÃÓÚInternet£¬¿ÉÏÞÖÆ¶à²¥·¶Î§¡£

¡¡¡¡Ê¹ÓÃͬһ¸öIP¶à²¥µØÖ·½ÓÊնಥÊý¾Ý°üµÄËùÓÐÖ÷»ú¹¹³ÉÁËÒ»¸öÖ÷»ú×飬Ҳ³ÆÎª¶à²¥×é¡£Ò»¸ö¶à²¥×éµÄ³ÉÔ±ÊÇËæÊ±±ä¶¯µÄ£¬Ò»Ì¨Ö÷»ú¿ÉÒÔËæÊ±¼ÓÈë»òÀ뿪¶à²¥×飬¶à²¥×é³ÉÔ±µÄÊýÄ¿ºÍËùÔڵĵØÀíλÖÃÒ²²»ÊÜÏÞÖÆ£¬Ò»Ì¨Ö÷»úÒ²¿ÉÒÔÊôÓÚ¼¸¸ö¶à²¥×é¡£´ËÍ⣬²»ÊôÓÚijһ¸ö¶à²¥×éµÄÖ÷»úÒ²¿ÉÒÔÏò¸Ã¶à²¥×é·¢ËÍÊý¾Ý°ü¡£

¡¡¡¡2£®IP¶à²¥¼¼ÊõµÄÓ²¼þÖ§³Ö

¡¡¡¡ÒªÊµÏÖIP¶à²¥Í¨ÐÅ£¬ÒªÇó½éÓڶಥԴºÍ½ÓÊÕÕßÖ®¼äµÄ·ÓÉÆ÷¡¢¼¯Ï߯÷¡¢½»»»»úÒÔ¼°Ö÷»ú¾ùÐèÖ§³ÖIP¶à²¥¡£Ä¿Ç°£¬IP¶à²¥¼¼ÊõÒѵõ½Ó²¼þ¡¢Èí¼þ³§É̵Ĺ㷺֧³Ö¡£

¡¡¡¡£¨1£©Ö÷»ú

¡¡¡¡Ö§³ÖIP¶à²¥Í¨Ðŵį½Ì¨°üÀ¨Windows CE 2.1¡¢Windows 95¡¢Windows 98¡¢Windows NT 4ºÍWindows 2000µÈ£¬ÔËÐÐÕâЩ²Ù×÷ϵͳµÄÖ÷»ú¶¼¿ÉÒÔ½øÐÐIP¶à²¥Í¨ÐÅ¡£´ËÍ⣬ÐÂÉú²úµÄÍø¿¨Ò²¼¸ºõ¶¼ÌṩÁ˶ÔIP¶à²¥µÄÖ§³Ö¡£

¡¡¡¡£¨2£©¼¯Ï߯÷ºÍ½»»»»ú

¡¡¡¡Ä¿Ç°´ó¶àÊý¼¯Ï߯÷¡¢½»»»»úÖ»ÊǼòµ¥µØ°Ñ¶à²¥Êý¾Ýµ±³É¹ã²¥À´·¢ËͽÓÊÕ£¬µ«Ò»Ð©ÖС¢¸ßµµ½»»»»úÌṩÁ˶ÔIP¶à²¥µÄÖ§³Ö¡£ÀýÈ磬ÔÚ3COM SuperStack 3 Swith 3300½»»»»úÉÏ¿ÉÆôÓÃ802.1p»òIGMP¶à²¥¹ýÂ˹¦ÄÜ£¬Ö»ÎªÒÑÕì²âµ½IGMPÊý¾Ý°üµÄ¶Ë¿Úת·¢¶à²¥Êý¾Ý°ü¡£

¡¡¡¡£¨3£©Â·ÓÉÆ÷

¡¡¡¡¶à²¥Í¨ÐÅÒªÇó¶à²¥Ô´½ÚµãºÍÄ¿µÄ½ÚµãÖ®¼äµÄËùÓзÓÉÆ÷±ØÐëÌṩ¶ÔInternet×é¹ÜÀíЭÒ飨IGMP£©¡¢¶à²¥Â·ÓÉЭÒ飨ÈçPIM¡¢DVMRPµÈ£©µÄÖ§³Ö¡£

¡¡¡¡µ±Ò»Ì¨Ö÷»úÓû¼ÓÈëij¸ö¶à²¥×éʱ£¬»á·¢³ö¡°Ö÷»ú³ÉÔ±±¨¸æ¡±µÄIGMPÏûϢ֪ͨ¶à²¥Â·ÓÉÆ÷¡£µ±¶à²¥Â·ÓÉÆ÷½ÓÊÕµ½·¢¸øÄǸö¶à²¥×éµÄÊý¾Ýʱ£¬±ã»á½«Æäת·¢¸øËùÓеĶಥÖ÷»ú¡£¶à²¥Â·ÓÉÆ÷»¹»áÖÜÆÚÐԵط¢³ö¡°Ö÷»ú³ÉÔ±²éѯ¡±µÄIGMPÏûÏ¢£¬Ïò×ÓÍø²éѯ¶à²¥Ö÷»ú£¬Èô·¢ÏÖij¸ö¶à²¥×éÒÑûÓÐÈκγÉÔ±£¬Ôòֹͣת·¢¸Ã¶à²¥×éµÄÊý¾Ý¡£´ËÍ⣬µ±Ö§³ÖIGMP v2µÄÖ÷»ú£¨Èç£×indows 98/2000¼ÆËã»ú£©Í˳öij¸ö¶à²¥×éʱ£¬»¹»áÏò·ÓÉÆ÷·¢ËÍÒ»Ìõ¡°À뿪×顱µÄIGMPÏûÏ¢£¬ÒÔ֪ͨ·ÓÉÆ÷ֹͣת·¢¸Ã¶à²¥×éµÄÊý¾Ý¡£µ«Ö»Óе±×ÓÍøÉÏËùÓÐÖ÷»ú¶¼Í˳öij¸ö¶à²¥×éʱ£¬Â·ÓÉÆ÷²Å»áÍ£Ö¹Ïò¸Ã×ÓÍø×ª·¢¸Ã¶à²¥×éµÄÊý¾Ý¡£

¡¡¡¡Ê¹Óöಥ·ÓÉЭÒ飬·ÓÉÆ÷¿É½¨Á¢Æð´Ó¶à²¥Ô´½Úµãµ½ËùÓÐÄ¿µÄ½ÚµãµÄ¶à²¥Â·ÓÉ±í£¬´Ó¶øÊµÏÖÔÚ×ÓÍø¼äת·¢¶à²¥Êý¾Ý°ü¡£ÀýÈ磬PIM£¨Ð­Òé¶ÀÁ¢¶à²¥£©¾ÍÊÇÒ»Öֶಥ·ÓÉЭÒ飬ËüÓÐÁ½ÖÖÀàÐÍ£ºÏ¡Êèģʽ£¨sparse-mode£©ºÍÃܼ¯Ä£Ê½£¨dense-mode£©¡£ÒÔCisco 2621·ÓÉÆ÷ΪÀý£¬ÆôÓÃIP¶à²¥×ª·¢¹¦ÄܵĻù±¾ÉèÖÃÈçÏ£º

¡¡¡¡c2621(config)# ip multicast-routing Æô¶¯IP¶à²¥£¬Ê¹Â·ÓÉÆ÷³ÉΪһ¸ö¶à²¥Â·ÓÉÆ÷

¡¡¡¡c2621(config)# int f0/0 ÅäÖÿìËÙÒÔÌ«Íø¶Ë¿Ú0

¡¡¡¡c2621(config-if)# ip pim dense-mode£¨»òsparse-mode£©Æô¶¯PIM£¬Í¬Ê±¼¤»îIGMPЭÒé

¡¡¡¡c2621(config-if)# int f0/1 ÅäÖÿìËÙÒÔÌ«Íø¶Ë¿Ú£±

¡¡¡¡c2621(config-if)# ip pim dense-mode£¨»òsparse-mode£©

¡¡¡¡¶þ¡¢IP¶à²¥Ó¦Óõıà³Ì·½·¨

¡¡¡¡ÔÚʵ¼ÊÓ¦ÓÃÖУ¬±à³ÌÈËԱͨ³£ÐèÒª×Ô¼º±àÖÆµ×²ãÍøÂçÓ¦ÓóÌÐòÀ´ÊµÏÖÍøÉϵĵײãͨÐÅ£¬Èç¾ßÌåʵÏÖIP¶à²¥Í¨ÐŵŦÄÜ¡£±àÖÆµ×²ãÍøÂçÓ¦ÓóÌÐòͨ³£Òª½èÖúÓÚÍøÂçÊý¾ÝͨÐűà³Ì½Ó¿Ú£¬¶øÔÚ²»Í¬µÄ²Ù×÷ϵͳÖÐËùÌṩµÄÍøÂç±à³Ì½Ó¿ÚÊÇÓÐËù²»Í¬µÄ£¬ÈçÔÚMicrosoft Windows»·¾³ÏµÄÍøÂç±à³Ì½Ó¿Ú¾ÍÊÇWindowsÌ×½Ó×Ö£¨Windows Socket£¬¼ò³ÆWinsock£©¡£

¡¡¡¡WinsockÌṩÁ˰üÀ¨TCP/IP¡¢IPXµÈ¶àÖÖͨÐÅЭÒéϵıà³Ì½Ó¿Ú¡£²»Í¬µÄWindows°æ±¾Ö§³Ö²»Í¬µÄWinsock°æ±¾£¬ÆäÖÐWindows 95µÈÔçÆÚ°æ±¾±¾ÉíÖ»Ö§³ÖWinsock1.1£¨16λ£©Ïµıà³Ì£¨¿ÉÒÔͨ¹ý°²×°Ïà¹ØµÄÈí¼þ°üʹÆäÖ§³ÖWinsock2.0£©£¬¶øWindows98¡¢Windows NT4.0¡¢Windows 2000ÔòÖ±½ÓÖ§³ÖWinsock2.0£¨32룩¡£Winsock2.0ÊÇWinsock1.1µÄÀ©Õ¹£¬³ý¼æÈÝWinsock1.1 APIÍ⣬»¹¶¨ÒåÁËÒ»Ì׿ÉÖ§³ÖIP¶à²¥µÄÓëЭÒéÎ޹صÄAPI¡£

¡¡¡¡Ê¹ÓÃWinsock 2.0ʵÏÖIP¶à²¥µÄÒ»°ã²½ÖèÈçÏ£º

¡¡¡¡1£®³õʼ»¯Winsock×ÊÔ´

¡¡¡¡ÔÚʹÓÃWinsock֮ǰ£¬±ØÐëµ÷ÓÃWSAStartup()º¯Êý³õʼ»¯Windows Sockets DLL¡£ËüÔÊÐíÓ¦ÓóÌÐò»òDLLÖ¸¶¨Windows Sockets APIÒªÇóµÄ°æ±¾¡£

¡¡¡¡2£®´´½¨Ì×½Ó×Ö

¡¡¡¡µ÷ÓÃWSASocket()º¯Êý¿ÉÒÔ´´½¨Ò»¸öʹÓÃUDPЭÒéµÄÌ×½Ó×Ö£¬ËüÊǼÓÈë¶à²¥×éµÄ³õʼ»¯Ì×½Ó×Ö£¬²¢ÇÒÒÔºóÊý¾ÝµÄ·¢ËͺͽÓÊÕ¶¼ÔÚ¸ÃÌ×½Ó×ÖÉϽøÐС£Õë¶ÔIP¶à²¥Í¨ÐÅ£¬¿É½«²ÎÊýdwFlagsÉèÖÃΪWSA_FLAG_MULTIPOINT_C_LEAF¡¢WSA_FLAG_MULTIPOINT_D_LEAFºÍWSA_FLAG_OVERLAPPEDµÄλºÍ£¬Ö¸Ã÷IP¶à²¥Í¨ÐÅÔÚ¿ØÖƲãÃæºÍÊý¾Ý²ãÃæ¶¼ÊÇ¡°ÎÞ¸ùµÄ¡±£¬Ö»´æÔÚÒ¶½Úµã£¬ËüÃÇ¿ÉÒÔÈÎÒâ¼ÓÈëÒ»¸ö¶à²¥×飬¶øÇÒ´ÓÒ»¸öÒ¶½Úµã·¢Ë͵ÄÊý¾Ý»á´«Ë͵½Ã¿Ò»¸öÒ¶½Úµã£¨°üÀ¨Ëü×Ô¼º£©£»´´½¨µÄÌ×½Ó×Ö¾ßÓÐÖØµþÊôÐÔ¡£

¡¡¡¡3£®ÉèÖÃÌ×½Ó×ÖµÄÑ¡Ïî

¡¡¡¡µ÷ÓÃsetsockopt()º¯ÊýΪÌ×½Ó×ÖÉèÖÃSO_REUSEADDRÑ¡ÏÒÔÔÊÐíÌ×½Ó×Ö°óÔúµ½Ò»¸öÒÑÔÚʹÓõĵØÖ·ÉÏ¡£

¡¡¡¡4£®°ó¶¨Ì×½Ó×Ö

¡¡¡¡µ÷ÓÃbind()º¯Êý°ó¶¨Ì×½Ó×Ö£¬´Ó¶ø½«´´½¨ºÃµÄÌ×½Ó×ÖÓë±¾µØµØÖ·ºÍ±¾µØ¶Ë¿ÚÁªÏµÆðÀ´¡£¶ÔÓڶಥͨÐÅÀ´Ëµ£¬·¢ËͺͽÓÊÕÊý¾Ýͨ³£²ÉÓÃͬһ¸ö¶Ë¿Ú¡£

¡¡¡¡ 5£®ÉèÖöಥÌ×½Ó×ÖµÄģʽ

¡¡¡¡WSAIoctl()º¯ÊýµÄÃüÁîÂëSIO_MULTICAST_LOOPÓÃÀ´ÔÊÐí»ò½ûÖ¹¶à²¥Í¨ÐÅʱ·¢ËͳöÈ¥µÄͨÐÅÁ÷Á¿ÊÇ·ñÒ²Äܹ»ÔÚͬһ¸öÌ×½Ó×ÖÉϱ»½ÓÊÕ£¨¼´¶à²¥·µ»Ø£©¡£ÖµµÃ×¢ÒâµÄÊÇ£¬ÔÚWindows 95/98/NT 4ÖУ¬Ä¬ÈÏÊÇÔÊÐí¶à²¥·µ»Ø£¬µ«²»ÄÜÉèÖýûÖ¹£¬·ñÔò»á³ö´í£»Ö»ÓÐÔÚWindows 2000ÒÔÉϰ汾ÖУ¬²ÅÄÜÉèÖÃÔÊÐí/½ûÖ¹¶à²¥·µ»Ø¡£

¡¡¡¡WSAIoctl()º¯ÊýµÄÃüÁîÂëSIO_MULTICAST_SCOPEÓÃÀ´ÉèÖöಥ´«²¥µÄ·¶Î§£¬¼´Éú´æÊ±¼äTTL¡£Ã¿µ±¶à²¥Â·ÓÉÆ÷ת·¢¶à²¥Êý¾Ý°üʱ£¬Êý¾Ý°üÖеÄTTLÖµ¶¼»á±»¼õ1£¬ÈôÊý¾Ý°üµÄTTL¼õÉÙµ½0£¬Ôò·ÓÉÆ÷½«Åׯú¸ÃÊý¾Ý°ü¡£TTLµÄÖµÊǶàÉÙ£¬¶à²¥Êý¾Ý±ã×î¶àÄܾ­¹ý¶àÉÙ¸ö¶à²¥Â·ÓÉÆ÷¡£ÀýÈ磬TTLֵΪ0£¬Ôò¶à²¥Ö»ÄÜÔÚ±¾µØÖ÷»úµÄ¶à¸öÌ×½Ó×ּ䴫²¥£¬¶ø²»ÄÜ´«²¥µ½¡°ÍøÏß¡±ÉÏ£»TTLֵΪ1£¨Ä¬ÈÏÖµ£©£¬Ôò¶à²¥Êý¾ÝÓöµ½µÚÒ»¸ö·ÓÉÆ÷£¬±ã»á±»Ëü¡°ÎÞÇ顱µØ¶ªÆú£¬²»ÔÊÐí´«³ö±¾µØÍøÂçÖ®Í⣬¼´Ö»ÓÐͬһ¸öÍøÂçÄڵĶಥ×é³ÉÔ±²ÅÄÜÊÕµ½¶à²¥Êý¾Ý¡£

¡¡¡¡6£®¼ÓÈëÒ»¸ö¶à²¥×é

¡¡¡¡µ÷ÓÃWSAJoinLeaf()º¯Êý¿É¼ÓÈëÒ»¸ö¶à²¥×é²¢Ö¸¶¨½ÇÉ«£¨·¢ËÍÕß/½ÓÊÕÕߣ©¡£µ÷ÓÃʱ£¬²ÎÊýdwFlags¿ÉÖ¸¶¨Ì×½Ó×Ö×÷Ϊ·¢ËÍÕߣ¨JL_SENDER_ONLY£©¡¢½ÓÊÕÕߣ¨JL_RECEIVER_ONLY£©»òÉí¼æÁ½Õߣ¨JL_BOTH£©¡£µ÷Óóɹ¦ºó»á·µ»ØÒ»¸ö¶à²¥Ì×½Ó×Ö£¬µ÷ÓÃclosesocket()º¯Êý¹Ø±Õ¸ÃÌ×½Ó×Ö¾ÍÀ뿪Á˶ಥ×飬´Ëʱ¿ÉÒÔµ÷ÓÃWSAJoinLeaf()º¯ÊýÔٴμÓÈë¶à²¥×é¡£×¢Ò⣬¶Ô¶à²¥×éÊý¾ÝµÄ½ÓÊպͷ¢ËͲ»ÄÜÔÚ¸ÃÌ×½Ó×ÖÉÏÍê³É¡£

¡¡¡¡7£®Ïò¶à²¥×é·¢ËÍÊý¾Ý

¡¡¡¡µ÷ÓÃsendto()º¯Êý£¬¿ÉÔÚÖ¸¶¨µÄUDPÌ×½Ó×ÖÉÏÏòÖ¸¶¨µÄ¶à²¥×é·¢ËͶಥÊý¾Ý¡£µ÷ÓÃʱ£¬²ÎÊýtoÓ¦Ö¸Ïò¶à²¥×éµÄIPµØÖ·¡£ÖµµÃ×¢ÒâµÄÊÇ£¬ÈôÒ»¸öÓ¦ÓóÌÐòÖ»ÊÇ´òËã¸ø¶à²¥×é·¢ËÍÊý¾Ý£¬±ã²»±Ø¼ÓÈëÒ»¸ö¶à²¥×é¡£

¡¡¡¡8£®µÈ´ýʼþ

¡¡¡¡µ÷ÓÃWSAAsyncSelect()º¯Êý£¬Ê¹Ì×½Ó×ÖÖÃÓÚ·Ç×èÈûģʽ£¬ÕâʱӦÓóÌÐò¾Í¿ÉÔÚ¸ÃÌ×½Ó×ÖÉϽÓÊÕÒÔWindowsÏûϢΪ»ù´¡µÄÍøÂçʼþ֪ͨ¡£ÀýÈ磬Èô²ÎÊýlEventֵΪFD_READ£¬ÔòÓ¦ÓóÌÐò¿ÉÔÚÌ×½Ó×ÖÉϽÓÊÕµ½¡°Êý¾ÝÕýµÈ´ý±»¶ÁÈ롱µÄ֪ͨ¡£

¡¡¡¡9£®´Ó¶à²¥×é½ÓÊÕÊý¾Ý

¡¡¡¡µ÷ÓÃrecvfromº¯Êý£¬¿ÉÔÚÖ¸¶¨µÄUDPÌ×½Ó×ÖÉ϶ÁÈ¡ÊäÈëÊý¾Ý¡£¶à²¥Í¨ÐÅÖÐÊý¾ÝµÄ·¢ËÍÓë½ÓÊÕÒ»°ã²ÉÓÃͬһ¸ö¶Ë¿Ú£¬Òò´ËÆä·¢ËÍÌ×½Ó×ֺͽÓÊÕÌ×½Ó×ÖÊÇÒ»ÑùµÄ¡£

¡¡¡¡10£®¹Ø±ÕÌ×½Ó×Ö£¬ÊÍ·ÅWinsock×ÊÔ´¡£

¡¡¡¡ÔڶಥͨÐŽáÊøºó£¬Ïȵ÷ÓÃclosesocket()º¯Êý¹Ø±Õ¶à²¥Ì×½Ó×ÖºÍUDPÌ×½Ó×Ö£¬È»ºóµ÷ÓÃWSACleanup()º¯Êý½áÊø¶ÔWindows Sockets DLLµÄʹÓá£

¡¡¡¡Èý¡¢Ó¦ÓÃʵÀý

¡¡¡¡ÎªÁË˵Ã÷IP¶à²¥¼¼ÊõµÄÓ¦Ó÷½·¨£¬±¾ÈËÔÚVisual C++.NET»·¾³ÏÂÉè¼ÆÁËÒ»¸ö¼òµ¥µÄ»ùÓÚWindows Socket 2µÄIP¶à²¥Ó¦ÓóÌÐò£¬Í¨¹ý¸ÃÀý×Ó¶ÁÕß¿ÉÒÔÕÆÎÕIP¶à²¥Ó¦ÓóÌÐòÉè¼ÆµÄÒ»°ã·½·¨¡£¸Ã³ÌÐòµÄ¾ßÌåÉè¼Æ·½·¨ÈçÏ£º

¡¡¡¡1£®ÔÚVisual Studio.NETÖн¨Á¢Ò»¸ö»ùÓÚ¶Ô»°¿òµÄMFCÏîÄ¿CMulticastSocket¡£×¢ÒâÔÚ¡°¸ß¼¶¹¦ÄÜ¡±ÉèÖÃÖв»ÒªÑ¡Ôñ¡°WindowsÌ×½Ó×Ö¡±£¬ÕâÊÇÒòΪMFCÖ»Ö§³ÖWindows Socket 1¶ø²»Ö§³ÖWindows Socket 2¡£ÎªÁËÄÜʹÓÃWinsock 2 API±à³Ì£¬ÔÚ³ÌÐòÖÐÓ¦°üº¬¡°winsock2.h¡±Í·Îļþ£¬²¢ÔÚÏîÄ¿ÖмÓÈëws2_32.libµÄ¾²Ì¬¿â£¬¸Ã¾²Ì¬¿âÓ¦ÉèÖÃÔÚÏîÄ¿ÊôÐԵġ°Á´½ÓÆ÷¡±/¡°ÊäÈ롱/¡°¸½¼ÓÒÀÀµÏÖС£

¡¡¡¡2£®ÔÚ¶Ô»°¿ò£¨ÀàÃûCCMulticastSocketDlg£©×ÊÔ´ÖУ¬ÉèÖÃËüµÄCaptionΪ¡°WinSock 2¶à²¥Ó¦ÓóÌÐò¡±£¬²¢Ìí¼ÓÒÔÏ¿ؼþ£º
¡¡¡¡¾²Ì¬Îı¾£ºCaptionΪ¡°½ÓÊÕµ½µÄÐÅÏ¢£º¡±£»

¡¡¡¡±à¼­¿ò£ºIDΪIDC_RECEIVE_EDIT£¬Read Only¡¢Auto Vscroll¡¢Vertical ScrollºÍMultilineÊôÐÔÖµ¶¼ÎªTrue
¡¡¡¡
¡¡¡¡¾²Ì¬Îı¾£ºCaptionΪ¡°·¢Ë͵ÄÐÅÏ¢£º¡±
¡¡¡¡
¡¡¡¡±à¼­¿ò£ºIDΪIDC_SEND_EDIT

¡¡¡¡µÚÒ»¸ö°´Å¥£ºCaptionΪ¡°¼ÓÈë¶à²¥×é(&J)¡±£¬IDΪIDC_JOIN_BUTTON
¡¡¡¡
¡¡¡¡µÚ¶þ¸ö°´Å¥£ºCaptionΪ¡°¶à²¥·¢ËÍ(&S)¡±£¬IDΪIDC_SEND_BUTTON

¡¡¡¡µÚÈý¸ö°´Å¥£ºCaptionΪ¡°À뿪¶à²¥×é(&L)¡±£¬IDΪIDC_LEAVE_BUTTON

¡¡¡¡µÚËĸö°´Å¥£ºCaptionΪ¡°Í˳ö(&Q)¡±£¬IDΪIDC_QUIT_BUTTON ΪÁ½¸ö±à¼­¿ò·Ö±ðÌí¼ÓÏà¹ØÁªµÄCStringÀàÐ͵ıäÁ¿m_SendMessageºÍm_ReceiveMessage£»

¡¡¡¡ÎªËĸö°´Å¥Ìí¼ÓÏàÓ¦µÄÏûÏ¢´¦Àíº¯Êý£»Îª¶Ô»°¿òÌí¼Ó¶¨Ê±Æ÷ÏûÏ¢£¨ÓÃÓÚ¶¨Ê±ÏÔʾ½ÓÊÕµ½µÄÏûÏ¢£©¼°ÆäÏûÏ¢´¦Àíº¯Êý¡£

¡¡¡¡3£®Ìí¼ÓÒ»¸öеĶԻ°¿ò×ÊÔ´£¬ÉèÖÃËüµÄCaptionΪ¡°¼ÓÈë¶à²¥×顱£¬±£ÁôĬÈϵÄÁ½¸ö°´Å¥¿Ø¼þ£¬Í¬Ê±Ìí¼ÓÌí¼ÓÒÔÏ¿ؼþ£º

¡¡¡¡¾²Ì¬Îı¾£ºCaptionΪ¡°IP¶à²¥×鵨ַ£º¡±

¡¡¡¡±à¼­¿ò£ºIDΪIDC_IPADDRESS_EDIT

¡¡¡¡¾²Ì¬Îı¾£ºCaptionΪ¡°IP¶à²¥¶Ë¿Ú£º¡±

¡¡¡¡±à¼­¿ò£ºIDΪIDC_PORT_EDIT ¾²Ì¬Îı¾£ºCaptionΪ¡°Éú´æÊ±¼ä£º¡±

¡¡¡¡±à¼­¿ò£ºIDΪIDC_TTL_EDIT

¡¡¡¡¸´Ñ¡¿ò£ºCaptionΪ¡°¶à²¥·µ»Ø£º¡±£¬IDΪIDC_LOOPBACK_CHECK£¬Left TextÊôÐÔֵΪTrue¡£

¡¡¡¡Îª¸Ã¶Ô»°¿òÌí¼ÓеÄÀàCJoinGroupDlg£¬ËüµÄ»ùÀàΪCDialog£¬È»ºóΪ¸Ã¶Ô»°¿òÖеÄÈý¸ö±à¼­¿ò·Ö±ðÌí¼ÓÏà¹ØÁªµÄ±äÁ¿£¬¼´CSting m_IPAddress¡¢UINT m_nPort¡¢UINT m_nTTL£»Îª¸´Ñ¡¿òÌí¼ÓÏà¹ØÁªµÄBOOLÀàÐ͵ıäÁ¿m_Loopback¡£

¡¡¡¡4£®ÔÚCMulticastSocketDlg.hÎļþµÄÇ°ÃæÌí¼ÓCJoinGroupDlgµÄÍ·Îļþ£º#include ¡°JoinGroupDlg.h¡±£¬²¢ÔÚCCMulticastSocketDlgÀàÖÐÌí¼ÓÁËÒ»¸öCJoinGroupDlgÀàʵÀý¶ÔÏóm_JoinDlg¡£

¡¡¡¡5£®ÎªÁËÄÜÔÚ¶Ô»°¿òÖнÓÊÕÍøÂçʼþ֪ͨ£¬Ó¦Ôö¼ÓÒ»¸öÓû§×Ô¶¨ÒåµÄÏûÏ¢¼°ÏûÏ¢´¦Àíº¯Êý£¬¾ßÌåʵÏÖ·½·¨ÈçÏ£ºÔÚCMulticastSocketDlg.hÎļþµÄÇ°Ãæ×Ô¶¨ÒåÏûÏ¢£º#define WM_SOCK_MSG(WM_USER+166)£¬²¢ÔÚafx_msg¿éÖÐ˵Ã÷ÏûÏ¢´¦Àíº¯Êý£ºafx_msg LRESULT OnSocketMsg (WPARAM wParam,LPARAM lParam)£»ÔÚCMulticastSocketDlg.cppÎļþÖеÄÏûÏ¢Ó³Éä¿éÖУ¬Ê¹ÓÃON_MESSAGE (WM_SOCK_MSG,OnSocketMsg)ºêÖ¸ÁÏûÏ¢Ó³Éäµ½ÏûÏ¢´¦Àíº¯ÊýÖУ¬²¢¾ßÌåʵÏÖÏûÏ¢´¦Àíº¯Êý£ºLRESULT CCMulticastSocketDlg:: OnSocketMsg(WPARAM wParam,LPARAM lParam){¡­}¡£

¡¡¡¡¸Ã³ÌÐòµÄÖ÷Òª´úÂë¿É²Î¼û³ÌÐòÇåµ¥£¬Ïà¹Øº¯ÊýµÄÏêϸ˵Ã÷¿É²Î¿´Microsoft MSDN°ïÖúϵͳ¡£ÎªÁ˽Úʡƪ·ù£¬³ÌÐòÖÐÊ¡ÂÔÁ˲¿·Ö×Ô¶¯Éú³ÉµÄºÍÓÃÓÚ´íÎó´¦ÀíµÄ´úÂë¡£

¡¡¡¡³ÌÐòÇåµ¥£º

¡¡¡¡// CMulticastSocketDlg.cpp : ʵÏÖÎļþ

¡¡¡¡#include "stdafx.h"

¡¡¡¡#include "winsock2.h"

¡¡¡¡#include "CMulticastSocket.h"

¡¡¡¡#include "CMulticastSocketDlg.h"

¡¡¡¡¡­¡­

¡¡¡¡DWORD cbRet;

¡¡¡¡SOCKET Sock,SockM; //UDPÌ×½Ó×Ö£¬¶à²¥Ì×½Ó×Ö

¡¡¡¡BOOL bFlag,bJoin;

¡¡¡¡SOCKADDR_IN local,Remote,From; //·Ö±ðÖ¸Ïò±¾µØ¡¢¶à²¥×éºÍÊý¾ÝÀ´Ô´µÄIPµØÖ·Óë¶Ë¿Ú

¡¡¡¡int Fromlen;

¡¡¡¡char ReceiveBuf[32000]; //½ÓÊÕ»º³åÇø

¡¡¡¡BOOL bDataReceived;

¡¡¡¡¡­¡­

¡¡¡¡BEGIN_MESSAGE_MAP(CCMulticastSocketDlg, CDialog)

¡¡¡¡¡­¡­

¡¡¡¡ON_BN_CLICKED(IDC_JOIN_BUTTON, OnBnClickedJoinButton)

¡¡¡¡ON_BN_CLICKED(IDC_LEAVE_BUTTON, OnBnClickedLeaveButton)

¡¡¡¡ON_BN_CLICKED(IDC_QUIT_BUTTON, OnBnClickedQuitButton)

¡¡¡¡ON_BN_CLICKED(IDC_SEND_BUTTON, OnBnClickedSendButton)

¡¡¡¡ON_WM_TIMER()

¡¡¡¡ON_MESSAGE(WM_SOCK_MSG,OnSocketMsg)

¡¡¡¡END_MESSAGE_MAP()

¡¡¡¡BOOL CCMulticastSocketDlg::OnInitDialog()

¡¡¡¡{

¡¡¡¡CDialog::OnInitDialog();

¡¡¡¡¡­¡­

¡¡¡¡SetTimer(1,100,NULL); //ÉèÖö¨Ê±Æ÷

¡¡¡¡Fromlen=sizeof(From);

¡¡¡¡bDataReceived=TRUE;

¡¡¡¡bJoin=FALSE; return TRUE; // ³ý·ÇÉèÖÃÁ˿ؼþµÄ½¹µã£¬·ñÔò·µ»Ø TRUE

¡¡¡¡}

¡¡¡¡¡­¡­

¡¡¡¡void CCMulticastSocketDlg::OnBnClickedJoinButton() //¼ÓÈë¶à²¥×é

¡¡¡¡{

¡¡¡¡if(m_JoinDlg.DoModal()==IDOK)

¡¡¡¡{

¡¡¡¡WORD wVersionRequested;

¡¡¡¡WSADATA wsaData;

¡¡¡¡int err;

¡¡¡¡wVersionRequested = MAKEWORD(2,2);

¡¡¡¡err = WSAStartup(wVersionRequested, &wsaData); //³õʼ»¯WinSock2×ÊÔ´

¡¡¡¡if(err!= 0){

¡¡¡¡AfxMessageBox("²»ÄܼÓÔØWindowsÌ×½Ó×Ö¶¯Ì¬Á´½Ó¿â,MB_OK");

¡¡¡¡return;

¡¡¡¡}

¡¡¡¡if (LOBYTE(wsaData.wVersion) !=2 || HIBYTE(wsaData.wVersion) !=2){

¡¡¡¡AfxMessageBox("WinSock DLL²»Ö§³Ö2.0°æ±¾,MB_OK");

¡¡¡¡WSACleanup( );

¡¡¡¡return;

¡¡¡¡}

¡¡¡¡//´´½¨Ò»¸öÌ×½Ó×Ö

¡¡¡¡Sock=WSASocket(AF_INET,SOCK_DGRAM,IPPROTO_UDP,

¡¡¡¡(LPWSAPROTOCOL_INFO)NULL,0,WSA_FLAG_OVERLAPPED

¡¡¡¡| WSA_FLAG_MULTIPOINT_C_LEAF|WSA_FLAG_MULTIPOINT_D_LEAF);

¡¡¡¡bFlag=TRUE; //ÉèÖÃÌ×½Ó×ÖÑ¡ÏʹÌ×½Ó×ÖΪ¿ÉÖØÓö˿ڵØÖ·

¡¡¡¡setsockopt(Sock,SOL_SOCKET,SO_REUSEADDR,(char*)&bFlag,sizeof(bFlag));

¡¡¡¡//½«Ì×½Ó×ְ󶨵½Óû§Ö¸¶¨¶Ë¿Ú¼°Ä¬ÈϵĽӿÚ

¡¡¡¡memset(&local,0,sizeof(local));

¡¡¡¡local.sin_family=AF_INET;

¡¡¡¡local.sin_port=htons((USHORT)m_JoinDlg.m_nPort);

¡¡¡¡local.sin_addr.s_addr=htonl(INADDR_ANY);

¡¡¡¡bind(Sock,(struct sockaddr FAR *)&local,sizeof(local));

¡¡¡¡//ÉèÖöಥÊý¾Ý±¨´«²¥·¶Î§£¨Éú´æÊ±¼äTTL£©

¡¡¡¡WSAIoctl(Sock,SIO_MULTICAST_SCOPE,&m_JoinDlg.m_nTTL,sizeof(int),

¡¡¡¡NULL,0,&cbRet,NULL,NULL);

¡¡¡¡//ÉèÖöಥ·µ»Ø£¨LOOKBACK£©

¡¡¡¡BOOL nLoopBack=m_JoinDlg.m_Loopback;

¡¡¡¡WSAIoctl(Sock,SIO_MULTIPOINT_LOOPBACK,&nLoopBack,sizeof(nLoopBack),

¡¡¡¡NULL,0,&cbRet,NULL,NULL);

¡¡¡¡memset(&Remote,0,sizeof(Remote));

¡¡¡¡Remote.sin_family=AF_INET;

¡¡¡¡Remote.sin_addr.s_addr=inet_addr(m_JoinDlg.m_IPAddress);

¡¡¡¡Remote.sin_port=htons(m_JoinDlg.m_nPort);

¡¡¡¡//¼ÓÈëµ½Ö¸¶¨µÄ¶à²¥×飬²¢Ö¸¶¨Îª¼È×÷Ϊ·¢ËÍÕßÓÖ×÷Ϊ½ÓÊÕÕߣ¨JL_BOTH£©

¡¡¡¡SockM=WSAJoinLeaf(Sock,(sockaddr*)&Remote,sizeof(Remote),

¡¡¡¡NULL,NULL,NULL,NULL,JL_BOTH);

¡¡¡¡WSAAsyncSelect(Sock,m_hWnd,WM_SOCK_MSG,FD_READ); //×¢²áÍøÂçÏûÏ¢¼°ÆäÍøÂçʼþ

¡¡¡¡bJoin=TRUE;

¡¡¡¡}

¡¡¡¡}

¡¡¡¡void CCMulticastSocketDlg::OnBnClickedSendButton()

¡¡¡¡//¶à²¥·¢ËÍ

¡¡¡¡{

¡¡¡¡if(bJoin)¡¡{

¡¡¡¡UpdateData(TRUE);

¡¡¡¡const char* strMessage=LPCTSTR(m_SendMessage);

¡¡¡¡int nSize=m_SendMessage.GetLength()+1;

¡¡¡¡sendto(Sock,strMessage,nSize,0,(sockaddr*)&Remote,sizeof(Remote));

¡¡¡¡}

¡¡¡¡else

¡¡¡¡AfxMessageBox("ÇëÏȼÓÈë¶à²¥×飡");

¡¡¡¡m_SendMessage="";

¡¡¡¡UpdateData(FALSE);

¡¡¡¡}

¡¡¡¡void CCMulticastSocketDlg::OnBnClickedLeaveButton()

¡¡¡¡{ //À뿪¶à²¥×é

¡¡¡¡closesocket(SockM);

¡¡¡¡closesocket(Sock);

¡¡¡¡WSACleanup();

¡¡¡¡m_SendMessage="";

¡¡¡¡m_ReceiveMessage="";

¡¡¡¡bDataReceived=TRUE;

¡¡¡¡bJoin=FALSE;

¡¡¡¡UpdateData(FALSE);

¡¡¡¡}

¡¡¡¡void CCMulticastSocketDlg::OnBnClickedQuitButton()

¡¡¡¡{ //Í˳ö

¡¡¡¡DestroyWindow();

¡¡¡¡}

¡¡¡¡void CCMulticastSocketDlg::OnTimer(UINT nIDEvent) //¶¨Ê±Æ÷´¦Àíº¯Êý£¬ÊµÏÖ½ÓÊÕÐÅÏ¢µÄ¶¨Ê±¸üÐÂ

¡¡¡¡{

¡¡¡¡if(bDataReceived)

¡¡¡¡{ m_ReceiveMessage+=ReceiveBuf;

¡¡¡¡m_ReceiveMessage+="/r/n";

¡¡¡¡bDataReceived=FALSE;

¡¡¡¡UpdateData(FALSE);

¡¡¡¡}

¡¡¡¡CDialog::OnTimer(nIDEvent);

¡¡¡¡}

¡¡¡¡LRESULT CCMulticastSocketDlg::OnSocketMsg(WPARAM wParam,LPARAM lParam)

¡¡¡¡{

¡¡¡¡//¼ìË÷ÍøÂçʼþ

¡¡¡¡switch(WSAGETSELECTEVENT(lParam))¡¡{

¡¡¡¡case FD_READ:

¡¡¡¡recvfrom(Sock,ReceiveBuf,32000,0,(sockaddr *)&From,&Fromlen);

¡¡¡¡bDataReceived=TRUE; //ÉèÖÃÒѽÓÊÕµ½Ò»ÌõÐÅÏ¢±êÖ¾

¡¡¡¡break;

¡¡¡¡}

¡¡¡¡return TRUE;

¡¡¡¡}



¡ù Ïà¹ØÎÄÕÂ
ÎÞÏà¹ØÐÅÏ¢
·¢±íÆÀÂÛ ²é¿´ÆÀÂÛ ÆÀÂÛÊý:


Óû§Ãû:
ÃÜ   Âë:
ÑéÖ¤Âë: ÄäÃû·¢±í



´ó¼Ò¶¼À´ÆÀÂÛ.
×Ô¾õ×ñÊØ¹ú¼Ò·¨ÂÉ·¨¹æ.
±¾Õ¾²»³Ðµ£Èκη¨ÂÉÔðÈÎ.
ÄúҪΪÄúËù·¢ÑÔÂ۵ĺó¹û¸ºÔð£¬
¹ÊÇë¸÷λ×ñ¼ÍÊØ·¨²¢×¢ÒâÓïÑÔÎÄÃ÷









¹ã¸æ
¹ã¸æ¹ã¸æ
»¶Ó­¹âÁÙ±¾Õ¾ ÓÐÎÊÌâ»òÇó·½°¸Çëµ½ÂÛ̳ÁôÑÔ
·½°¸ÖÐÐÄ×ÊÔ´µ¼º½
Ê×Ò³
·½°¸ÏÂÔØ
¼¼ÊõÖÐÐÄ
²¼Ïß¼¼Êõ  (837)
¹¤³ÌÊ©¹¤  (72)
¼¼Êõ±ê×¼  (35)
·½°¸ÔÓ̳  (3012)
»ù´¡ÓëÓ¦Óà (1909)
ͨѶ¼¼Êõ  (13915)
voip¼¼Êõ  (802)
×îм¼ÊõÎÄÕÂ
¡¤ IPÆÛÆ­µÄÔ­Àí
¡¤ IP¶à²¥¼¼Êõ¼°Æä±à³Ì
¡¤ Cisco IP Telephony½¨Öü¼Ðgœ/
¡¤ ´óÐÍIPÍøÂçÉè¼Æ
¡¤ IPµç»°ÏµÍ³ºÍºô½Ð·Óɼ¼Êõ£¨1£©
¡¤ TI·¢²¼Puma IV¼Ü¹¹ ÍÆ½øÏßÀÂÓï
¡¤ »ªÎªÍÆÍòÕ×IPv6·ÓÉÆ÷ ¹úÄÚÊ×¼Ò
¡¤ NGNµÄ¹Ø¼üÊÇÖն˺ÍÒµÎñ
¡¤ HeadCallͨѶ²úÆ·ÉÏÊÐ Ä¿±êÈ«Çò
¡¤ WiMAXÏòÖйúÊг¡ÉøÍ¸
¡¤ ΢ÈíЯÊÖScanSoft ¹²Ä±ÓïÒôʶ±ð
¡¤ VoIPͨ¹ýÁãÊÛÇþµÀ½øÈëÃÀ¹ú¼ÒÍ¥
¡¤ p2pÓïÒôͨÐźÍÒ»°ãvoipͨÐÅÖÊÁ¿
¡¤ IPTV£º»»¸ö·½·¨¿´µçÊÓ
¡¤ IPTV½«³ÉΪ¿í´øÓ¦ÓÃгè ÈýÍøÈÚ
ÈȵãÎÄÕÂ
¡¤ ×ۺϲ¼Ïß·½°¸
¡¤ в¼Ïß±ê×¼×ßÏòºÎ·½£¿
¡¤ [·½°¸]¹¤Òµ´óѧУ԰ÐÅϢϵͳ½¨
¡¤ °²È«·À·¶ÏµÍ³µÄ¹¤³ÌÉè¼Æ
¡¤ ¾ÞÁúÒÆ¶¯°ì¹«ÏµÍ³½â¾ö·½°¸
¡¤ [°¸Àý]±¦µÂ---³¬¼¶¶à¹¦ÄÜÁ¬ËøÍø
¡¤ ×ۺϲ¼ÏßϵͳµÄ²¼Ïß±ê×¼½éÉÜ
¡¤ [·½°¸]ѧУÊý×ÖͼÊé¹Ý½â¾öϵͳ
¡¤ IPÆÛÆ­µÄÔ­Àí
¡¤ ¾­Î³ÖÐÌì¹ãµç¿í´øÔËӪƽ̨·½°¸
¡¤ ·Ö²¼½²½âÍøÂç»ú·¿×ۺϲ¼ÏßÊ©¹¤
¡¤ ÎåÀà,ÐÂÎåÀà,³¬ÎåÀàµÈ²¼Ïß²âÊÔ
¡¤ ×ۺϲ¼Ïߣº²¼Ïßר¼Ò½ÌÄãÈçºÎÑ¡
¡¤ RJ-45²åÍ·µÄ´òÏß±ê×¼ÓëÖÆ×÷
¡¤ ̸˫½ÊÏß·ÖÀ༰ÎåÀàË«½ÊÏßµÄʶ
ÂÛ̳ÐÂÌû
¡¤ ´óÁ¿CADͼֽÃâ·ÑÏÂÔØ
¡¤ Â¥Óî×Ô¿ØÍ¼Ö½Ãâ·ÑÏÂÔØ
¡¤ ·ÀÀ×ͼֽÃâ·ÑÏÂÔØ
¡¤ ²¼ÏßͼֽÃâ·ÑÏÂÔØ
¡¤ ÖÇÄÜÐ¡Çø°²·ÀϵͳµÄÉè¼ÆÓëʵÏÖ
¡¤ ÖÇÄÜ×¡Õ¬Ð¡ÇøÈõµç»ú·¿µÄ·ÀÀ×´ë
¡¤ ¼¼·ÀϵͳÖÐÈõµç»ú·¿µÄ°²È«ÓëÉè
¡¤ ×Ô¶¯ÅçË®Ãð»ðϵͳÔöѹÉèÊ©²ÎÊý
¡¤ ¼õ·ÊС·½·¨
¡¤ ÉÙ³Ô+ºÏÀíÔ˶¯+¼á³Ö===ÌåÖØ¼õÉÙ
¡¤ ½­ËÕÕżҸÛijÁ·³¡°²×°¹¤³ÌÊ©¹¤
¡¤ Á׿óÖÎÀí¼°ÎÛË®´¦ÀíÊ©¹¤×éÖ¯Éè
¡¤ Ìì½òijÔÙÉúË®³§É豸°²×°Ê©¹¤×é
¡¤ ɽ¶«Ä³Ë®³§°²×°¹¤³ÌÊ©¹¤×éÖ¯Éè
¡¤ ij¸ß²ãסլˮµç°²×°Ê©¹¤×éÖ¯Éè
¡¤ ¸ß²ã½¨ÖþË®µç°²×°¹¤³ÌÊ©¹¤×éÖ¯
¡¤ ÖØÇìÊÐijÊÐÕþ¹ÜÍøÊ©¹¤×éÖ¯Éè¼Æ
¡¤ ijÊйú¼Ê»áÕ¹ÖÐÐÄÏû·À¹¤³ÌÊ©¹¤
¡¤ ij¸ß²ãסլˮµç°²×°Ê©¹¤×éÖ¯Éè
¡¤ ¸ß²ã½¨ÖþË®µç°²×°¹¤³ÌÊ©¹¤×éÖ¯
ÈȵãÍÆ¼ö·½°¸
Ïà¹ØÈí¼þÏÂÔØ