3 IM ClientÓëIM ServerÖ®¼äµÄͨѶÐÒé
3.1 Êý¾ÝÊÕ·¢·½Ê½ÓëÊý¾Ý½á¹¹µÄÉè¼ÆºÍ¶¨Òå
3.1.1 Êý¾ÝÊÕ·¢·½Ê½µÄÉè¼Æ
ÔÚIMÖУ¬ËùÓй¦ÄܵÄʵÏÖ±ØÐëÒÀ¿¿¿Í»§¶ËÓë·þÎñ¶ËÖ®¼äµÄÊý¾ÝͨÐÅÀ´Íê³É¡£ÔÚ´Ë£¬ÐèÒª¶¨ÒåÒ»¸öÐÒ飬Èÿͻ§¶ËÓë·þÎñ¶ËÖ®¼ä°´ÕÕ¶¨ÒåµÄÐÒéÀ´½øÐÐÊý¾ÝͨÐÅ£¬¶ø²»ÊÇÔÓÂÒÎÞÕµÄÈÎÒâµÄÊý¾ÝÊÕ·¢¡£
Ê×ÏÈ£¬°´ÕÕÒ»°ã¹ßÀý£¬½«Òª·¢Ë͵ÄÊý¾Ý×ö³ÉÊý¾Ý°üµÄÐÎʽÀ´½øÐд«Ê䣬²¢ÇÒ·ÖΪÇëÇó°üºÍÓ¦´ð°ü¡£ËùÓеIJÙ×÷¶¼Ê×ÏÈÓɿͻ§ÖÕ¶Ë·¢ËÍÇëÇó°ü¸øserver¶Ë£¬server¶ÔÖն˵ÄÇëÇó½øÐÐÏàÓ¦µÄ´¦Àí£¨¿ÉÄÜ·ÃÎÊÊý¾Ý¿â£©ºó½«½á¹û×÷ΪӦ´ð°üµÄÒ»²¿·Ö·µ»Ø¸ø¿Í»§ÖÕ¶Ë£¬ÖÕ¶Ëͨ¹ý½âÎöÓ¦´ð°üÀ´µÃµ½IM serverµÄ»ØÓ¦²¢¼ÌÐøÖ´ÐÐÏàÓ¦²Ù×÷¡£ÔÚ½øÐÐͨѶ¼°ÔËÐÐÈÎºÎÆäËûµÄcommand֮ǰÐèÒª½øÐÐÁ¬½ÓÈÏÖ¤¡£
ËùÓеIJÙ×÷¶¼ÓС°ÇëÇ󡪡ªÓ¦´ð¡±µÄģʽÀ´½øÐУ¬Æä¹ý³ÌÈçͼ3-1Ëùʾ¡£
clientÇëÇóÊý¾Ý¿â·ÃÎÊÇëÇóµÄÊý¾ÝserverDBÓ¦´ð
ͼ3-1 ÇëÇóÓ¦´ð˳Ðòͼ
3.1.2 ͨÐÅÐÒéÊý¾Ý°ü½á¹¹¶¨Òå
ÓÉÓÚÐèÒª½øÐд«ÊäµÄÊý¾ÝÒÔ¼°¿Í»§¶ËÓë·þÎñ¶ËÖ®¼äµÄͨÐÅÊý¾ÝµÄÀàÐÍÊǶàÑù»¯µÄ£¬±ØÐ뽫ÖÖÀà·±¶àµÄÊý¾Ý£¬ÒÔ¾¡¿ÉÄÜÏàͬ»òÕßÏàËÆµÄ½á¹¹½øÐзâ×°£¬·ñÔò£¬¶àÑù»¯µÄÐÅÏ¢½»»¥ºÍÊý¾Ý´«Ê佫¸øÊµÏÖ¹¦ÄܺʹúÂëµÄ±àд´øÀ´¾Þ´óµÄÂé·³ºÍ¼«Æä·³Ëö¸´ÔӵŤ×÷¡£Í¬Ê±£¬Êý¾ÝµÄ¶àÑù»¯Ê¹µÃ¸÷¸öÊý¾Ý°üµÄ³¤¶È½«²»ÏàÒ»Ö£¬Éõ
ÖÁijЩÊý¾Ý°üµÄ³¤¶È´óС½«ÊǶ¯Ì¬¿É±äµÄ£¬¶øÔÚSOCKETÍøÂç±à³ÌÖУ¬Ã¿Ò»´ÎÊý¾ÝµÄ½ÓÊպͷ¢ËͶ¼ÊÇÐèҪȷ¶¨³¤¶ÈµÄ¡£Îª´Ë£¬Éè¼Æ³öÕâÑùÒ»ÖÖ·½°¸£º½«¶ËÓë¶ËÖ®¼äÒ»´ÎÒª·¢Ë͵ÄÊý¾Ý°ü·ÖÀëΪÁ½¸ö²¿·Ö£¬³ÆÎª°üÍ·ºÍ°üÌ壬°üÍ·Öаüº¬ÓиÃÊý¾Ý°üµÄÏà¹ØÊôÐÔÐÅÏ¢£¬ÓÉÓÚÖ»Êǰüº¬Êý¾Ý°üÊôÐÔ¶ø·ÇÕæÕýµÄÊý¾Ý£¬ËùÒÔ£¬°üÍ·µÄ³¤¶È¿ÉÒÔÊǹ̶¨²»±äµÄ¡£¶ø°üÌåÖУ¬ÔòÊÇÕæÕý´«ÊäµÄÊý¾ÝËùÔÚ£¬Êý¾Ý½ÓÊÕ·½¸ù¾Ý°üÍ·ÖÐÌṩµÄÐÅÏ¢µÃÖª°üÌåÖÐÊý¾ÝÄÚÈݵÄÀàÐÍ£¬´Ó¶øÕë¶Ô²»Í¬ÀàÐ͵İüÌå×öÏàÓ¦µÄ½ÓÊպͽâÎö¹¤×÷¡£Í¼3-2±íʾ³öÁËÊý¾Ý°üµÄ´óÖÂ½á¹¹ÌØÕ÷¡£
ÄÚÈݰüÀ¨£º°üÀàÐÍ£¨ÇëÇó¡¢Ó¦´ð£©£¬²Ù×÷Â룬
·µ»ØÂ룬·¢ËÍ·½ID£¬½ÓÊÕ·½ID£¬°üÌ峤¶ÈµÈµÈ
°üÍ· °üÌå ÆäÖÐΪÏàÓ¦ÀàÐ͵ÄÊý¾Ý£¬ÇëÇóµÄÄÚÈÝ£¬»ØÓ¦µÄÊý¾ÝµÈµÈ£¬¸ù¾ÝÊý¾Ý°üµÄ×÷ÓúÍÀàÐͲ»Í¬¶ø²»Í¬£¬³¤¶È¿É±ä
Êý¾Ý°ü
ͼ3-2 C/SͨÐÅÐÒéÊý¾Ý°ü½á¹¹Ê¾Òâͼ
3.2 ͨÐÅÐÒéÊý¾Ý°üÔÚʵÏÖ¹ý³ÌÖе͍Òå
3.2.1 Êý¾Ý°ü°üÍ·¶¨Òå
Èçͼ3-2Ëùʾ£¬Êý¾Ý°üµÄ°üÍ·ÈçͬÈ˵ĴóÄÔÒ»°ãÖØÒª£¬ÆäÖаüº¬×ŸÃÊý¾Ý°üËùÓеÄÏà¹ØÊôÐÔ£¬ÄÜ·ñÕýÈ·½ÓÊձ䳤µÄ°üÌ壬½â¶Á°üÖеÄÊý¾Ý£¬½«Æäת»¯ÎªÓÐÓõÄÐÅÏ¢£¬¶¼È¡¾öÓÚ°üÌåÄÚÈݵÄÕýÈ·½âÎö¡£ÔÚ´Ë£¬½«ÇëÇó°üºÍÓ¦´ð°üµÄ°üͷͳһÆðÀ´£¬Éè¼Æ³öÒ»¸öÒ»Ö¿ÉÐеĽṹ£¬ÆäʵÏÖ´úÂëÈçÏ£º
typedef struct data_packet {
char char char char int32
m_nMajorType; m_strServiceCode; m_strOperationCode; m_nReturnCode; m_nUseless;
}
int32 int32 int32
m_nSendID; m_nRecvID; m_nPacketLength;
ÆäÖУ¬Ã¿¸ö×ֶεÄ˵Ã÷ÈçÏÂ±í£¬±íºóÓÐÇëÇó°üºÍ·µ»Ø°üµÄ¾ßÌå˵Ã÷£¬Èç±í3-1Ëùʾ¡£
±í3-1 ×Ö¶Î˵Ã÷±í
Ãû³Æ ³¤¶È£¨byte£© ˵Ã÷ Çø·ÖIMºÍMailµÄÏûÏ¢ IM£º0x01 Mail£º0x02 Ϊ¶þÆÚ¿ª·¢Óʼþ¹¦ÄÜËùÁô ·þÎñÃû ÃüÁîÃû£¬¾ßÌ嶨Òå¼û ·µ»ØÖµ ÐÒéÀ©Õ¹ ·¢ËÍÕßµÄID ÏÂÃæµÄÊÇÌØÊâID 0 ·þÎñÆ÷ ½ÓÊÕÕßID£¬ ÏÂÃæµÄÊÇÌØÊâID 0 ·þÎñÆ÷ °üÌåÊý¾Ý³¤¶È m_MajorType 1 m_strServiceCode m_strOperationCode m_nReturnCode m_nUseless m_nSendID 1 1 1 4 4 m_nRecvID 4 m_nPacketLength ×ܳ¤ 4 20 ÿ¸öÖÕ¶ËÇëÇó°üÖУº
m_MajorType×Ö¶ÎÓÃÀ´Çø·Ö²»Í¬µÄ·þÎñÀàÐÍ£¬ÏÖ½×¶ÎֻʹÓÃ0x01×÷ΪIMµÄÀàÐÍ£¬½«À´¿ÉÄÜ»áÔö¼Ó0x02×÷Ϊ£ºPushMailµÄÀàÐÍ¡£
m_strServiceCodeÓÃÓÚÇø·Ö²»Í¬µÄ·þÎñ£¬ÈçÈÏÖ¤·þÎñ£¬ÃüÁî·þÎñµÈ¡£ m_strOperationCodeÓÃÓÚÇø·Öͬһ·þÎñÀàÐÍÖв»Í¬µÄ²Ù×÷£¬ÈçÈÏÖ¤·þÎñÖаüÀ¨µÇ½ÇëÇ󣬶ϿªÁ¬½ÓÁ½¸ö²Ù×÷¡£Éè¼Æ·þÎñºÍ²Ù×÷ÓÐÖúÓÚ½ñºóµÄÀ©Õ¹¡£
m_nReturnCodeÓÉÓ¦´ð°üʹÓã¬ÇëÇó°ü½«²»Ê¹Óá£
m_nPacketLength±íʾÊý¾Ý°üÌåµÄ³¤¶È£¬ÒÔ±ãÊÕÈ¡·½È±¶¨Õû¸ö°üµÄ³¤¶È¡£ ÿ¸ö·þÎñÆ÷Ó¦´ð°üÖУº
m_MajorType£¬m_nFunctionCode£¬m_nSourceCode£¬ÒÔ¼°m_strOperationCode
½«²»Ê¹Óã¬Ö»Êǽ«ÇëÇó°üµÄ¶ÔÓ¦Öµ¸´ÖƵ½Ó¦´ð°ü¡£
m_nReturnCode£¬¹©ÖÕ¶ËÅжÏÇëÇóÊÇ·ñÖ´Ðгɹ¦£¬¾ßÌ嶨Òå¼ûÏ£º #define RT000 0 #define RT001 1 #define RT002 2 #define RT003 3 #define RT004 4
//operate sucessful //deal moudle not found //invalid terminal type //invalid signal name //no data
#define RT099 99 // socket error #define RT100 100 // general error m_nPacketLengthͬÇëÇó°ü¡£
·þÎñÆ÷ÿ´ÎÊÕµ½¿Í»§ÇëÇóºó£¬½«¸üÐÂÓû§µ±Ç°×´Ì¬£¬±ãÓÚ·þÎñÆ÷ÅжÏÓû§ÔÚÏßÇé¿ö¡£
3.2.2 Êý¾Ý°ü°üÌ嶨Òå
°üÌåµÄ¶¨Òåʵ¼ÊÉÏÔòΪ¸÷ÀàͨÐŵÄͨÐÅÊý¾ÝµÄ¶¨Ò壬ÓÉÓÚͨÐÅÊý¾ÝÖÖÀà·±¶à£¬ÔÚ±¾ÂÛÎÄÎÞ·¨½«È«²¿¶¨Òåд³ö£¬ÕâÀï½öͨ¹ýµÇ½ÑéÖ¤ºÍÓû§ÐÅÏ¢»ñÈ¡Á½¸öÓÃÀýµÄÐÒéÊý¾Ý°ü¶¨ÒåÀ´²ûÊÍÊý¾Ý°ü¾ßÌåµÄ¶¨Ò巽ʽ£¬ÆäËû²Ù×÷Ïà¹ØµÄÊý¾Ý°ü°üÌ嶨ÒåÓëÖ®ÀàËÆ¡£
1£©Óû§µÇ½ÈÏÖ¤·þÎñ
SocketÔÚconnectºó£¬·¢ËÍÈÏÖ¤°ü£ºm_MajorTypeΪ0x01£¬m_strServiceCode Ϊ0x01£¬ °üÌåÖдæ·Å32×Ö½ÚµÄÈÏÖ¤Â룬ǰ20×Ö½ÚΪÓû§ID£¬ºó32×Ö½ÚΪMD5ºóµÄÃÜÂ룬Èç¹ûͨ¹ýУÑ飬ÔòÓû§¿ÉÒÔ¼ÌÐø½øÐнÓÏÂÀ´µÄ¹¤×÷£»·ñÔò£¬·þÎñÆ÷½«closeµôsocket¡£Èç¹ûÁ¬½ÓºóûÓз¢ËÍУÑé°ü£¬³¬Ê±Ò²½«¶ÏµôÁ¬½Ó¡£ÏÂÃæ½«·Ö±ð½éÉÜÔÚ´úÂëʵÏÖÖÐÈçºÎ¶¨ÒåÇëÇó°üºÍÓ¦´ð°ü£º
£¨1£©ÇëÇó°ü¶¨Òå Æä°üÍ·ÖеÄÊôÐÔÉèÖÃΪ£º
m_MajorType = 0x01; m_nServiceCode = 0x01; m_nOperationCode = 0x01; m_nPacketLength = 52; °üÌå½á¹¹µÄ¶¨ÒåÈçÏ£º typedef struct data_login {