×öÆåÅÆÓÎÏ·Íâ¹Ò
¼ÇµÃ¸Õµ½´óѧʱ£¬µÚÒ»¼þºÍ´ó¼ÒÒ»ÆðÍæµÄ¾ÍÊÇ´òÅÆ£¬ÏàÐźܶàÈ˶¼»áÓÐÕâ¸ö¾Àú£»ÎÒÒ²ÊÇÔÚÄÇʱºòѧ»áÉý¼¶£¨ÍÏÀ»ú£©µÄ¡£
´ó¶þÊ±Ôø¾·è¿ñÍæ¹ý£¬ËùÒÔ¶ÔÉý¼¶Ò»Ö±¶¼ºÜÇéÓжÀÖÔ£»µ«¹¤×÷ºó£¬Ò»·½ÃæÕÒ²»µ½ÈË£¬ÁíÒ»·½Ãæ¾ÍËãÕÒµ½ÈËÁËÒ²²»ÄÜÏñÒÔǰһÑùͨ
ÏüµÄÈ¥Íæ¡£»¹ºÃ£¬Ò»´Î¿´µ½±ðÈËÔÚÍøÉÏÍæÁªÖÚµÄÉý¼¶£¬ºÇºÇ£¬´Ó´Ëºó²»ÅÂÕÒ²»µ½ÈËÁË£¬¹¤×÷Ö®Óà¿ÉÒÔËæÊ±ºÍ±ðÈËÍæÒ»Ï£¬¹ýÒ»°Ñ
Òþ£»ËµÁËÕâô¶à£¬»¹Ã»ÓÐתÈëÕýÌ⣬²»Òâ˼¡£
¶ÔÓÚ×öÍâ¹Ò£¬ÒÔǰûÓÐ×ö¹ý£¬ÒòΪûÓкܶàʱ¼ä£¬ËùÒÔҲûÓÐÔÚÍøÉÏÈ¥ÏêϸµÄÕÒÏà¹ØµÄÍøÕ¾£¬Èç¹ûÄÇһλÓкܶàÕâ·½ÃæµÄ×Ê
Áϵϰ£¬²»·ÀÌù³öÀ´Óë´ó¼Ò¹²Ïíһϡ£
Ò»¡¢¶ÔÓÚÍâ¹Ò£¬Ê×ÏÈÎÒÃÇ̸һÏÂÊý¾ÝµÄ»ñÈ¡£º
1 ¡¢¶ÔÓÚ¶¯×÷ÓÎÏ·Àࣺ¿ÉÒÔͨ¹ý API ·¢ÃüÁî¸ø´°¿Ú»ò API ¿ØÖÆÊó±ê¡¢¼üÅ̵ȣ¬Ê¹ÓÎÏ·ÀïµÄÈËÎï½øÐÐÁ÷¶¯»òÕß¹¥»÷£¬Õâ¸öÊÇ
¶ÔÓÚ±¾µØÓÎÏ·¶øÑԵģ¬ÍøÉÏÓкܶàÕâ·½ÃæµÄ½éÉÜ£¬ÔÚÕâÀï¾Í²»ÔÙдÁË¡£
2 ¡¢½Ø»ñÏûÏ¢£ºÍ¨¹ý hook ¼¼Êõ£¬»ñµ½ÓëÓÎÏ·Ïà¹ØµÄÊý¾Ý£¬Ö®ºó¾Í¿´Äã×Ô¼ºÔõô´¦ÀíÕâЩÊý¾ÝÁË :) ¡£
3 ¡¢À¹½Ø socket °ü£ºÒªÌæ»» winSock.dll »òÕß winsock32.dll, ÎÒÃÇдµÄÌæ»»º¯ÊýÒªºÍÔÀ´µÄº¯ÊýÒ»Ö²ÅÐÐ , ¾ÍÊÇ˵ËüµÄº¯ÊýÊä³ö
ʲôÑùµÄ , ÎÒÃÇÒ²ÒªÊä³öʲôÑù×ӵĺ¯Êý , ¶øÇÒ²ÎÊý , ²ÎÊý˳Ðò¶¼ÒªÒ»Ñù²ÅÐÐ , È»ºóÔÚÎÒÃǵĺ¯ÊýÀïÃæµ÷ÓÃÕæÕýµÄ winSock32.dll ÀïÃæ
µÄº¯Êý¾Í¿ÉÒÔÁË¡£µ±ÓÎÏ·½øÐеÄʱºòËü»áµ÷ÓÃÎÒÃǵĶ¯Ì¬¿â , È»ºó´ÓÎÒÃǵĶ¯Ì¬¿âÖд¦ÀíÍê±Ïºó²ÅÌø×ªµ½ÕæÕý¶¯Ì¬¿âµÄº¯ÊýµØÖ·£¬
ÕâÑùÎÒÃǾͿÉÒÔÔÚÀïÃæ´¦Àí×Ô¼ºµÄÊý¾ÝÁË£»²»¹ýÕâ³Ì·½·¨Òª×ÔÒÑÖØÐÂȥдÈçÏÂÃæµÄÒ»¸öÀý×Ó£º
void * pSocketFun = GetProcAddress( i, "WSAStartup" );
WSAStartup1 = (int(_stdcall *)( WORD, LPWSADATA ))pSocketFun;
winSock32.dll ÀïÓÐÓÐÕâô¶àµÄº¯Êý£¬Òª×Ô¼ºÒ»¸öÒ»¸öµÄÌæ»»£¬Óв»ÊǺÜÀÛ£¬Õâ¸ö¶¯Ì¬¿â»¹Êǹ«Óõģ¬ÍòÒ»ÄÇÒ»¸öµØ·½Ð´´íÁË£¬²»
ÊÇ»á³öºÜ´óÎÊÌ⣬ËùÒÔ»¹ÊǾõµÃÕâ¸ö·½·¨²»ÊǺܺá£
4 ¡¢Ö±½Ó¼àÌýÍøÂçÊý¾Ý°ü£ºÕâ¸ö·½·¨¾ÍºÍ sniffer ºÍ comview ËùÓõļ¼Êõ²î²»¶àÁË£¬²»¹ýÎÒÃDz¢²»ÒªÖ±½ÓÈ¥¼àÌýµ½ÍøÂç²ã»òÒÔÏÂ
µÄÊý¾Ý°ü£¬Ö»Òªµ½ IP ²ãµÄ¾Í¿ÉÒÔÁË£»
ÀûÓà Raw Socket: ÔʼÌ×½Ó×Ö
ËüÀ´·¢ËͺͽÓÊÕ IP ²ãÒÔÉϵÄÔʼÊý¾Ý°ü£¬Èç ICMP ¡¢ TCP ¡¢ UDP... µÈ£¬Ò»°ãµÄÓÎÏ·Êý¾ÝÁ¿²»´óµÄ»°¶à²ÉÓà TCP ÐÒé´«ÊäÊý¾Ý£¬
ÈçÁªÖÚÓÎÏ·µÄÉý¼¶¾ÍÊÇÕâÑù£¬µ«ÈçÅÝÅÝÌòÉÓõľÍÊÇ UDP ·¢ËÍÁË£¬Êý¾ÝÁ¿ºÜ´ó¡£¹ØÓÚÕâÖÖ·½·¨½éÉÜ´ó¼Ò¿´Ò»ÆªÎÄÕ£¬»áÓкܴóµÄ°ï
Öú£¬Í¬Ê±Òª¸Ðл×÷Õß (shadowstar) ÌṩÁËÕâôºÃµÄÎÄÕ£¬ÎÒÒ²´ÓÖеò»ÉÙ°ïÖú (~_~) ¡£
[url]http://web.nyist.net/~shadowstar/essay/security/sniffer1.html[/url]
ÏÂÃæÊÇÎÒ×öµÄÒ»¶ÎÊý¾Ý½ÓÊպͷÖÀë³öÀ´µÄ IP °üµÄ³ÌÐò£º
...........
try
{
nIpRevLen = recv( pCtlSocket->m_socket, cIpRevBuff, MAX_COMMAND_SIZE - 24, 0 ) ;
}
catch( ... )
{
}
if( nIpRevLen == SOCKET_ERROR ) continue ;
IP * p_ip = ( IP * )cIpRevBuff ;
TCP * p_tcp = ( TCP * )( cIpRevBuff + IP_HdrLen( p_ip )) ;
if( p_ip->DstAddr != pCtlSocket->addr_in.sin_addr.S_un.S_addr ) continue ; // Õâ¾äºÍÏÂÒ»¾ä¹ýÂËÆäËü²»ÒªµÄ°ü
if( p_ip->Protocol != IPPROTO_TCP ) continue ;
int nSrcPort = ntohs( p_tcp->SrcPort ) ;
if( nSrcPort != PORT_DODZ ) continue ;
char * pPackConten = ( char * )p_tcp + TCP_HdrLen( p_tcp ) ; // ÕâÀï¾ÍÊǵõ½Á˰üµÄÄÚÈÝÁË
nPackLen = ntohs( p_ip->TotalLen ) - IP_HdrLen( p_ip ) - TCP_HdrLen( p_tcp ) ; // Õâ¸öÊǰüµÄ³¤¶È
...........
¶þ¡¢Êý¾ÝµÄÐÒé·ÖÎö
ÏÂÃæÀ´·ÖÎöÒ»ÏÂÁªÖÚÉý¼¶µÄÐÒ飬±¾À´×Ô¼º½ÓÊÕµ½Êý¾ÝÁË£¬¾Í¿ÉÒÔ°ÑÊý¾ÝдÏÂÀ´£¬²»¹ý»¹ÊÇÓñðÈ˵ÄÏֳɹ¤¾ß»á¸üºÃÒ»µã£¬
ÔÚÕâÀïÎÒÓõÄÊÇ comview3.3 À´½ÓÊÕÊý¾ÝµÄ£¬Õâ¸ö¹¤¾ß»¹ÊǺܺÃÓõ쬽¨Òé´ó¼Ò¿ÉÒÔÏÂÔØÒ»¸öÈ¥ÓÃÒ»ÏÂÊÔÒ»ÊÔ£»ÏÂÃæÊÇһЩ½ÓÊÕµ½µÄÊý¾Ý£º
0x0000 05 02 00 00 22 00 00 00-00 20 00 00 C 1 00 00 00 ....".... ..?..
0x0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0x0020 06 00 00 00 67 67 2E 68-74 6D 05 02 00 00 23 00 ....gg.htm....#.
0x0030 00 00 01 20 00 00 46 00-00 00 00 00 00 00 00 00 ... ..F.........
0x0040 00 00 00 00 00 00 00 00-00 00 07 00 00 00 67 67 ..............gg
0x0050 2E 68 74 6D 6C .html
ÏñÕâÑùµÄÊý¾Ý£¬ÏàÐÅÈÃ˶¼»á¸ã²»Çå³þÊÇʲô¶«Î÷£¬²»¹ý²»»³ÒÉÓÐһЩÌì²Å¿ÉÒÔÒìÏëÌ쿪£¬²»¹ýÈ¥´ÓÔʼÊý¾ÝÀ´·ÖÎö±ðÈ˵ÄÐ
ÒéȷʵҪһЩÁé¸ÐµÄ£¬ :) ¡£ºÃÏñÊÇÔÚΪ×Ô¼º´µÐ꣬²»ºÃÒâ˼ÁË ..... ²»¹ýÄØ£¬ÐÒéµÄ·ÖÎöÒªÓëʵ¼ÊµÄ²Ù×÷½áºÏÆðÀ´£¬Èç¹ûÄã²»»áÍæ
Éý¼¶£¬ºÜÄÑÏëÏñÄã»áºÜÈÝÒ×·ÖÎö³öÀ´±ðÈ˵ÄÐÒéÀ´¡£»¹ºÃÎÒ×Ô¼ºÔÚÕâ·½Ãæ»¹²»Ë㣬»¹ÊÇÉý¼¶ÖÐÊÇÒ»¸öС¹ÙÔ±ÀàµÄ·ÖÊý¾ÝÁË£¬ºÇºÇ¡£
ÎÒÃÇ¿ÉÒÔÏëÒ»ÏÂÓÎÏ·Ò»Õû¸öÁ÷³Ì£¬µÇ¼¡¢½øÈëÓÎÏ·ÊÒ¡¢ÕÒµ½Íæ¼Ò¡¢·¢ÅÆ£¬¿Ûµ×¡¢³öÅÆºÍ½áÊø¡£ÓÐÁËÕâÑùÒ»¸öÁ÷³ÌÔÚÄÔ×ÓÖпÉÒÔ°ï
ÖúÏëÏñÿһ¸öÊý¾ÝµÄÐÅÏ¢¡£
ÎÒÓõÄÊǺܲîµÄ·½·¨È¥ÈÃÕâ¸ö¹ý³ÌºÍ½ÓÊÕµ½µÄÊý¾ÝºÏÔÚÒ»Æð·ÖÎöµÄ£º
1 ¡¢Æô¶¯ comview »òÆäËüµÄ½ÓÊÕÊý¾Ý°üµÄ¹¤¾ß£¬ÉèÖúùýÂËÌõ¼þ£¬Ö»½ÓÊÕ IP/TCP °ü£¬Ä¿±êµÄ IP ÊÇ×Ô¼ºµÄ»úÆ÷£¬Èç¹û²»ÉèÖÃÕâЩÌõ¼þ
ºÇºÇ£¬ÄÇÍøÂçÊǵĴóÁ¿Êý¾Ý°ü¾ÍÈ«±»Äã³ÔÏÂÀ´ÁË£¬µ½Ê±Òª´Ó¼¸Íò¸ö°üÖÐÕÒ³öÄãËùÒªµÄÊý¾Ý£¬Ì«ÄÑÁ衃 ...
2 ¡¢½Ó×Å¾ÍÆô¶¯ÁªÖÚµÄÓÎÏ·£¬½øÈëÉý¼¶£¨ÎªÁË·ÖÎöÕâЩÐÒ飬ÎÒ×ܱ»È˼Ò˵ÂýµÃÏñÎڹ꣬»¹Ê§È¥Á˺ܶà·Ö :( £©£¬ÕâʱÄã¾Í¿ÉҪע
ÒâÁËÊÕ¼¯Êý¾ÝÁË£¬¼Çϵ±Ç°´ò»á£¬Ê²Ã´Ê±ºò½ÐÅÆ£¬·´ÅÆ£¬µÃ·Ö£¬³öµÄÅÆ£¬ºÜ´ÓÊý¾Ý¶¼Òª¼Ç¼ÏÂÀ´£¬Í¬Ê±»¹ÒªÏë×ÅÈçºÎ³öÅÆ²ÅÄÜÓ®£¬Òª
²»ÕæÓÐЩ¶Ô²»ÆðºÍÄãÒ»ÆðÍæµÄ¶Ô¼ÒÁË¡£
3 ¡¢ÓÐÁËÊý¾Ýһʵ¼ÊÉϹý³ÌµÄ¼Ç¼£¬·ÖÎöÐÒé¾ÍÓÐÁË×ÅÊֵĵط½ÁË£¬ÎÒÃÇÏÈ¿´ÏÂÃæµÄÒ»¶ÎÊý¾Ý£º
0x0000 00 02 00 80 F 0 00 00 00-01 00 00 00 04 00 02 00 ...€..........
0x0010 00 00 00 00 63 61 6F 77-65 69 5F 30 30 31 30 00 ....ddddd_0010.
0x0020 11 20 00 00 18 00 00 00-67 79 75 67 68 00 00 00 . ......dddd...
´ÓÕâÀï¿ÉÒÔ¿´µ½£¬ ddddd_0010( ÔʼÊý¾Ý²»ÊÇÕâ¸ö£¬ÎÒÐÞ¸ÄÁË£©ÓëÒ»ÆðµÄÍæµÄµÄÃû³ÆÊDz»ÊÇÒ»ÑùÄØ£¬Èç¹ûÊÇÒ»ÑùµÄ¾ÍºÃÁË£¬Õâ¸ö¿É
ÊÇ·þÎñÆ÷·µ»ØÀ´µÄÓëÄãÒ»ÆðÍæµÄÍæ¼ÒÐÅÏ¢£»
Èç¹ûÄã×ö¹ý SCOKET ·½ÃæµÄ±à³Ì£¬ÄãÓ¦¸Ã¿ÉÒÔÖªµÀÒ»¸ö°üµÄ´óÌå½á¹¹£¬ÏÂÃæÎÒÀ´ËµÒ»Ï£º
Ó¦ÓðüÍ·±êÖ¾
°üÐòÁкÅ
Õû¸ö°üµÄ³¤¶È
CRC УÑ飨»òÀÛ¼ÓºÍУÑ飩
ÃüÁî×Ö
Êý¾ÝÌ峤¶È
Êý¾ÝÌå
ÍøÂçÉϵÄÊý¾Ý²¢²»ÊÇÕûÏñÎÒÃÇÏëÏñµÄÄÇÑù£¬·¢Ò»¸ö°ü³öÈ¥£¬¾Í»áÔÚ¶Ô·½½ÓÏÂÕû¸ö°ü£¬ºÜ¶àʱºò»á·Ö¼¸´Î²ÅÄܽÓÊÕÏÂÀ´Õû¸öÍêÕûµÄ°ü
¡£ÎÒÃÇÔÙ¿´Ò»¸ö°ü£º
0x0000 10 20 00 80 24 00 00 00-D9 54 DF 77 01 00 00 00 . . €$... ÙTßw ....
0x0010 01 00 00 00 00 00 00 00-03 00 00 00 00 00 00 00 ................
0x0020 03 00 00 00 01 00 00 00-01 00 00 00 17 71 40 00 .............q@.
ÕâÁ½¸ö°üÓÐʲôÏà֮ͬ´¦£¬¾ÍÊǰüÍ·¿ªÊ¼µÄ 8 ¸ö×Ö½Ú£¬ÊDz»ÊÇ¿ÉÒÔ¿´³öÀ´Ò»¸ö°üµÄÕûÌå½á¹¹ÁË£¬×¢ÒâÍøÂçÊý¾Ý¸ñʽת»»Îª»úÆ÷Êý¾Ý¸ñ
ʽµÄ»°Òª·´×ªÒ»ÏÂÊý¾Ý MSDN ÉÏ¿ÉÒÔÕÒµ½ÀàËÆÕâÑùµÄº¯Êý ntohl ¡¢ ntohs ¡¢ htonl ºÍ htons £¬ËùÒÔÎÒÃÇÔÚ¿´Êý¾ÝʱҲҪ°Ñ×Öµ¹×ªÒ»Ï ...
Èç¹ûÄãÁ˽âµÄ»°£¬ºÍ°ãµÄ 80 ÊÇ×÷Ϊһ¸ö»ØÓ¦°üµÄ±êʶ£¬ÕâÑùÎÒÃǾͿÉÒÔ¿´µ½ÁËÁ½¸öÃüÁî×ÖÁË :
80 00 00 02 Ê®Áù½øÖƱíʾ£º 0x80000002
80 00 20 10 0x80002010
ÕâÁ½¸öÃüÁî¶¼²»Í¬£¬¿ÉÒÔ¿´µ½£¬ÐÒéÉϲ¢Ã»ÓÐͳ¼ÆµÄÓ¦ÓðüÍ·±êÖ¾£¬Ö±½Ó´ÓÃüÁî×Ö¿ªÊ¼ÁË¡£ÓÐÁËÉÏÃæµÄ¸ÅÄ½ÓÏÂÀ´µÄ×ÔÈ»¾ÍÊÇ
³¤¶È¹ý£¬ÒòΪµÚÒ»¸ö°üûÓÐÍêÕû£¬ÎÒÃÇ¿´µÚ¶þ¸ö°ü£¬Ò»°ã³¤¶ÈÓÃÁ½¸ö×ֽھͿÉÒÔÁË£¬µ«»áÓÐÓÃËĸö×ֽڵģ¬Ò²¾ÍÊÇÒ»¸ö int ÀàÐ͵ÄÖµ£¬µÚ¶þ
¸ö°üµÄ³¤¶È²»ÄÑ¿´µ½¾ÍÊÇ 0x24 £¬¼ÙÉ賤¶ÈʹÓÃËĸö×Ö½Ú£¬ÄÇôÄÚÈݾÍÓ¦¸ÃÊÇ D9 54 .... 71 40 00 £¬ 0x24 = 36 £¬ÎÒÃÇÊý¾Ýһϣ¬¸ÕºÃ¾ÍÊÇ
Õâ¸ö³¤¶È£¬ºÇºÇ£¬µ½ÏÖÔÚÄãºÍÎÒÒ»Ñù£¬Á˽âÒ»°üµÄ½á¹¹ÐÎʽÁË£¬ÎÒÃÇÕýÔÚÒ»²½Íù³É¹¦µÄ·½ÏòÈ¥ÁË ...
µ½ÁËÕâÒ»²½£¬´ó¼ÒÒ²²î²»¶à¿ÉÒÔ¶¯ÊÖ×Ô¼ºÈ¥·ÖÎöÒ»ÏÂÐÒéÁË£¬ÒòΪһЩÆäËüµÄÒòΪ£¬ÎÒÔÚÕâÀï¾Í²»ÔÙÍùÏ·ÖÎö¸÷¸öÃüÁî×ֵľßÌå×÷ÓÃ
ÁË£¬²»¹ý¿ÉÒÔ¸æËß´ó¼Ò 0x80000002 ÊÇÓû§µÇ¼ºó·þÎñÆ÷·µ»ØÀ´µÄËùÓÐÍæ¼ÒÐÅÏ¢£¬×¢Òâһϣ¬ÎÒÃÇÔÚ×¢²áÁªÖÚÓû§Ê±£¬×µÄµÇ¼Ãû³Æ²»ÄÜ
³¬¹ý 19 ¸ö×Ö½Ú£¬ËùÒÔÔÚ°ü¾ÍÓ¦¼ÓÉÏÒ»¸ö½áÊø·û£¬¾ÍÊÇ 20 ¸ö×Ö½ÚÁË¡£
ÉÏÃæµÄ·ÖÎöÖ»ÊÇÒ»¸öÒý×Ó£¬Óɱ¾ÈËˮƽÓÐÏÞ£¬ÓÐʲô´íÎóµÄµØ·½Çë´ó¼ÒÖ¸³ö£¬¹²Í¬Ñ§Ï°¡£
ÁíÍâÎÒ×öµÄÒ»¸öÁªÖÚÉý¼¶ÖúÀí V1.0 ÔÚ [url]www.csdn.net[/url] ÖÐÈí¼þ£¨ÓÎÏ·À࣬ÆäËüÀàÐÍ ) ÉÏ·¢²¼ÁË£¬´ó¼Ò¿ÉÒÔÏÂÔØÊ¹Óã¬ÊÇÍêÈ«Ãâ·ÑµÄ¡£ÒòΪʱ¼äÓÐÏÞ£¬Ã»ÓÐ×öÍêÕû
µÄ²âÊÔ£¬Èç¹û·¢ÏÖÔÚʲô bug £¬¿ÉÒÔÓÃÓʼþ·½Ê½Í¨ÖªÎÒ£¬Ð»Ð»£¡
ÒòΪÉÏÒ»´ÎÕýÔÚ×öÒ»¸öÏîÄ¿£¬ËùÒÔʱ¼ä²»¶à£¬²¢Ã»ÓкܶàµÄʱ¼äȥдÍê¹ØÓÚÁªÖÚÉý¼¶ÐÒé·ÖÎöµÄÈ«¹ý³Ì»¹ÓÐËùÓÐÐÒéµÄÈ«²¿ÄÚÈݾʹҴÒÔÚ CSDN ÉÏ·¢±íÁË¡¶Íâ¹ÒÖÆÓà ÁªÖÚÉý¼¶ÐÒé·ÖÎö¡·£¨Ò²¿ÉÒÔÔÚ CSDN ¿ª·¢¸ßÊÖ 9 Ô·ÝÖеġ¶ÍøÂçÓÎÏ·µÄÐÒé ·ÖÎö¡·ÕÒµ½Ïà¹ØÄÚÈÝ£©£¬ÔÚÍøÉÏ·¢±íºó£¬ÊÕµ½ºÜ¶à¶ÁÕßµÄÀ´ÐÅ£¬Ï£ÍûÎÒ°ÑÁªÖÚÐÒé·ÖÎöµÄÕû¸ö¹ý³ÌÏêϸÍê³É£¬²¢°Ñ¹Ø¼üµÄÐÒé·ÖÎöµÄ˵Ã÷һϣ»ÕýºÃÏÖÔÚÊÖÍ·µÄ¹¤×÷²»¶à£¨²»Òª¸æËßÎÒµÄÀϰåºÇ£¬Òª²»ËûºÝ²»µÃÓÖ°ÑËùÓÐÈÎÎñ¶¼·Åµ½ÎÒÕâÁË L £©¿ÉÒÔÈ¥Íê³ÉÕâÐÒéµÄ·ÖÎö˵Ã÷¡£
ÉÏһƪÎÄÕÂÒÑ˵Ã÷ÁËÊý¾ÝÊÇÈçºÎ½ÓÊյģ¬ÔÚÕâÀï¾Í²»ÔÙ׸Êö£¬Èç¹û²»Á˽âµÄÅóÓÑ¿ÉÒÔÔÙÕÒÒ»ÏÂÕâÆªÎÄÕÂÀ´¶Áһϡ£ÏÖÔÚÎҾʹÓÐÒé·ÖÎöµÄÄÚÈÝ£¬»¹ÓÐÈçºÎ´Ó³ÌÐòÖеõ½Êý¾Ý˵Ã÷ÿһ¸öÃüÁîµÄÒâ˼£¬Ï£Íû´ó¼ÒÔÚ¶ÁÕâ¸öÎÄÕºó£¬Ò²¿ÉÒÔ×Ô¼ºÈ¥×öÒ»¸öÍâ¹ÒÁË¡£
ÔÚ·ÖÎöÃüÁî֮ǰ£¬»¹ÊÇÓбØÒªËµÃ÷Ò»ÏÂÈçºÎ´Ó½ÓÊÕµ½µÄÍøÂçÊý¾ÝÖÐÌáȡһ¸öÎÒÃÇÒªµÄ°üµÄ˵Ã÷£¨ÏÂÃæÄÚÈݾÍÊÇ´ÓÍøÂçÊý¾ÝÖÐÕÒµ½Ò»¸öÍêÕûµÄÐÒé°ü£©
int __fastcall TCltSocket::AnalyLinkRecvPack(int nLen, PCHAR pDataBuff, int & nLastLen, int nSrcPort)
{
int nCPosition = -1 ; // °üÍ·µÄ¿ªÊ¼Î»ÖÃ
int nCmdFlag = -1 ; // ÃüÁî×Ö±êÖ¾
lpPackHead pPackHead ; // °üÍ·½á¹¹
int nAppPackHeadSize = sizeof( PackHead ) ; // °üÍ·³¤¶È
if( nLastLen nDataLen > ( nLastLen - nAppPackHeadSize )) // ·ÖÎöÊÇÍê³É°ü
{
memcpy( pDataBuff, ( pDataBuff + nCPosition ), nLastLen ) ;
return 1 ;
}
else // ÕâÀïµÄ pPackHead->nDataLen ¾ÍÊÇÉÏ´ÎÎÒ˵µÄ°ü³¤¶ÈÁË
{
if ( nLastLen nDataLen - nAppPackHeadSize ))
{
nLastLen = 0 ;
}
else
{
nLastLen = nLastLen - pPackHead->nDataLen - nAppPackHeadSize ;
}
try
{
DispatchPackets( (PCHAR)pPackHead, nSrcPort ); // ÔÚÕâÀï¾ÍµÃµ½ÁËÒ»¸öÍêÕûµÄÐÒé°üÁË
}
catch(Exception &e)
{
}
memcpy( pDataBuff, pDataBuff + nCPosition + pPackHead->nDataLen + nAppPackHeadSize , nLastLen ) ; // µ±Ç°Ê£ÏµÄÍøÂçÊý¾Ý£¬ÏÂÒ»´Î½ÓÊÕµ½ÆäËüÊý¾ÝºóÒ»Æð·ÖÎö
return 0 ;
}
}
½ÓÊÕµ½Ò»¸öÍê³ÉµÄ°üºó£¬¾Í¿ÉÒÔÈ¥·ÖÎöÐÒéµÄ±¾ÖÊÄÚÈÝÁË£¨ÒòΪÁªÖÚµÄÐÒéûÓмÓÃÜ£¬ËùÒÔÔÚÕâÀï²»±ØÒªÔÙÈ¥×ö½âÃÜÕâÒ»²½¹¤×÷ÁË£¬ºÇºÇ J Ò²ÕýºÃ¿ÉÒÔ·ÅËÉÒ»ÏÂ×Ô¼ºµÄÍ·ÄÔ£©¡£´ó¼ÒÈç¹ûÓà Commview »òÆäËüµÄ¹¤¾ß½ÓÊÕÒ»¸öÍê³ÉµÄÓÎÏ·Êý¾Ýʱ¶¼»á·¢ÏÖÕâÑùÒ»¸öÊý¾Ý¹ý³Ì£º
1 ¡¢ 0x0000 00 02 00 80 C 8 00 00 00-01 00 00 00 04 00 02 00 ... €?..........
2 ¡¢ 0x0050 17 20 00 00 04 00 00 00-01 00 00 00 16 20 00 00 . ........... ..
3 ¡¢ 0x0000 11 20 00 00 18 00 00 00-01 00 E0 00 01 00 00 00 . ........?....
4 ¡¢ 0x0000 03 20 00 00 04 00 00 00-01 00 00 00 . ..........
½ÓÏÂÀ´¾ÍÊÇÒ»¶ÑÈçÏÂÃæµÄÊý¾Ý
5 ¡¢ 0x0000 0D 20 00 00 38 00 00 00-01 00 00 00 01 00 00 00 . ..8...........
×îºó»¹ÓÐÒ»¸öÕâÑùµÄÃüÁî
6 ¡¢ 0x0100 15 20 00 00 08 01 00 00-08 00 00 00 02 65 67 65 . ...........ege
Èç¹ûÎÒÃÇ»¹¼ÇµÃÍæÉý¼¶Ê±µÄ´òÅÆË³Ðò£ºµÇ¼¡¢·¢ÅÆ¡¢½ÐÅÆ£¬¿ªÊ¼¡¢³öÅÆ£¬½áÊø£¬ÔÙÓëÉÏÃæµÄÖ¸Áî¶ÔÕÕһϣ¬ºÇºÇ£¬ÏÖÔÚÄã»áÃ÷°×ÕâЩָÁîµÄ×÷ÓÃÁ˰ɣ¬ÒòΪÕâЩÃüÁîÊÇÿһ´Î¶¼»á³öÏֵģ¬ËùÒÔÖ»ÒªµÄ½ÓÊÕ¼¸´Î´òÅÆµÄÈ«¹ý³ÌµÄÊý¾Ý¾Í¿ÉÒÔ·ÖÎö³öÀ´ÁË¡££¨ÉÏÃæ±êʶ³öÀ´µÄ²»Í¬ÑÕÉ«£¬Ç°Ò»²¿·ÖÊÇÃüÁî×Ö£¬ºóÒ»²¿·ÖÊǰüµÄ³¤¶È£¬Õâ¸ö·Ö·¨ÔÚÉÏһƪÎÄÕÂÖÐÒÑ×÷˵Ã÷£©
ÏÂÃæ¾ÍÈ¥ÈçºÎÈ¥·ÖÎöÿ¸öÃüÁî×Ö×÷˵Ã÷£º
ÔÚÕâ֮ǰ£¬ÎÒÃÇÏȶ¨Òåÿһ¸ö°üµÄ°üÍ·½á¹¹£º
typedef struct _tagPackHead
{
int nCommand ; // ÃüÁî×Ö
int nDataLen ; // °ü³¤¶È
}PackHead, *lpPackHead ;
ÉÏÃæµÄµÃµ½Ò»¸öÍêÕûµÄÐÒé°üʱÒÑÓõ½Õâ¸ö½á¹¹ÁË¡£
Ò»¡¢µÇ¼Óû§ÃüÁî
0x0000 00 02 00 80 C 8 00 00 00-01 00 00 00 04 00 02 00 ...€..........
0x0010 00 00 00 00 79 6F 75 73-68 69 5F 31 39 38 31 00 ....dddddd_1981.
0x0020 00 B3 03 00 00 00 00 00-C5 DC C5 DC C5 DC CC F8 .?..... ÊÇÊÇÊÇÊÇ
0x0030 00 C 5 00 00 00 00 00 00-C7 00 FF 00 00 00 00 00 .?.....?ÿ....
0x0040 01 00 00 00 68 6F 6E 64-61 30 34 31 32 00 00 00 ....ffffff0412...
¡¡¡¡¡¡ ..
´ÓÊý¾ÝÉÏ¿´£¬ÃüÁî×ÖÊÇ 0x80000200 ÎÒÃDz»±ØÒªÃ¿Ò»¸öÊý¾Ý¶¼ÒªÖªµÀËüÊÇʲôÒâ˼£¬Ö»ÒªÕÒµ½ÎÒÃǵÄÒ»Êý¾Ý¾ÍÐÐÁË¡£´ÓÉÏÃæËù±êÖ¾µÄÑÕÉ«À´¿´£¬Ç°ÃæµÄÊÇÃüÁî×Ö£¬ºìÉ«µÄÊÇÊ²Ã´ÄØ£¿´ó¼ÒÏëһϣ¬´òÉý¼¶Ò»¹²ÊÇËĸöÈË£¬ºÇºÇ£¬Äã´ó¸Å»áÃ÷°×ÁË£¬Õâ¸öÊÇ·þÎñÆ÷·ÖÅä¸øÃ¿¸öÓû§µÄ±àºÅ£¬Õâ¸öºÜÖØÒª£¬ÒòΪÆäËüÖ¸ÁîÖв»»áÔÙ³öÏÖÓû§Ãû³ÆÁË£¬Ö»»áÓÐÒ»¸öÓû§±àºÅ¡£¾¹ý¶à´Î·ÖÎö£¬Óû§µÄ±àºÅÊǹ̶¨µÄ£¬ÎÒÃǰ´×ùÎ»×øÏÂÀ´Ê±·Ö£¬ÈçÏÂÃæËùʾ£º£¨ÊÇÔÚ´óÌüÖÐ×øÏµÈÈËʱ£¬²»ÊdzöÅÆÊ±£©
1
0 ------|------ 2
3
°üµÄÇ°ÃæÒ»²¿·ÖÊÇÓû§¸öÊý¾Ý£¬ºóÃæµÄ¾ÍÊÇÿһ¸öÓû§µÄÐÅÏ¢£¬ËùÒÔÎÒÃǶ¨ÒåµÄ°ü½á¹¹ÈçÏ£º
typedef struct _tagRespSHJIUserRegister
{
int nFlag0 ;
char cUCount ; // Óû§Êý
char cFlag1 ;
char cDaPai ;
char cFlag4 ;
}RespSHJIUserRegister, *lpRespSHJIUserRegister;
typedef struct _tagGameUserInfo
{
char cUserNum ; // Óû§±àºÅ
char cFlag1 ;
char cFlag2 ;
char cFlag3 ;
char cUser[ 20 ] ; // Óû§µÇ¼Ãû³Æ
char cAlia[ 20 ] ; // Óû§ÖÐÎÄÃû³Æ
int nFlag4 ;
}GameUserInfo, *lpGameUserInfo;
Óû§µÄÃû³ÆÊÇ 20 ¸ö×Ö½Ú£¬ÉÏһƪÎÄÕÂÒÑ˵Ã÷£»
ÉÏÃæËµÃ÷ AnalyLinkRecvPack º¯ÊýÖÐÓõ½µÄ DispatchPackets ÈçÏÂËùʾ£º£¨Õâ¸ö¾ÍÊÇ·Ö½âÿһ¸ö°üÁË£©
void __fastcall TFrmMain::DispatchPackets( const char * pPack )
{
PackHead * pPackHead = ( PackHead * )pPack ; // °üÍ·
if( pPackHead->nDataLen > MAX_COMMAND_SIZE - sizeof( PackHead )) return ;
switch( pPackHead->nCommand )
{
case RESP_SHJI_USER_REGISTER :
if( pPackHead->nDataLen >= sizeof( RespSHJIUserRegister ) + sizeof( GameUserInfo )) // ¹ýÂË´íÎóµÄ°ü
{
RevGameUserInfo(( char * )( pPackHead + 1 )) ; // °üÄÚÈÝ
}
break ;
¡¡¡¡¡¡¡¡¡¡ ..
}
º¯Êý RevGameUserInfo ¾ÍÊÇ·Ö½âÓû§ÐÅÏ¢µÄ£¬ÉÏÃæÎÒÃÇÒѶ¨ÒåÁ˰üµÄ½á¹¹£¬ËùÒÔÈ¡µÃÓû§µÄÐÅÏ¢¾ÍºÜÈÝÒ×ÁË£º
void __fastcall TFrmMain::RevGameUserInfo( char * pPackContent )
{
RespSHJIUserRegister * pInfo = ( RespSHJIUserRegister * )pPackContent ;
int nUserCount = pInfo->cUCount ;
for( int i = 0 ; i cUserNum )
{
case POS_LEFT : // ±àºÅΪ 0 µÄÓû§
PanelLeft->Caption = ( String )pUser->cAlia ;
break ;
case POS_TOP : // ±àºÅΪ 1 µÄÓû§
PanelTop->Caption = ( String )pUser->cAlia ;
break ;
case POS_RIGHT: // ±àºÅΪ 2 µÄÓû§
PanelRig->Caption = ( String )pUser->cAlia ;
break ;
case POS_BOT : // ±àºÅΪ 3 µÄÓû§
PanelBot->Caption = ( String )pUser->cAlia ;
break ;
}
}
}
¶þ¡¢·¢ÅÆÃüÁî
ÔÀ´ÎÒ·ÖÎöÅÆÊ±£¬ÒòΪÊÇÏÈ´Ó³öÅÆÈëÊֵģ¬ËùÒԵõ½µÄÅÆµÄ´úºÅÖ»ÓÐ 13 ¸ö£¬»¹ÓÐÅÆµÄÑÕÉ«£¬ËùÒÔÔÚ·ÖÎöÕâ¸öÃüÁîʱһ¶ÈÏÝÈë²»Äܵõ½½á¹ûµÄµØ²½£¬²»¹ý¾¹ýÒ»ÌìµÄ¿àÏ룬ÖÕÓÚÃ÷°×¹ýÀ´ÁË£¬ºÇºÇ£¬ÔÚÕâÀïÏÈΪ×Ô¼ºÄÜÏëµ½Õâ¸ö¸É±Ò»Ï¡£ J
0x0050 17 20 00 00 04 00 00 00-01 00 00 00 16 20 00 00 . ........... ..
0x0060 29 00 00 00 19 00 00 00-FF FF FF FF F4 01 00 00 ).......ÿÿ?..
0x0070 00 00 00 00 38 4A 27 29-13 17 3B 5D 44 32 0F 12 ....8J')..;]D2..
0x0080 5A 58 6A 2E 45 0B 64 24-56 16 3A 3E 05 ZXj.E.d$V.:>.
´ÓÉÏÃæµÄÊý¾Ý¿´ÃüÁî×ÖÊÇ 0x00002016 £¬ÔÙÉÏÃæÒ»¸öÃüÁî×Ö 0x00002017 ÊÇ¿ªÊ¼Ò»¾ÖÓÎÏ·±êÖ¾£¬Õâ¸öÓÃÀ´±ê־һЩ״̬Óõģ»ÔÙ¿´Ò»Ï 0x19 £¨Ò²¾ÍÊÇÊ®½øÖÆµÄ 25 £©ºÇºÇ£¬ÏëÒ»ÏÂÎÒÃÇËĸöÈË´òÁ½¸¶ÅÆÊ± 8 ¸öµ×ÅÆ£¬×ܹ²ÊÇ£¨ 54*2 ¨C 8 £© / 4 = 25 ¸ÕºÃ£¬Õâ¸öλÖþÍÊÇ·¢¸øÎÒÃǵÄÅÆÊý£¨ÒòΪ»¹ÓÐÒ»¸¶ÅÆ£¬Èý¸¶ÅÆ£©ÎÒÃÇÔÙ¿´Ò»ÏÂÊý¾Ý´Ó 38 4A 27 29-13 17 3B 5D 44 32 0F 12 5A 58 6A 2E 45 0B 64 24-56 16 3A 3E 05 ÊDz»ÊǸպÃÒ²¾Í 25 ¸ö£¬Õâ¸ö¾ÍÊÇ·þÎñÆ÷·¢¸øÃ¿Ò»¸öÍæ¼ÒµÄÅÆÁË£¬ÔÚÍæÕâ¸öÓÎϷʱ£¬ÎÒÃÇÔÚ¿Í»§¶Ë¿´µ½µÄÊÇÒ»¸öÒ»¸öÅÆµÃµ½µÄ£¬µ«Êµ¼ÊÉÏ£¬Ò»¿ªÊ¼ÎÒÃǾÍÈ«²¿µÃµ½ÁË£¬Èç¹ûÄã½â¿ªÁËÕâ¸öÐÒ飬һ¿ªÊ¼ÎÒÃǾÍÖªµÀÁËËùÓÐ×Ô¼ºµÄÅÆ£¬²»¾Í¿ÉÒÔÖªµÀÁËÄܽÐʲôÑÕÉ«£¬ÊÇ·ñÄÜ·´±ðÈ˵ÄÅÆ£¬»¹ÓÐÿһÖÖ»¨É«µÄÅÆµÄ¶àÉÙ£¬Æñ²»ÊǺܺá¡
ÎÒÃǶ¨ÒåµÄÊý¾Ý½á¹¹ÈçÏ£º
typedef struct _tagSHJIFaDePaiInfo
{
int nCount ; // ÅÆÊý
char cUser ;
char cFlag1 ;
char cFlag2 ;
char cFlag3 ;
int nFlag1 ;
int nFlag2 ;
}SHJIFaDePaiInfo, *lpSHJIFaDePaiInfo ;
½á¹¹Öв»°üÅÆµÄÐÅÏ¢£¬ÒòÎªÒÆ¶¯Ö¸Õëºó£¬¾Í¿ÉÒÔ¶Áµ½ÅƵÄÐÅÏ¢ÁË£¨Ã¿Ò»¸öλ Byte ±íʾһ¸öÅÆ£©£¬ÈçÏÂËùʾ£º
void __fastcall TFrmMain::RevFaDePaiInfo( char * pPackContent )
{
SHJIFaDePaiInfo * pInfo = ( SHJIFaDePaiInfo * )pPackContent ;
for( int i = 0 ; i nCount ; i ++ )
{
byte btCard = * ((byte *)(( byte * )( pInfo + 1 ) + i * sizeof( byte ))) ;
¡¡¡¡¡¡
}
}
Èý¡¢½ÐÅÆÃüÁî
ÿһÂÖ³öÅÆÇ°×Ü»áÓÐÒ»¸öÈËÏȽÐÅÆµÄÐÅÏ¢£¬ËùÒÔÔÚÕâÀïÕâ¸öÃüÁî»áÔÚ³öÅÆÇ°£¬¿ÉÄÜÓжà¸öÕâÑùµÄÃüÁµ«×îºóÒ»¸öÃüÁî¾ÍÊÇÓû§×îÖÕ½ÐÖ÷ÁË¡£
0x0000 11 20 00 00 18 00 00 00-01 00 E0 00 01 00 00 00 . ........?....
0x0010 01 00 00 00 01 00 00 00-DE 05 00 00 02 00 00 00 ........?......
½ÐÅÆµÄÄÚÈÝÓ¦¸Ã°üÀ¨£¬ÄÇÒ»¸öÓû§½ÐµÄÅÆ£¬ÅƵÄÑÕÉ«£¨ºÚÌÒ£¬ºìÌÒ£¬²Ý»¨£¬·½¿é£©£¬½ÐÅÆµÄÊýÁ¿£¨Ò»¸ö»òһ˫£©£¬´ÓÉÏÃæµÄÎÒÌí¼ÓµÄÑÕÉ«µÄÊý¾Ý¿´µ½£¬ÕýºÃ¾ÍÊÇÕâÈý¸öλÖõÄÐÅÏ¢ÁË£¬Õâ¸ö¿ÉÄÜÄãµÄ¶à½ÓÊÕ¼¸´ÎÊý¾Ý£¬¶Ô±Èºó²Å»áµÃµ½£¬ÎÒÒ²ÊǽÓÊÕÁ˼¸´Î½ÐÅÆµÄÐÅÏ¢ºó²Å·ÖÎö³öÀ´µÄ£º
ËùÒÔÎÒÃǶ¨ÒåµÄ½ÐÅÆµÄÊý¾Ý½á¹¹ÈçÏÂËùʾ£º
typedef struct _tagSHJIJiaoPaiInfo
{
char cUser ; // ½ÐÅÆÓû§±àºÅ
char cFlag0 ;
char cFlag1 ;
char cFlag2 ;
char cColor ; // ÑÕÉ« ( ´óÍõ =0x35, СÍõ =0x34)
char cFlag3 ;
char cFlag4 ;
char cFlag5 ;
char cCount ; // ½ÐµÄÕÅÊý
char cFlag6 ;
char cFlag7 ;
char cFlag8 ;
char cFlag14 ;
char cFlag9 ;
char cFlag10 ;
char cFlag11 ;
int nFlag12 ;
int nFlag13 ;
}SHJIJiaoPaiInfo, *lpSHJIJiaoPaiInfo ;
Êý¾Ý½á¹¹ÖÐµÄÆäËüµÄÊý¾Ý±ê־λÊÇÔÝʱÎÒ»¹²»Çå³þÓÐʲôÓÃ;£¬²»¹ýÖ»ÒªÖªµÀÎÒÃÇÏëÒªµÄ×ã¹»µÄÐÅÏ¢¾Í¿ÉÒÔÁË¡£
ÏÂÃæÊÇÈ¡µÃ½ÐÅÆµÄÐÅÏ¢£º
void __fastcall TFrmMain::RevJiaoPaiInfo( char * pPackContent )
{
SHJIJiaoPaiInfo * pInfo = ( SHJIJiaoPaiInfo * )pPackContent ;
if( m_eZhuColor != ( GAMECARDCOLOR )pInfo->cColor )
{
m_eZhuColor = ( GAMECARDCOLOR )pInfo->cColor ;
ShowInitImagePic( m_cDaJi, m_eZhuColor ) ; // ÏÔʾÔÚ½çÃæÉÏ
}
SetJiaoPaiPic( pInfo->cUser, m_eZhuColor, pInfo->cCount ) ; // ÏÔʾÄÇÒ»¸öÓû§½ÐÅÆ
}
È¡µÃ½ÐÅÆµÄÐÅÏ¢£¬Äã¾Í¿ÉÒÔÏÔʾÔÚ×Ô¼ºµÄÍâ¹Ò½çÃæÉÏ£¬Í¬Ê±Ò²¿ÉÒÔÇø·ÖÓû§³öÅÆÊ±Ö÷»¹ÊǸ¶ÅÆÁË J
ËÄ¡¢¿Ûµ×ÃüÁî
Èç¹ûÄãÊÇׯ¼Ò£¬»áµÄ¿Ûµ×ÅÆµÄÐÅÏ¢£¬·ñÔò£¬·þÎñÆ÷·¢Ë͵ÄÕâ¸öÖ¸ÁîÖÐÊDz»°üº¬Õâ¸öµ×ÅÆµÄÐÅÏ¢µÄ¡£
0x0000 03 20 00 00 E4 00 00 00-03 00 00 00 1E 00 00 00 . ..?..........
0x0010 03 00 00 00 05 00 00 00-00 00 00 00 01 00 00 00 ................
0x0020 00 00 00 00 01 00 00 00-1D 00 00 00 03 00 00 00 ................
ÔÚÕâ¸öÖ¸ÁîÖУ¬²¢Ã»ÓаüÀ¨µ×ÅÆµÄ¸öÊý¾Ý£¬²»ÖªÁªÖÚÔÚ×öÕâ¸öÃüÁî×ÖÊÇΪ»áȱÁËÕâ¸ö£¿ËùÒÔÄã±ØÐè×Ô¼ºÈ¥¼ÆËãһϵ×ÅÆµÄ¸öÊýÁË£¬²»¹ýÖ»ÓÐÁ½ÖÖ£¬Ò»¸¶ÅƺÍÈý¸¶ÅÆÊ±ÊÇ 6 ¸öµ×£¬¶þ¸¶ÅÆÊ±ÊÇ 8 ¸öµ×£¬ÕâÑù¾Í¿ÉÒ԰ѵ×ÅÆµÄÐÅϢȡµÃÁË£¬ÔÚ¿Ûµ×µÄÐÅÏ¢Öл¹°üº¬ÁËÊÇÄÇÒ»¸öÓû§¿Ûµ×µÄ£¬Ò²¾ÍÊǵÚÒ»¸ö³öÅÆµÄ»§ÁË£¬Õâ¸öÐÅÏ¢ÓÃÀ´Ö¸Ê¾ÄÇÒ»¸öÓû§×îÏȳöÅÆ£¬²»¹ýÈç¹ûÖªµÀׯ¼ÒÊÇËҲͬÑù¿ÉÒÔÖªµÀµÚÒ»¸ö³öÅÆÈ˵ıàºÅ¡£¶¨ÒåµÄÊý¾Ý½á¹¹ÈçÏÂËùʾ£º
typedef struct _tagSHJICaoDiFlag
{
char cUser ; // µÚÒ»¸ö³öÅÆÓû§ ( ׯ¼Ò )
char cFlag0 ;
char cFlag1 ;
char cFlag2 ;
}SHJICaoDiFlag, *lpSHJICaoDiFlag ;
typedef struct _tagSHJICaoDiInfo
{
int nPosition ; // λÖÃÐÅÏ¢
char cColor ; // ÅÆÑÕÉ«
char cFlag0 ;
char cFlag1 ;
char cFlag2 ;
char cCard ; // µ×ÅÆ
char cFlag3 ;
char cFlag4 ;
char cFlag5 ;
int nFlag6 ;
int nFlag7 ;
int nFlag8 ;
int nFlag9 ;
}SHJICaoDiInfo, *lpSHJICaoDiInfo ;
ÒòΪǰ¶ÎµÄÐÅÏ¢Ö»ÓÐÒ»¸ö£¬ºó¶ÎµÄÿһ¸öÅÆµÄÐÅÏ¢ÊÇÑ»·³öÏֵģ¬ËùÒԴӿ۵׵ĸöÊý¾Í¿ÉÒԵõ½Ã¿Ò»¸öµ×ÅÆµÄÐÅÏ¢ÁË¡£
void __fastcall TFrmMain::RevCaoDiInfo( char * pPackContent, int nLen )
{
SHJICaoDiFlag * pInfo = ( SHJICaoDiFlag * )pPackContent ;
m_bCanCaculate = true ; // ¿ªÊ¼¼ÆËã±êÖ¾
m_ZhangJia = (( pInfo->cUser cUser > POS_BOT ) ? 0 : pInfo->cUser ) ;
if( nLen == 4 ) return ; // Èç¹û²»°üÀ¨µ×ÅÆÐÅÏ¢·µ»Ø
// µ×ÅÆÐÅÏ¢
for( int i = 0 ; i cColor, pCard->cCard ) ;
ShowPicOnImage(( GAMECARDCOLOR )pCard->cColor, pCard->cCard, PanelDIPAI ) ;
}
}
È¡µÃºÍµ×ÅÆÐÅÏ¢¿ÉÒÔÏÔʾÔÚ½çÃæÉÏ£¬²»±ØÃ¿´Î¿´ÊÇÒª×Ô¼ºÈ¥µã»÷¿Í»§¶ËµÄ²é¿´µ×ÅÆÐÅÏ¢°´¼ü£¬Í¬Ê±Èç¹ûÄãÊÇ¿´±ðÈË´òÅÆ£¬ËûÉèÖÃÁ˲»ÈÃÅÔ¹ÛÕß¿´Ê±£¬ÄãÒ²¿ÉÒÔÖ±½Ó¿´µ½ËûµÄµ×ÅÆÐÅÏ¢£¬ºÇºÇ J
Îå¡¢³öÅÆÃüÁî
ÉÏÃæËµÊÇÕâô¶à£¬ÏÖÔÚÖÕÓÚµ½ÁËÈ«²¿ÐÒé·ÖÎöÖÐ×îÖØÒªµÄ²¿·ÖÄÚÈÝÁË£»¼Ç¼ÿһ¸öÍæ¼ÒËù³öµÄÅÆÐÅÏ¢£¬ÕâÑù¾Í¿ÉÒÔ·ÖÎö»¹Ê£ÓàʲôÑùµÄÅÆÁË¡£
0x0000 0D 20 00 00 38 00 00 00-00 00 00 00 01 00 00 00 . ..8...........
0x0010 00 00 00 00 00 00 00 00-01 00 00 00 00 00 00 00 ................
0x0020 3C 00 00 00 2F 00 00 00-01 00 00 00 09 00 00 00 cOutCount ; i ++ )
{
SHJICardInfo * pCard = ( SHJICardInfo * )( ( char * )( pInfo + 1 ) + i * sizeof( SHJICardInfo )) ;
if( i == 0 ) // ¶Ô±ÈµÚÒ»¸öÅÆ£¬Èç¹ûÊÇÏàͬ£¬·µ»Ø
{
if( m_LastCard.eColor == (GAMECARDCOLOR)pCard->cColor &&
m_LastCard.cCard == pCard->cCard && m_LastCard.nCardPos == pInfo->cCurOut ) return ;
if( m_CurColor.btStatus == 1 ) // ÉèÖÿÉÒÔ¼ìÃ»ÅÆ×´Ì¬±êÖ¾
{
m_CurColor.rCurColor = (GAMECARDCOLOR)pCard->cColor ;
m_CurColor.btStatus = 2 ;
m_CurColor.cCard = pCard->cCard ;
}
}
SetSendCardPic( pInfo->cCurOut, pInfo->cNextOut, pInfo->nScore, (GAMECARDCOLOR)pCard->cColor, pCard->cCard ) ;
if( i == 0 )
{
m_LastCard.eColor = (GAMECARDCOLOR)pCard->cColor ;
m_LastCard.cCard = pCard->cCard ;
m_LastCard.nCardPos = pInfo->cCurOut ;
}
if( m_CurColor.btStatus == 2 ) // ¼ì²âµ±Ç°Óû§ÊÇ·ñûÓÐÕâÖÖÅÆ
{
// ³öµÄÅÆµÄÖ÷ÅÆ
if( pCard->cCard == m_cDaJi || pCard->cCard == 0x34 || pCard->cCard == 0x35 || (GAMECARDCOLOR)pCard->cColor == m_eZhuColor )
{
if( ( m_CurColor.cCard == m_cDaJi || m_CurColor.cCard == 0x34 || m_CurColor.cCard == 0x35 || m_CurColor.rCurColor == m_eZhuColor ) == false )
{
SetColorHave( pInfo->cCurOut, m_eZhuColor ) ; // ÕâÒ»ÖÖÅÆÃ»ÓÐÁË
}
}
else if( (GAMECARDCOLOR)pCard->cColor != m_CurColor.rCurColor )
{
SetColorHave( pInfo->cCurOut, m_CurColor.rCurColor ) ; // ÕâÒ»ÖÖÅÆÃ»ÓÐÁË
}
}
}
ÿ¸öÍæ¼Ò³öÅÆµÄÐÅÏ¢¶¼ÊÕ¼¯µ½Ö®ºó£¬¾Í¿ÉÒÔ¸ù¾Ýÿһ¸öÍæ¼ÒËùÏÖµÄÅÆÐÅÏ¢À´ÅжÏÒ»ÏÂËûÓÐʲôÑùµÄÅÆ£¬·ÖÎöµÄ½á¹ûÖ±½ÓÏÔʾÔÚÍâ¹Ò½çÃæÉÏ¡£ÈÃÄãµÄÓû§Ò»Ä¿ÁËÈ»µØÖªµÀ±ðÈËÓÐÊ²Ã´ÅÆ£¬ÖªÒÑÖª±Ë£¬°ÙÕ½°Ùʤ£¬ºÇºÇ
Áù¡¢µ×ÅÆÃüÁî
˵ÁËÕâô¶à£¬ÖÕÓÚÒ»¸öÓÎÏ·µ½Á˽áÊø²¿·ÖÁË£¬¾ÍÊÇÊdzöÍêÅÆºó£¬·þÎñÆ÷·µ»ØÀ´µÄ×îºóµÄµ×ÅÆÐÅÏ¢ÁË¡£Õâ¸öÖ¸ÁîÖÐͬʱҲ°üº¬ÁËһЩÆäËüµÄÖ¸Á²»¹ý¾ÍËã²»ÖªµÀÒ²ÎÞËùν£¬ÒòΪһÂÖÒ²¾Í½áÊøÁË£¬ºÇºÇ£¬Èç¹ûÄãÊÇÓ®£¬Ò²²»Òª·¢±íÌ«¹ý¼¤ÁҵϰÓҪ²»¶Ô¼Ò²»»áºÍÄãÍæÁË£¬ºÇºÇ J
0x0100 15 20 00 00 08 01 00 00-08 00 00 00 02 01 00 00 . ..............
0x0110 00 00 00 00 01 00 00 00-78 00 00 00 00 00 00 00 ........x.......
0x0120 02 00 00 00 FE FF FF FF-02 00 00 00 FE FF FF FF ....?ÿ....?ÿ
0x0130 17 00 00 00 03 00 00 00-0B 00 00 00 00 00 00 00 ................
0x0140 00 00 00 00 01 00 00 00-01 00 00 00 14 00 00 00 ................
µ×ÅÆµÄÐÅÏ¢Ö»ÒªÄã¿´Ò»ÏÂÄãµÄµÃ·Ö£¬¾ÍºÜÈÝÒ×ÖªµÀ·ÖÊýµÄ±íʾÔÚÄÇÒ»¸öÁË£¬ÔÚÕâÀµÃ·ÖÊÇ 120 = 0x78 £¬ÊDz»ÊǺÜÈÝÒ׾Ϳ´³öÀ´ÊÇÄÇÒ»¸öλÖñíʾµÄÊÇ·ÖÊýÁË¡£»¹ÓоÍÊǵ×ÅÆµÄÐÅÏ¢ÁË£¬Õâ¸öºÍ³öÅÆÊ±µÄÐÅÏ¢ÊDz¶àµÄ£¬Ò»¸öÊÇÑÕÉ«£¬ÅƵıàºÅ£¬ÕâÑù¾Í¿ÉÒÔÓÃÏÂÃæµÄÊý¾Ý½á¹¹À´±íʾ£º
typedef struct _tagSHJIFinishInfo
{
int nFlag0 ;
int nFlag1 ;
int nFlag2 ;
int nFlag3 ;
int nScore ; // µÃ·Ö
int nFlag4 ;
int nFlag5 ;
int nFlag6 ;
int nFlag7 ;
int nFlag8 ;
}SHJIFinishInfo, *lpSHJIFinishInfo ;
typedef struct _tagSHJIFinishCard
{
int nFlag0 ;
char cColor ; // ÅÆµÄÑÕÉ«
char cFlag1 ;
char cFlag2 ;
char cFlag3 ;
char cCard ; // ÅÆ±àºÅ
char cFlag4 ;
char cFlag5 ;
char cFlag6 ;
int nFlag7 ;
int nFlag8 ;
int nFlag9 ;
int nFlag10 ;
}SHJIFinishCard, *lpSHJIFinishCard ;
ÔÚÕâÀï±ßÊý¾Ý½á¹¹Ò²ÊÇ·ÖΪÁ½¸ö²¿·ÖµÄ£¬Èç¹ûÊÇÁ½¸¶ÅÆ£¬ÄÇôËù°üº¬µÄµ×ÅÆÐÅÏ¢Ò²ÊÇ 8 ¸ö£¬ÔÚÕâ¸öÖ¸ÁîͬÑùҲûÓаüº¬Õâ¸öÐÅÏ¢£¬ºÍÉÏÃæµÄ¿Ûµ×ÅÆÐÅÏ¢Ò»Ñù£¬Ö»ÄÜ×Ô¼ºÈ¥¸ø³öµ×ÅÆ¸öÊý¡£ÏÂÃæ¾ÍÊǵõ½µÄµ×ÅÆÐÅÏ¢
void __fastcall TFrmMain::RevFinishInfo( char * pPackContent )
{
SHJIFinishInfo * pInfo = ( SHJIFinishInfo * )pPackContent ;
// µ×ÅÆÐÅÏ¢
for( int i = 0 ; i cColor, pCard->cCard, PanelDIPAI ) ;
}
// ¼ÆËãÏÂÒ»ÂÖ´òµÄ¼¶Êý
if( pInfo->nScore == 0 ) // µÃ 0 ·Ö
{
if( m_ZhangJia == POS_LEFT || m_ZhangJia == POS_RIGHT )
{
m_cDaJi02 = m_cDaJi02 + 3 ;
}
else
{
m_cDaJi13 = m_cDaJi13 + 3 ;
}
}
else if( pInfo->nScore nScore nScore - 40 * m_nPaiNum ) / ( 20 * m_nPaiNum ) ;
nShenji = ( nShenji POS_BOT ) m_ZhangJia = POS_LEFT ;
}
if( m_ZhangJia == POS_LEFT || m_ZhangJia == POS_RIGHT )
{
m_cDaJi = m_cDaJi02 ;
}
else
{
m_cDaJi = m_cDaJi13 ;
}
}
ÔÚ×îºó£¬µÃµ½µ×ÅÆÐÅϢʱ£¬Ò²°üº¬ÁË×îºóµÄµÃ·Ö£¬¾Í¿ÉÒÔ×Ô¼ºÈ¥·ÖÎöÏÂÒ»¼¶±ðÊÇ´òʲô£¬»¹ÓÐׯ¼ÒÊÇÄÇÒ»¸öÓû§£¬ËùÈÏÉÏÃæµÄ¹ý³ÌÖаüº¬ÁËÕâ¸ö·ÖÎö¹ý³Ì£¬ÓÐÒ»²¿·Ö×¢ÊÍ£¬ÏàÐÅ´ó¼Ò¿ÉÒÔ¿´µÃÃ÷ÁË¡£
µ½´Ë£¬ÎÒËùÒª×öµÄÁªÖÚÉý¼¶µÄÐÒé·ÖÎö¾Í˵ÍêÁË£¬Ò²¸ø³öÁËÎÒËù×öµÄÍâ¹ÒµÄ²¿·ÖºËÐÄ´úÂ룬´ó¼Ò´ÓÕâЩ´úÂëÖÐÓ¦¿ÉÒÔ¿´µ½·ÖÎöÓëʵÏֵĽáºÏ£¬×Ô¼ºÈ¥³¢ÊÔ×öÒ»¸öÍâ¹Ò£¬¶ÔÓڸ߼¶µÄÍæ¼Ò¿ÉÄܶÔÓÚÍâ¹Ò²»ÉÓÒ»¹Ë£¬²»¹ý£¬ÔÚÕâÀïÎÒËù×öµÄ·ÖÎöÒ²Ö»ÊÇÓë´ó¼ÒÒ»ÆðѧϰÓë̽ÌÖ£¬µ±È»Ò²¿ÉÒÔÓëÎÒÁªÏµ [email]jimzj@21cn.com[/email] ¡£
ÔÚ×öÐÒé·ÖÎöʱ£¬»¹Ïëµ½Ò»¸öÆäËüµÄÎÊÌ⣬ÒòΪÁªÖÚÊǵÄÓÎÏ·²î²»¶àÊÇÖÖ¸ñʽ×ö³öÀ´µÄ£¬ËùÒÔÏàÐÅÄãÓÐÁËÉÏÃæµÄÉý¼¶µÄÐÒé·ÖÎöµÄ¾Ñ飬¾Í¿ÉÒÔÊÔ×ÅÈ¥·ÖÎöÆäËüµÄÈçÇÅÅÆ£¬¶·µØÖ÷£¬Ë«¿½µÈÆåÅÆÀàÓÎÏ·ÁË£¬ÎÒÖªµÀµÄÕâЩÓÎÏ·µÄ¶Ë¿ÚÉèÖÃÈçÏ£º
// ÓÎÏ·µÄ¶Ë¿Ú
enum OURGAMEPORT
{
PORT_CHAT = 2002, // ÁªÌì
PORT_DODZ = 3003, // ¶·µØÖ÷
PORT_SHJI = 3004, // Éý¼¶
PORT_SHKO = 3008 // Ë«¿½
} ;
»¹Óм¸¸öÎÊÌ⣬ÎÒûÓÐʱ¼äȥʵÏÖ£¬²»¹ýÔÚÕâÀï˵³öÀ´Óë´ó¼Ò̽ÌÖһϣº
1 ¡¢ ÔÚÍø°ÉÍæÊ±£¬Èç¹ûÄãÖªµÀ¶Ô¼ÒµÄ IP £¬ÄãÉèÖÃÍâ¹Ò²¶×½°üʱÉèÖÃÖ»²¶×½¶Ô·½µÄ°ü£¬ÕâÑùÄã¾Í¿ÉÒԵõ½Á˶Է½µÄÈ«²¿ÅƵÄÐÅÏ¢ÁË£¨ÒòΪÔÚ¾ÖÓòÍøÖУ¬È«²¿°üÐÅÏ¢Äã¶¼¿ÉÒÔ½ÓÊÕµ½£¬ºÇºÇ J £©£»
2 ¡¢ ÁªÖÚÔÚ´òÉý¼¶Ê±ÁÄÌì¾³£Õû¸öÓÎÏ·ËÀÁË£¬Äã¿ÉÒÔÀûÓà 2002 ¶Ë¿ÚÖ±½Ó·¢ËÍÁªÌìÐÅÏ¢µ½·þÎñÆ÷£¬ÕâÑù¾Í²»±ØÎªÁÄÌì³ÌÐòËÀÁ˵£ÐÄ£»
3 ¡¢ Èç¹ûÄãÖªµÀ¶Ô¼ÒµÄ IP µØÖ±£¬ÔÚÍøÂçÉÏ¿ÉÒÔÔÚÍâ¹ÒÖÐ×öÒ»¸ö C/S µÄ¶Ë¿Ú£¬ÓÃÀ´Ï໥´«µÝÅÆµÄÐÅÏ¢£¬ÕâÑùÒ²¿ÉÒÔ´ïµ½Á˽â¶Ô¼ÒµÄÅÆÐÅÏ¢µÄÄ¿µÄ£»
4 ¡¢ ÁªÖÚÊÇ¿ÉÒÔÈÃÆäËüµÄÍæ¼ÒÈ¥ÅԹ۵ģ¬ËùÒÔ£¬Èç¹ûÄãÕýÔÚÍæÊ±£¬¿ÉÒÔÀûÓÃÍâ¹ÒÈ¥Éú³É IP °üÈ¥Ïò·þÎñÆ÷ÉêÇëÅÔ¹ÛÁíÍ⼸¸öÓû§µÄÐÅÏ¢£¬ÕâÑù¾Í¿ÉÒԵõ½È«²¿ÓëÄãÒ»ÆðÍæµÄÍæ¼ÒµÄÅÆµÄÐÅÏ¢ÁË£¬ÕâÑùÏëµ±ÓÚ¿´×űðÈ˵ÄÅÆÒ»´òÁË£¬ÊDz»ÊǺܱ°±É£¬ºÇºÇ