Ê×Ò³ ¡ñ ÐÂÎÅ ¡ñ ÌåÓý ¡ñ ÓéÀÖ ¡ñ ÓÎÏ· ¡ñ ÓÊÏä ¡ñ ËÑË÷ ¡ñ ¶ÌÐÅ ¡ñ ÁÄÌì ¡ñ µã¿¨ ¡ñ ÌìÆø ¡ñ ´ðÒÉ ¡ñ ½»ÓÑ ¡ñ µ¼º½
ÐÂÀËÊ×Ò³ > ¿Æ¼¼Ê±´ú > ѧ԰ > ¿ª·¢ÕßÀÖÔ° > ÕýÎÄ

dz̸»ùÓÚ.NETµÄ¶àÓû§¿Í»§¶ËÉè¼Æ(2)

http://www.sina.com.cn 2004Äê04ÔÂ06ÈÕ 10:18 Ìì¼«Íø

¡¡¡¡ÎÄ/ÓÚ²ÊÈÙ ÖìÕý³¬

¡¡¡¡3.¾ßÌå´úÂë:

¡¡¡¡3.1ÉùÃ÷È«¾Ö±äÁ¿

¡¡¡¡struct socket_info {¡­¡­} ; //ÈçǰËùʾ

¡¡¡¡extern CList s_info; //Á´±íÀà

¡¡¡¡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.½áÊøÓï

¡¡¡¡¾­¹ýʵ¼ÊÑéÖ¤£¬¸Ã³ÌÐòÄܹ»ºÜºÃµÄ²âÊÔ·þÎñÆ÷µÄÁ¬½Ó³ÐÊÜÄÜÁ¦£¬´ÓÀíÂÛÉÏÀ´Ëµ£¬Óû§¿ÉÒÔÖ¸¶¨ÈÎÒâ¶àµÄÁ¬½Ó£¬Êµ¼ÊÉÏ£¬Á¬½ÓÊýÊܵ½¼ÆËã»ú×ÊÔ´µÄÏÞÖÆ¡£ÔÚͨÐŹý³ÌÖУ¬¸÷¸öÁ¬½ÓÄܹ»Á¼ºÃµÄ½øÐУ¬²»»á»¥Ïà¸ÉÈÅ¡£

<< ÉÏÒ»Ò³

¡¾ÆÀÂÛ¡¿¡¾Ó¦ÓÃÈí¼þÂÛ̳¡¿¡¾ÍƼö¡¿¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿¡¾¹Ø±Õ¡¿
 

¡¡
РÎÅ ²é ѯ
¹Ø¼ü´ÊÒ»
¹Ø¼ü´Ê¶þ
¡¡

¡¡·¢±íÆÀÂÛ£º¡¡ÄäÃû·¢±í¡¡ÐÂÀË»áÔ±´úºÅ: ¡¡ÃÜÂë:
¡¡



¿Æ¼¼Ê±´úÒâ¼û·´À¡ÁôÑÔ°å¡¡µç»°£º010-82628888-5488¡¡¡¡¡¡»¶Ó­ÅúÆÀÖ¸Õý

ÐÂÀ˼ò½é | About Sina | ¹ã¸æ·þÎñ | ÁªÏµÎÒÃÇ | ÕÐÆ¸ÐÅÏ¢ | ÍøÕ¾ÂÉʦ | SINA English | »áÔ±×¢²á | ²úÆ·´ðÒÉ

Copyright © 1996 - 2004 SINA Inc. All Rights Reserved

°æÈ¨ËùÓС¡ÐÂÀËÍø