ÖйúʯÓÍ´óѧ(»ª¶«)VCʵÑ鱨¸æÊµÑé°Ë ÏÂÔØ±¾ÎÄ

ÄÚÈÝ·¢²¼¸üÐÂʱ¼ä : 2026/5/22 6:26:12ÐÇÆÚÒ» ÏÂÃæÊÇÎÄÕµÄÈ«²¿ÄÚÈÝÇëÈÏÕæÔĶÁ¡£

ÖйúʯÓÍ´óѧ´«VCʵÑ鱨¸æ

ÖйúʯÓÍ´óѧ£¨»ª¶«£©×Ô¶¯»¯×¨ÒµVCʵÑ鱨¸æ

ʵÑéÈÕÆÚ£º ³É ¼¨£º

°à¼¶£º ×Ô¶¯»¯1602 ÐÕÃû£º лÇåÌΠѧºÅ£º 1605010224 ʵÑé°Ë Windows ÍøÂçͨÐÅÓ¦Óñà³Ì

Ò»¡¢ÊµÑéÄ¿µÄ

1¡¢ÊìϤ Visual Studio ¿ª·¢»·¾³£»

2¡¢ÕÆÎÕ MFC ³ÌÐòÖв˵¥×ÊÔ´µÄÉè¼Æ·½·¨£»

3¡¢ÕÆÎÕ socket ͨÐŵĻù±¾¸ÅÄîºÍ socketͨÐÅ MFC ÀàµÄ±à³Ì·½·¨£» ¶þ¡¢ÊµÑéÄÚÈÝ

ÈçͼËùʾ£¬´´½¨µ¥ÎĵµÓ¦ÓóÌÐò£¬ÊµÏÖ TCP ͨÐÅ·þÎñÆ÷ºÍ¿Í»§¶Ë¹¦ÄÜ¡£ Éè¼ÆÒªÇó£º

(1) TCP ·þÎñÆ÷·½Ã棬´´½¨Æô¶¯¼àÌý¡¢Í£Ö¹¼àÌýºÍ·¢ËÍÊý¾ÝÈý¸ö°´Å¥£¬ÊµÏÖ TCP ·þÎñÆ÷µÄ¼àÌý

¹¦ÄܺÍͨÐŹ¦ÄÜ£»

(2) TCP ¿Í»§¶Ë·½Ã棬´´½¨½¨Á¢Á¬½Ó¡¢¶Ï¿ªÁ¬½ÓºÍ·¢ËÍÊý¾ÝÈý¸ö°´Å¥£¬ÊµÏÖ TCP ¿Í»§¶ËµÄÁ¬½Ó

¹¦ÄܺÍͨÐŹ¦ÄÜ£»

ÖйúʯÓÍ´óѧ´«VCʵÑ鱨¸æ

Èý¡¢ÊµÑ鱨¸æ

(1) ×ܽá TCP ͨÐŵĻù±¾Á÷³Ì£»

A¡¢·þÎñÆ÷³õʼ»¯¡ª¡ªLISTEN

£¨1£©µ÷ÓÃsocketº¯Êý´´½¨ÎļþÃèÊö·û¡£

£¨2£©µ÷ÓÃbindº¯Êý½«µ±Ç°µÄÎļþÃèÊö·ûºÍip/port°ó¶¨ÔÚÒ»Æð¡£Èç¹ûÕâ¸ö¶Ë¿ÚÒѾ­±»ÆäËû½ø³ÌÕ¼ÓÃ

ÁË£¬¾Í»ábindʧ°Ü¡£

£¨3£©µ÷ÓÃlistenº¯ÊýÉùÃ÷µ±Ç°Õâ¸öÎļþÃèÊö·û×÷Ϊһ¸ö·þÎñÆ÷µÄÎļþÃèÊö·û£¬Îªaccept×öºÃ×¼±¸¡£ £¨4£©µ÷ÓÃacceptº¯Êý×èÈûµÈ´ý¿Í»§¶ËÁ¬½ÓÆðÀ´¡£

B¡¢½¨Á¢Á¬½ÓµÄ¹ý³Ì¡ª¡ªÈý´ÎÎÕÊÖ

µÚÒ»´Î£ºµ÷ÓÃconnectº¯Êý·¢³öSYN¶ÎÏò·þÎñÆ÷·¢ÆðÁ¬½ÓÇëÇ󣬲¢×èÈûµÈ´ý·þÎñÆ÷Ó¦´ð¡£ µÚ¶þ´Î£º·þÎñÆ÷ÊÕµ½¿Í»§¶ËµÄSYN¶Îºó£¬»áÓ¦´ðÒ»¸öSYN-ACK¶Î±íʾ¡°Í¬Ò»½¨Á¢Á¬½Ó¡±¡£ µÚÈý´Î£º·þÎñÆ÷¶ËÊÕµ½SYN-ACKºó»á´Óconnectº¯ÊýÖзµ»Ø£¬Í¬Ê±Ó¦´ðÒ»¸öACK¶Î¡£

C¡¢Êý¾Ý´«ÊäµÄ¹ý³Ì

½¨Á¢Á¬½Óºó£¬TCPЭÒéÌṩȫ˫¹¤µÄͨÐÅ·þÎñ¡£Ëùνȫ˫¹¤£¬Òâ˼ÊÇ£ºÔÚͬһÌõÁ´Â·ÖеÄͬһʱ¿Ì£¬Í¨ÐÅË«·½¿ÉÒÔͬʱдÊý¾Ý¡£Ïà¶ÔµÄ¸ÅÄî½Ð×ö°ëË«¹¤£¬¼´£ºÔÚͬһÌõÁ´Â·ÖеÄͬһʱ¿Ì£¬Ö»ÄÜÓÉÒ»·½À´Ð´Êý¾Ý¡£ £¨1£©·þÎñÆ÷´Óacceptº¯Êý·µ»ØºóÁ¢¿Ìµ÷ÓÃreadº¯Êý¶ÁsocketÀïµÄÊý¾Ý¡£¶Ásocket¾ÍÏñ¶Á¹ÜµÀÒ»Ñù£¬

Èç¹ûûÓÐÊý¾Ýµ½´ï¾Í×èÈûµÈ´ý¡£

ÖйúʯÓÍ´óѧ´«VCʵÑ鱨¸æ

£¨2£©¿Í»§¶Ëµ÷ÓÃwriteº¯Êý·¢ËÍÇëÇó¸ø·þÎñÆ÷£¬·þÎñÆ÷ÊÕµ½ºó¾ÍÏò¿Í»§¶Ë»Ø¸´ACK£¬²¢´Óreadº¯

ÊýÖзµ»Ø£¬¶Ô¿Í»§¶ËµÄÇëÇó½øÐд¦Àí¡£ÔÚ´ËÆÚ¼ä¿Í»§¶Ëµ÷ÓÃreadº¯Êý×èÈûµÈ´ý·þÎñÆ÷µÄÓ¦´ð¡£ £¨3£©·þÎñÆ÷µ÷ÓÃwriteº¯Êý½«´¦Àí½á¹û·¢»Ø¿Í»§¶Ë£¬¿Í»§¶ËÊÕµ½ºó¾Í»Ø¸´ACK¡£·þÎñÆ÷Ôٴε÷ÓÃ

readº¯Êý×èÈûµÈ´ýÏÂÒ»ÌõÇëÇ󣬡£

£¨4£©¿Í»§¶Ë´Óreadº¯ÊýÖзµ»Ø£¬²¢·¢ËÍÏÂÒ»ÌõÇëÇó£¬Èç´ËÑ­»·ÏÂÈ¥¡£

D¡¢¶Ï¿ªÁ¬½ÓµÄ¹ý³Ì¡ª¡ªËĴλÓÊÖ µÚÒ»´Î£ºÈç¹û¿Í»§¶ËûÓиü¶àµÄÇëÇó¾Íµ÷ÓÃcloseº¯Êý¹Ø±ÕÁ¬½Ó£¬¿Í»§¶Ë»áÏò·þÎñÆ÷¶Ë·¢ËÍFIN¶Ë¡£ µÚ¶þ´Î£º·þÎñÆ÷ÊÕµ½FINºó»á»ØÓ¦Ò»¸öACK£¬Í¬Ê±read·µ»Ø0¡£ µÚÈý´Î£º¿Í»§¶ËÊÕµ½FINºó£¬ÔÙ·µ»ØÒ»¸öACK¸ø·þÎñÆ÷¡£

(2) ÁгöʵÏÖ TCP ·þÎñÆ÷¶Ë¹¦ÄܵĴúÂëÇåµ¥£»

CMyServer::CMyServer() { }

CMyServer::~CMyServer() { CMySocket *pSocket; POSITION pos = m_ClientList.GetHeadPosition(); while(pos) { pSocket = (CMySocket*)m_ClientList.GetNext(pos); pSocket->Close(); delete pSocket; pSocket = NULL; } m_ClientList.RemoveAll(); }

void CMyServer::OnAccept(int nErrorCode) { CMySocket *pSocket = new CMySocket(); if(Accept(*pSocket)) { m_ClientList.AddTail(pSocket); pSocket->AsyncSelect(FD_READ|FD_CLOSE); pSocket->SetMsgPara(m_pWnd,m_nMsgID); pSocket->m_bAccept = TRUE;