¼´Ê±Í¨Ñ¶ÏµÍ³µÄÉè¼ÆÓëʵÏÖ±ÏÒµÉè¼ÆÂÛÎÄ ÏÂÔØ±¾ÎÄ

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 {