| dz̸»ùÓÚ.NETµÄ¶àÓû§¿Í»§¶ËÉè¼Æ(2) | |
|---|---|
| http://www.sina.com.cn 2004Äê04ÔÂ06ÈÕ 10:18 Ìì¼«Íø | |
|
¡¡¡¡ÎÄ/ÓÚ²ÊÈÙ ÖìÕý³¬ ¡¡¡¡3.¾ßÌå´úÂë: ¡¡¡¡3.1ÉùÃ÷È«¾Ö±äÁ¿ ¡¡¡¡struct socket_info {¡¡} ; //ÈçǰËùʾ ¡¡¡¡extern CList ¡¡¡¡extern CClientSocket* lSocket; //ÓÃÓÚ±êʶµ±Ç°ÕýÔÚͨÐŵÄÁ¬½Ó ¡¡¡¡extern int id; //ÓÃÓÚָʾÓû§Ñ¡ÔñµÄÒª½øÐÐͨÐŵÄÁ¬½Ó ¡¡¡¡extern char pBuf[100]; //½ÓÊÕ»º³åÇø ¡¡¡¡3.2ʵÏÖCClientDlg.cppÖеÄÏìÓ¦º¯Êý£º ¡¡¡¡void CClientDlg::OnServerConflogin()//"Óû§µÇ½"²Ëµ¥ÏìÓ¦º¯Êý ¡¡¡¡{ CLoginDlg dlg; ¡¡¡¡int t=0; //¼Ç¼ʧ°ÜµÄÁ¬½ÓÊý ¡¡¡¡int size=s_info.GetSize(); //²é¿´µ±Ç°Á¬½ÓÁ´±íµÄ³¤¶È ¡¡¡¡if(dlg.DoModal()==IDOK) ¡¡¡¡{ socket_info* pInfo; //ÉùÃ÷½á¹¹Ìå ¡¡¡¡for(int i=0;i ¡¡¡¡{ pInfo = new socket_info; ¡¡¡¡pInfo->s_client=new CClientSocket(); ¡¡¡¡if(!(pInfo->s_client->Create())) //´´½¨socket ¡¡¡¡{ delete pInfo->s_client; ¡¡¡¡pInfo->s_client=NULL; ¡¡¡¡} ¡¡¡¡if(!(pInfo->s_client->Connect(m_strIpaddress,m_Port))) //Á¬½Ó ¡¡¡¡{ t++; //Èç¹ûʧ°Ü£¬tÔö¼Ó£¬ÊÍ·Å¿Õ¼ä ¡¡¡¡delete pInfo->s_client; ¡¡¡¡pInfo->s_client=NULL; ¡¡¡¡} ¡¡¡¡else{ //Èç¹û³É¹¦ ¡¡¡¡pInfo->id =size+i; //ÉèÖõ±Ç°Á¬½ÓµÄid ¡¡¡¡pInfo->username=dlg.m_strUsername; ¡¡¡¡s_info.AddTail(*pInfo); //½«³É¹¦µÄÁ¬½Ó¼ÓÈëÁ´±í ¡¡¡¡} ¡¡¡¡} ¡¡¡¡int c=dlg.m_nUserCount-t; //µÃµ½³É¹¦µÄÁ¬½ÓÊý ¡¡¡¡char message[10]; ¡¡¡¡::sprintf(message,"%d",c); //½«Êý×Öת»»³É×Ö·û´® ¡¡¡¡strcat(message,"¸öÁ¬½Ó³É¹¦"); ¡¡¡¡if(c>=0) AfxMessageBox(message); //µ¯³öÌáʾ¶Ô»°¿ò ¡¡¡¡} ¡¡¡¡} ¡¡¡¡3.3ʵÏÖCommunicationDlg.cppÖеÄÏìÓ¦º¯Êý£º ¡¡¡¡void CCommunicationDlg::OnBnClickedQuery()//"·¢ËÍ"°´Å¥µÄÏìÓ¦º¯Êý ¡¡¡¡{ lSocket=NULL; ¡¡¡¡UpdateData(); ¡¡¡¡id=atoi(m_strQueryId); //»ñµÃÓû§ÊäÈëµÄÁ¬½ÓºÅ ¡¡¡¡POSITION pos; ¡¡¡¡if(!s_info.IsEmpty()) ¡¡¡¡{ socket_info info=s_info.GetHead(); ¡¡¡¡if(id>=s_info.GetCount()) //¿ÉÑ¡ÔñµÄid±ØÐëСÓÚÁ´±íµÄ´óС ¡¡¡¡MessageBox("the data is larger than the count of the list","Alert",MB_OK); ¡¡¡¡else{ for(pos=s_info.GetHeadPosition();;) //±éÀúÕû¸öÁ´±í ¡¡¡¡{ if(info.id==id&&!info.s_client==NULL) ¡¡¡¡{ lSocket=info.s_client; //½«Óû§Ö¸¶¨µÄÁ¬½ÓµÄsocket¸³ÓèlSocket lSocket->Send(m_strSendData,m_strSendData.GetLength()); ¡¡¡¡//·¢ËÍm_strSendDataÎı¾¿òÖеÄÎı¾ ¡¡¡¡break; } ¡¡¡¡if(pos==NULL) break; ¡¡¡¡else info =s_info.GetNext(pos); ¡¡¡¡} ¡¡¡¡} ¡¡¡¡}else AfxMessageBox("the queer is empty!"); //Á´±íΪ¿Õ ¡¡¡¡} ¡¡¡¡void CCommunicationDlg::OnBnClickedAdd() //"½ÓÊÕ"°´Å¥µÄÏìÓ¦º¯Êý ¡¡¡¡{ UpdateData(); ¡¡¡¡BOOL MsgEnd=TRUE; ¡¡¡¡int iRecv; //ÿ´Î¶ÁÈ¡µÄ×Ö·ûÊý ¡¡¡¡if(!lSocket==NULL) ¡¡¡¡{ memset(pBuf,0,100); //Çå¿Õ»º³åÇø ¡¡¡¡do{ iRecv=lSocket->Receive(pBuf,100);//½ÓÊÕÊý¾Ý ¡¡¡¡if(iRecv<100&&iRecv>0) { MsgEnd=TRUE;} ¡¡¡¡pBuf[iRecv]=0; //¸ø»º³åÇø½á⣬¼´¸³'\0' ¡¡¡¡}while(!MsgEnd); ¡¡¡¡m_ReceData.SetSel(0,-1); ¡¡¡¡m_ReceData.ReplaceSel(pBuf); //ÔÚm_ReceDataÎı¾¿òÖÐÏÔʾ½ÓÊÕµÄ×Ö·û ¡¡¡¡} else AfxMessageBox("the socket was disconnected"); ¡¡¡¡} ¡¡¡¡void CCommunicationDlg::OnBnClickedCancel()//"¶Ï¿ª¸ÃÁ¬½Ó"°´Å¥µÄÏìÓ¦º¯Êý ¡¡¡¡Óë"Í˳ö"²Ëµ¥ÏìÓ¦º¯ÊýÀàËÆ£¬²»Í¬Ö®´¦ÔÚÓÚ£¬Í˳ö²Ëµ¥ÒªÇå¿ÕÕû¸ö¶ÓÁУ¬¶ø"¶Ï¿ª¸ÃÁ¬½Ó"º¯Êý½ö½öÊÇÕÒµ½µ±Ç°µÄÕýÔÚͨÐŵÄÁ¬½Ó²¢½«Æä¶Ï¿ª¡£ ¡¡¡¡¡¡ ¡¡¡¡socket_info info=s_info.GetAt(s_info.FindIndex(id)); //ÕÒµ½id¶ÔÓ¦µÄ½á¹¹Ìå ¡¡¡¡if(!info.s_client==NULL){ ¡¡¡¡if(info.s_client->ShutDown(2)){ //¶Ï¿ª¸ÃÁ¬½Ó ¡¡¡¡info.s_client->Close(); ¡¡¡¡delete info.s_client; ¡¡¡¡info.s_client=NULL; ¡¡¡¡s_info.RemoveAt(s_info.FindIndex(id)); //´ÓÁ´±íÖÐɾ³ý¸Ã½á¹¹Ìå ¡¡¡¡AfxMessageBox("Disconnect successfully!"); ¡¡¡¡4.Éè¼Æ¼¼ÇÉ ¡¡¡¡ÔÚÉè¼ÆÖУ¬ÎÒÃÇҪעÒ⼸¸öÎÊÌ⣬ÕâЩÎÊÌâµÄ½â¾öÖ±½ÓÓ°Ïìµ½³ÌÐòµÄÐÔÄÜ¡£ ¡¡¡¡4.1¶ÔÓÚÒ»¸ö»ùÓÚ¶Ô»°¿òµÄÓ¦ÓóÌÐò£¬Visual MFCÓ¦ÓóÌÐòÏòµ¼²»»á¸ø¶Ô»°¿ò´´½¨²Ëµ¥¡£Èç¹ûÒªÔÚ¶Ô»°¿òÖÐÏÔʾ²Ëµ¥£¬±ØÐë°ÑËü×÷Ϊһ¸ö×ÊÔ´£¬²¢Á¬½Óµ½¶Ô»°¿ò´°¿Ú¡£¾ßÌå²½Öè: ¡¡¡¡¡¡ÓÒ»÷×ÊÔ´ÊÔͼµÄ"²Ëµ¥"Ñ¡Ïî,´´½¨Ò»¸ö²Ëµ¥IDR_MENU1,Ìí¼Ó²Ëµ¥Ï ¡¡¡¡¡¡´ò¿ª×ÊÔ´ÊÔͼµÄ"¶Ô»°¿ò"Ñ¡Ïî,ÓÒ»÷¶Ô»°¿ò(IDD_CLIENT_DIALOG),Ñ¡Ôñ"ÊôÐÔ",ÔÚµ¯³öµÄÊôÐÔ±íÖÐÕÒµ½"Menu",½«ËüµÄÖµÉèΪIDR_MENU1£» ¡¡¡¡4.2Óû§Òª½¨Á¢Á¬½Ó£¬¾ÍÒªÖ¸¶¨Á¬½ÓÊý£¬ÎÊÌâÊÇ£¬Óû§²»Ò»¶¨Ò»´ÎÖ¸¶¨ËùÓеÄÁ¬½Ó¡£±ÈÈç˵£¬µÚÒ»´Î£¬Óû§Ö¸¶¨ÁË50¸öÁ¬½Ó£¬³ÌÐò½«50¸öÁ¬½Ó¼ÓÈëµ½Á¬½Ó¶ÓÁÐÖС£¾¹ý²âÊÔ£¬Óû§·¢ÏÖ50¸öÁ¬½ÓÔËÐÐÇé¿öÁ¼ºÃ£¬ÓÚÊÇ£¬Óû§ÏëÒª²âÊÔ100¸öÁ¬½ÓµÄÔËÐÐÇé¿ö£¬Õâʱ£¬ÎÒÃDz»ÄÜÒªÇóÓû§Í˳ö²¢ÖØÐÂÔËÐгÌÐò£¬È»ºóÖ¸¶¨100¸öÁ¬½ÓÖØÐ½øÐвâÊÔ¡£ÎÒÃÇÒª×öµÄ¾ÍÊÇÈÃÓû§Äܹ»ÔÙ´ÎÖ¸¶¨50¸öÁ¬½Ó£¬²¢ÇÒ½«Õâ50¸öÁ¬½Ó¼ÓÈ뵽ǰ50¸öÁ¬½ÓµÄºóÃæ¡£ËùÒÔ£¬ÔÚÉè¼ÆÊ±£¬Ã¿´Î½¨Á¢Ö¸¶¨ÊýÄ¿µÄÁ¬½Óǰ£¬±ØÐë²éѯ¶ÓÁеij¤¶È£¬È»ºó½«½¨Á¢µÄÁ¬½Ó¼ÓÈëµ½¶ÓÁÐÖÐÕýÈ·µÄλÖÃÉÏ¡£ÕýÈç"Óû§µÇ½"²Ëµ¥ÏìÓ¦º¯ÊýËùʾ£º ¡¡¡¡int size=s_info.GetSize();//²é¿´µ±Ç°Á¬½ÓÁ´±íµÄ³¤¶È ¡¡¡¡pInfo->id =size+i; //ÉèÖõ±Ç°Á¬½ÓµÄid ¡¡¡¡4.3ÿ´ÎÓû§Ö¸¶¨Ä³¸öÁ¬½Ó½øÐвâÊÔʱ£¬³ÌÐò¶¼Òª×Ô¶¯ËÑË÷Á¬½Ó¶ÓÁÐÕÒµ½Ö¸¶¨µÄÁ¬½Ó£¬²¢·¢ËÍÐÅÏ¢¡£ÎÊÌâÊÇ£¬ÎÒÃǵķ¢ËͺͽÓÊÕÊDz»Í¬µÄÏìÓ¦º¯Êý£¬ÈçºÎ±£Ö¤½ÓÊÕÐÅÏ¢µÄÁ¬½ÓÊÇÓû§Ö¸¶¨µÄÁ¬½ÓÄØ£¿ÀýÈ磬Óû§½¨Á¢ÁË100¸öÁ¬½Ó£¬Ö¸¶¨IdΪ59µÄÁ¬½Ó½øÐÐͨÐÅ£¬µ±·¢ËÍÊý¾Ýʱ£¬³ÌÐò×Ô¶¯ÕÒµ½Id£½59µÄsocket·¢ËÍÊý¾Ý£¬¿ÉÊÇ£¬µ±½ÓÊÕÊý¾Ýʱ£¬³ÌÐòÔõô֪µÀÊÇÄĸöÁ¬½Ó¸ºÔð½ÓÊÕÊý¾ÝÄØ£¿ÎÒÃÇ¿ÉÒÔÔÚ½ÓÊÕÏìÓ¦º¯ÊýÖÐÔٴβéÕÒ¶ÓÁУ¬µ«ÊÇ£¬ÕâÑù²»µ«Ôö¼ÓÁËϵͳ×ÊÔ´µÄÏûºÄ£¬¶øÇÒÔö¼ÓÁËϵͳµÄÑÓ³Ù¡£ÎÒÃDzÉÓÃÈ«¾Ö±äÁ¿lSocketÀ´½â¾öÕâ¸öÎÊÌâ¡£ ¡¡¡¡lSocket=info.s_client;//½«Óû§Ö¸¶¨µÄÁ¬½ÓµÄsocket¸³ÓèlSocket ¡¡¡¡lSocket->Send(m_strSendData,m_strSendData.GetLength());//·¢Îı¾¿òÖеÄÎı¾ ¡¡¡¡iRecv=lSocket->Receive(pBuf,100); ¡¡¡¡4.4ÿ´ÎÓû§Í˳ö³ÌÐò֮ǰ£¬±ØÐë¶Ï¿ªËùÓÐÁ¬½Ó£¬²¢Çå¿Õ¶ÓÁС£Èç"Í˳ö"²Ëµ¥ÏìÓ¦º¯ÊýËùʾ¡£ ¡¡¡¡5.½áÊøÓï ¡¡¡¡¾¹ýʵ¼ÊÑéÖ¤£¬¸Ã³ÌÐòÄܹ»ºÜºÃµÄ²âÊÔ·þÎñÆ÷µÄÁ¬½Ó³ÐÊÜÄÜÁ¦£¬´ÓÀíÂÛÉÏÀ´Ëµ£¬Óû§¿ÉÒÔÖ¸¶¨ÈÎÒâ¶àµÄÁ¬½Ó£¬Êµ¼ÊÉÏ£¬Á¬½ÓÊýÊܵ½¼ÆËã»ú×ÊÔ´µÄÏÞÖÆ¡£ÔÚͨÐŹý³ÌÖУ¬¸÷¸öÁ¬½ÓÄܹ»Á¼ºÃµÄ½øÐУ¬²»»á»¥Ïà¸ÉÈÅ¡£
|

















