2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  課程設(shè)計(jì)報(bào)告</b></p><p>  課程名稱(chēng): VC++課程設(shè)計(jì) </p><p>  設(shè)計(jì)題目: 聊天室程序設(shè)計(jì) </p><p>  院 系: 計(jì)算機(jī)科學(xué)與技術(shù)系 </p>

2、<p>  班 級(jí): </p><p>  設(shè) 計(jì) 者: </p><p>  學(xué) 號(hào): </p><p>  指導(dǎo)教師: </p><p>  設(shè)計(jì)時(shí)間: 2011.8.

3、25-----2011.9.7 </p><p>  《VC++課程設(shè)計(jì)》驗(yàn)收及成績(jī)?cè)u(píng)定表(項(xiàng)目組)</p><p><b>  課程設(shè)計(jì)任務(wù)書(shū)</b></p><p>  VC++課程設(shè)計(jì)報(bào)告</p><p><b>  軟硬件運(yùn)行環(huán)境:</b></p&

4、gt;<p>  Intel® Pentium® 2及以上處理器,32M以上內(nèi)存,4G以上硬盤(pán)</p><p>  Microsoft® Windows? XP操作系統(tǒng)及以上版本</p><p>  800*600或以上的屏幕分辨率</p><p><b>  開(kāi)發(fā)環(huán)境:</b></p>

5、<p>  Intel® CORE i5® 2.8 GHz,2內(nèi)存,320G硬盤(pán)</p><p>  Microsoft® Windows? XP Professional</p><p>  Microsoft® Visual C++ 6.0</p><p><b>  問(wèn)題及難點(diǎn)所在</b>

6、;</p><p><b>  要解決的問(wèn)題:</b></p><p>  如何與服務(wù)器端建立連接,如何接收服務(wù)器端發(fā)給客戶端的消息,相應(yīng)的處理這些消息。還有就是如何提取出服務(wù)器端發(fā)給客戶端的所有的客戶昵稱(chēng),然后更新客戶端的用戶列表。最后是一些按鈕的響應(yīng)函數(shù)的編寫(xiě)。</p><p><b>  涉及算法的思想</b><

7、;/p><p>  首先應(yīng)該明白,Windows窗口應(yīng)用程序是基于消息驅(qū)動(dòng)的,這應(yīng)該是貫穿整個(gè)過(guò)程的基本思想。</p><p>  其次跟據(jù)MFC程序的體系結(jié)構(gòu),和大體框架,清楚自己寫(xiě)的代碼應(yīng)該加在哪些地方。實(shí)際編程中善于將控件窗口與一個(gè)變量相聯(lián)系,可以很大的簡(jiǎn)化操作。特別要提到的是程序中更新用戶列表的方法,與服務(wù)器端的算法剛好相反,充分利用FOR循環(huán)并用IF判斷語(yǔ)句來(lái)提取信息。</p&

8、gt;<p><b>  系統(tǒng)的流程圖</b></p><p>  注:這個(gè)流程圖是在另一個(gè)文檔中畫(huà)的,完成后復(fù)制過(guò)來(lái)發(fā)現(xiàn)尺寸不是很好,顯示得很難看,所以采用了截圖的方法,清晰度不是很高,望老師體諒。</p><p><b>  系統(tǒng)的設(shè)計(jì)與分析</b></p><p><b>  第一個(gè)函數(shù):&l

9、t;/b></p><p>  void CLoginDlg::OnOK() //登陸窗口的登陸按鈕響應(yīng)函數(shù)。</p><p><b>  {</b></p><p>  UpdateData();//用來(lái)刷新數(shù)據(jù)的,如果參數(shù)為真,則刷新控件的值到對(duì)應(yīng)的變量,若為假,則方向相反。</p><p>  //m_pS

10、ocket->m_strName = this->m_strName;</p><p>  if(!m_pSocket->Create())//創(chuàng)建。</p><p><b>  {</b></p><p>  AfxMessageBox("網(wǎng)絡(luò)創(chuàng)建錯(cuò)誤!??!");</p><p>

11、  m_pSocket->Close();</p><p><b>  return;</b></p><p><b>  }</b></p><p>  if(!m_pSocket->Connect(m_strServer,9999))//連接,參數(shù)分別為服務(wù)器IP和端口號(hào)。</p><p

12、><b>  {</b></p><p>  AfxMessageBox("連接服務(wù)器失?。。?!");</p><p>  m_pSocket->Close();</p><p><b>  return;</b></p><p><b>  }</

13、b></p><p>  Header head;</p><p>  head.type = LOGIN_IO;</p><p>  head.len = m_strName.GetLength();</p><p>  m_pSocket->Send((char *)&head,sizeof(Header));//向服

14、務(wù)器端發(fā)送預(yù)備消息,告知消息類(lèi)型,準(zhǔn)備好接受數(shù)據(jù)。</p><p>  m_pSocket->Send(m_strName,m_strName.GetLength());//發(fā)送該客戶端的用戶昵稱(chēng)。</p><p>  theApp.m_strName = m_strName;//如果不加此行,用戶的昵稱(chēng)將無(wú)法顯示到聊天窗口</p><p>  CDialog

15、::OnOK();//調(diào)用基類(lèi)的ONOK函數(shù),MFC自動(dòng)調(diào)用的。</p><p><b>  }</b></p><p><b>  第二個(gè)函數(shù):</b></p><p>  void CClientSocket::OnReceive(int nErrorCode) //處理服務(wù)器端發(fā)送的消息</p><

16、;p><b>  {</b></p><p>  char buff[sizeof(Header)];</p><p>  memset(buff,0,sizeof(buff));</p><p>  Receive(buff,sizeof(buff));</p><p>  Header *header = (H

17、eader*)buff;//這里需要一個(gè)類(lèi)型的轉(zhuǎn)換。</p><p>  int length = header->len;</p><p>  char type = header->type;</p><p>  if(type == SEND_MESSAGE)</p><p><b>  {</b>&l

18、t;/p><p>  chatDlg->GetMessage();//定義一個(gè)CMyChatDlg *類(lèi)型的chatDlg變量作用就在此體現(xiàn)。</p><p><b>  }</b></p><p>  if(type == LOGIN_IO)//收到服務(wù)器告知的更新用戶的消息。</p><p><b>  

19、{</b></p><p>  chatDlg->UpdateUser();//調(diào)用CMyChatDlg類(lèi)中的UpdateUser方法。</p><p><b>  }</b></p><p>  CSocket::OnReceive(nErrorCode);</p><p><b>  

20、}</b></p><p><b>  第三個(gè)函數(shù):</b></p><p>  void CMyChatDlg::UpdateUser()//更新用戶列表。</p><p><b>  {</b></p><p>  char buff[1000];</p><p&

21、gt;  memset(buff,0,sizeof(buff));</p><p>  m_pSocket->Receive(buff, sizeof(buff),0);</p><p>  CString user_info = buff;</p><p>  CString array[100];//存放用戶名稱(chēng)</p><p>

22、  int b = 0;</p><p>  for( int i=0; i<user_info.GetLength(); i++ )//拆分服務(wù)器端發(fā)來(lái)的用戶名稱(chēng),并用ARRAY數(shù)組來(lái)存儲(chǔ)。</p><p><b>  {</b></p><p>  if(i != (user_info.GetLength() - 1))//判斷是否已

23、經(jīng)到達(dá)UER_INFO的尾端。</p><p><b>  {</b></p><p>  if ( user_info[i]=='&' )//判斷是否已經(jīng)到一個(gè)昵稱(chēng)的結(jié)尾。</p><p><b>  {</b></p><p>  b ++;//用戶加一</p>

24、;<p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  array[b] = array[b] + user_info[i];//將一個(gè)用戶名稱(chēng)拷貝到一個(gè)數(shù)組單元中。</p><p&g

25、t;<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  m_num.Format("%d", b+1);//將INT類(lèi)型的b轉(zhuǎn)換為CString類(lèi)型。</p><p>  UpdateD

26、ata(FALSE);//變量到控件。</p><p>  m_UserList.ResetContent();//置空列表框。</p><p>  for(int j=0; j<b+1; j++)</p><p><b>  {</b></p><p>  m_UserList.AddString(array[j

27、]);//將轉(zhuǎn)換好的用戶名稱(chēng)依次顯示出來(lái)。</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  第四個(gè)函數(shù):</b></p><p>  void CMyChatDlg::OnSend() //響應(yīng)發(fā)送按鈕的函數(shù)。<

28、/p><p><b>  {</b></p><p>  UpdateData();//控件的值—>變量</p><p>  if(m_strMessage == "")</p><p><b>  {</b></p><p>  AfxMessageB

29、ox("不能發(fā)送空消息?。。?quot;);</p><p>  CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT_MESSAGE);//得到該控件類(lèi)型的對(duì)象地址。</p><p>  pEdit->SetFocus();//調(diào)用成員函數(shù)設(shè)置焦點(diǎn)。</p><p><b>  return;</b&

30、gt;</p><p><b>  }</b></p><p>  Header head;</p><p>  head.type = SEND_MESSAGE;</p><p>  head.len = m_strMessage.GetLength();</p><p>  CTime tim

31、e = CTime::GetCurrentTime();//得到系統(tǒng)當(dāng)前時(shí)間。</p><p>  CString t = time.Format("%H:%M:%S");//設(shè)置時(shí)間格式。</p><p>  CString nikeName = theApp.m_strName;</p><p>  CString str =nikeName

32、+ " " + t + "\r\n" +m_strMessage;//把要發(fā)送的信息都存儲(chǔ)在這str變量中。</p><p>  m_pSocket->Send((char *)&head,sizeof(Header));//發(fā)送“頭信息”。</p><p>  // TODO: Add your control notifi

33、cation handler code here</p><p>  if(m_pSocket->Send((LPCTSTR)str, str.GetLength()))//發(fā)送用戶編輯的信息,并判斷Send函數(shù)的返回值。</p><p><b>  {</b></p><p>  m_strMessage = "";

34、</p><p>  UpdateData(FALSE);//變量—>控件的值</p><p>  CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT_MESSAGE);</p><p>  pEdit->SetFocus();</p><p><b>  }</b><

35、/p><p><b>  else</b></p><p><b>  {</b></p><p>  AfxMessageBox("網(wǎng)絡(luò)傳輸錯(cuò)誤!");</p><p><b>  }</b></p><p><b>  }&

36、lt;/b></p><p><b>  第五個(gè)函數(shù):</b></p><p>  BOOL CMyChatDlg::GetMessage()//由CClientSocket對(duì)象中的OnReceive方法調(diào)用。</p><p><b>  {</b></p><p>  char buff[1

37、000];//定義一個(gè)數(shù)組來(lái)接受消息。</p><p>  memset(buff,0,sizeof(buff));//將數(shù)組全部初始化為0。</p><p>  m_pSocket->Receive(buff, sizeof(buff),0);//接受消息。</p><p>  CString strTemp = buff;</p><

38、p>  strTemp += _T("\r\n");</p><p>  m_MessageList.ReplaceSel(strTemp);//用strTemp變量中的內(nèi)容替換消息顯示框控件的當(dāng)前區(qū)域。</p><p>  return TRUE;</p><p><b>  }</b></p><

39、;p>  運(yùn)行結(jié)果與分析(測(cè)試)</p><p><b>  打開(kāi)服務(wù)器并初始化</b></p><p><b>  一個(gè)用戶登陸服務(wù)器</b></p><p>  客戶端發(fā)送了一條消息</p><p><b>  第二個(gè)用戶登陸</b></p><p

40、><b>  兩個(gè)用戶之間聊天</b></p><p>  昵稱(chēng)為唐毅的用戶離開(kāi)聊天室</p><p>  昵稱(chēng)為煙灰缸的用戶離開(kāi)聊天室</p><p><b>  總結(jié)(收獲與體會(huì))</b></p><p><b>  附:源代碼</b></p><

41、p>  注:以下代碼包括了一點(diǎn)VC自動(dòng)幫我們生成的部分。</p><p><b>  客戶端源代碼:</b></p><p>  CMyChatApp類(lèi)中的InitInstance方法:</p><p>  BOOL CMyChatApp::InitInstance()//初始化實(shí)例。</p><p><b&

42、gt;  {</b></p><p>  if (!AfxSocketInit())//初始化WINSOCK環(huán)境,一旦選擇支持WINSOCKET類(lèi)則由MFC為我們自動(dòng)生成。</p><p><b>  {</b></p><p>  AfxMessageBox(IDP_SOCKETS_INIT_FAILED);</p>

43、<p>  return FALSE;</p><p><b>  }</b></p><p>  AfxEnableControlContainer();</p><p>  // Standard initialization</p><p>  // If you are not using these

44、 features and wish to reduce the size</p><p>  // of your final executable, you should remove from the following</p><p>  // the specific initialization routines you do not need.</p>&l

45、t;p>  #ifdef _AFXDLL</p><p>  Enable3dControls();// Call this when using MFC in a shared DLL</p><p><b>  #else</b></p><p>  Enable3dControlsStatic();// Call this

46、when linking to MFC statically</p><p><b>  #endif</b></p><p>  CClientSocket *clientSocket;</p><p>  clientSocket = new CClientSocket();//NEW一個(gè)CClientSocket對(duì)象,用來(lái)之后與服務(wù)器端建

47、立連接。</p><p>  CLoginDlg* loginDlg;</p><p>  loginDlg = new CLoginDlg(clientSocket);//NEW一個(gè)CLoginDlg對(duì)象。</p><p>  if(loginDlg->DoModal() == IDCANCEL)//顯示這個(gè)登陸窗口,并判斷返回值是否來(lái)IDCANCEL,如是

48、</p><p><b>  {</b></p><p>  delete clientSocket;</p><p>  delete loginDlg;//則delete這兩個(gè)對(duì)象。</p><p>  return false;//返回false后程序結(jié)束。</p><p><b

49、>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  delete loginDlg;//如果用戶點(diǎn)擊的是登陸按鈕,則會(huì)調(diào)用對(duì)應(yīng)的消息處理函數(shù),并delete這個(gè)登陸窗口對(duì)象。</p><p><b>

50、  }</b></p><p>  CMyChatDlg *dlg;</p><p>  dlg = new CMyChatDlg(clientSocket);</p><p>  m_pMainWnd = dlg;//m_pMainWnd是CWinThread(是CMyApp的基類(lèi))的一個(gè)成員變量,用于儲(chǔ)存一個(gè)指向我們創(chuàng)建的一個(gè)線程的主窗口的對(duì)象。&l

51、t;/p><p>  int nResponse = dlg->DoModal();//顯示客戶端主窗口,并接受函數(shù)的返回值。</p><p>  return FALSE;</p><p><b>  }</b></p><p>  在CMyChatApp類(lèi)中的成員變量:</p><p>  

52、CString m_strName;</p><p><b>  定義了一個(gè)結(jié)構(gòu)體:</b></p><p>  typedef struct tagHeader</p><p><b>  {</b></p><p>  chartype;</p><p>  int

53、len; </p><p>  } Header, *pHeader;</p><p>  #define LOGIN_IO1</p><p>  #define SEND_MESSAGE3</p><p>  客戶端套接字類(lèi)中的OnReceive成員函數(shù):</p><p>  void CClientSo

54、cket::OnReceive(int nErrorCode) </p><p><b>  {</b></p><p>  // TODO: Add your specialized code here and/or call the base class</p><p>  char buff[sizeof(Header)];</p&

55、gt;<p>  memset(buff,0,sizeof(buff));</p><p>  Receive(buff,sizeof(buff));</p><p>  Header *header = (Header*)buff;//這里需要一個(gè)類(lèi)型的轉(zhuǎn)換。</p><p>  int length = header->len;</p&

56、gt;<p>  char type = header->type;</p><p>  if(type == SEND_MESSAGE)</p><p><b>  {</b></p><p>  chatDlg->GetMessage();//定義一個(gè)CMyChatDlg *類(lèi)型的chatDlg變量作用就在此體現(xiàn)。

57、</p><p><b>  }</b></p><p>  if(type == LOGIN_IO)//收到服務(wù)器告知的更新用戶的消息。</p><p><b>  {</b></p><p>  chatDlg->UpdateUser();//調(diào)用CMyChatDlg類(lèi)中的UpdateU

58、ser方法。</p><p><b>  }</b></p><p>  CSocket::OnReceive(nErrorCode);</p><p><b>  }</b></p><p>  在這個(gè)類(lèi)中還定義了兩個(gè)公有的成員變量:</p><p>  CMyChatD

59、lg *chatDlg;//用來(lái)調(diào)用主窗口中的GetMessage和UpdateUser方法。</p><p>  CString m_strName;//存放該客戶端的昵稱(chēng)。</p><p>  登陸窗口類(lèi)的構(gòu)造函數(shù):</p><p>  CLoginDlg::CLoginDlg(CClientSocket *p_Socket, CWnd* pParent /*=

60、NULL*/)//創(chuàng)建它的對(duì)象的時(shí)候需要傳遞它一個(gè)CClientSocket對(duì)象</p><p>  : CDialog(CLoginDlg::IDD, pParent)//的地址,用來(lái)建立連接。</p><p><b>  {</b></p><p>  ASSERT(p_Socket);//斷言assert是一個(gè)宏,一般可以用在判斷某件操作

61、是否成功上。</p><p>  m_pSocket = p_Socket;//提取傳遞進(jìn)來(lái)的參數(shù)。</p><p>  //{{AFX_DATA_INIT(CLoginDlg)</p><p>  m_strName = _T("");</p><p>  m_strServer = _T("127.0.0.1

62、");//_T是一個(gè)宏,這里的作用相當(dāng)于初始化了這兩個(gè)控件的值。</p><p>  //}}AFX_DATA_INIT</p><p><b>  }</b></p><p>  登陸窗口的確定按鈕響應(yīng)函數(shù):</p><p>  void CLoginDlg::OnOK() </p><p

63、><b>  {</b></p><p>  // TODO: Add extra validation here</p><p>  UpdateData();//用來(lái)刷新數(shù)據(jù)的,如果參數(shù)為真,則刷新控件的值到對(duì)應(yīng)的變量,若為假,則方向相反。</p><p>  //m_pSocket->m_strName = this->

64、;m_strName;</p><p>  if(!m_pSocket->Create())//創(chuàng)建。</p><p><b>  {</b></p><p>  AfxMessageBox("網(wǎng)絡(luò)創(chuàng)建錯(cuò)誤?。?!");</p><p>  m_pSocket->Close();</p

65、><p><b>  return;</b></p><p><b>  }</b></p><p>  if(!m_pSocket->Connect(m_strServer,9999))//連接,參數(shù)分別為服務(wù)器IP和端口號(hào)。</p><p><b>  {</b><

66、/p><p>  AfxMessageBox("連接服務(wù)器失?。。?!");</p><p>  m_pSocket->Close();</p><p><b>  return;</b></p><p><b>  }</b></p><p>  He

67、ader head;</p><p>  head.type = LOGIN_IO;</p><p>  head.len = m_strName.GetLength();</p><p>  m_pSocket->Send((char *)&head,sizeof(Header));//向服務(wù)器端發(fā)送預(yù)備消息,告知消息類(lèi)型,準(zhǔn)備好接受數(shù)據(jù)。</

68、p><p>  m_pSocket->Send(m_strName,m_strName.GetLength());//發(fā)送該客戶端的用戶昵稱(chēng)。</p><p>  theApp.m_strName = m_strName;//如果不加此行,用戶的昵稱(chēng)將無(wú)法顯示到聊天窗口</p><p>  CDialog::OnOK();//調(diào)用基類(lèi)的ONOK函數(shù),MFC自動(dòng)調(diào)用

69、的。</p><p><b>  }</b></p><p>  登陸窗口類(lèi)中的成員變量有:</p><p>  CClientSocket *m_pSocket;</p><p>  CStringm_strName;</p><p>  CStringm_strServer;</p&

70、gt;<p>  重載了一個(gè)CMyChatDlg類(lèi)的構(gòu)造函數(shù):</p><p>  CMyChatDlg::CMyChatDlg(CClientSocket *p_Socket,CWnd* pParent /*=NULL*/)//需要傳遞已經(jīng)和服務(wù)器建立連接的CClientSocket對(duì)象</p><p>  : CDialog(CMyChatDlg::IDD, pParen

71、t)//CClientSocket始終是一個(gè)主線,整個(gè)流程都要用到它,因此必需傳遞它。</p><p><b>  {</b></p><p>  m_pSocket = p_Socket;//提取傳遞的參數(shù)。</p><p>  m_pSocket->chatDlg = this;//將本窗口的對(duì)象地址賦值給m_pSocket中的成員變

72、量chatDlg。</p><p>  //{{AFX_DATA_INIT(CMyChatDlg)</p><p>  m_strMessage = _T("");//初始化控件值。</p><p>  m_num = _T("");</p><p>  //}}AFX_DATA_INIT</p&

73、gt;<p>  // Note that LoadIcon does not require a subsequent DestroyIcon in Win32</p><p>  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);//讀取圖標(biāo)。</p><p><b>  }</b></p>

74、;<p>  DoDataExchange函數(shù),完成了控件與變量的關(guān)聯(lián)(前幾個(gè)類(lèi)中也有該函數(shù)):</p><p>  void CMyChatDlg::DoDataExchange(CDataExchange* pDX)</p><p><b>  {</b></p><p>  CDialog::DoDataExchange(p

75、DX);</p><p>  //{{AFX_DATA_MAP(CMyChatDlg)</p><p>  DDX_Control(pDX, IDC_LIST_USER, m_UserList);</p><p>  DDX_Control(pDX, IDC_EDIT_LIST, m_MessageList);</p><p>  DDX_T

76、ext(pDX, IDC_EDIT_MESSAGE, m_strMessage);</p><p>  DDX_Text(pDX, IDC_STATIC_NUM, m_num);</p><p>  //}}AFX_DATA_MAP</p><p><b>  }</b></p><p><b>  消息映射宏

77、:</b></p><p>  EGIN_MESSAGE_MAP(CMyChatDlg, CDialog)</p><p>  //{{AFX_MSG_MAP(CMyChatDlg)</p><p>  ON_WM_SYSCOMMAND()</p><p>  ON_WM_PAINT()</p><p> 

78、 ON_WM_QUERYDRAGICON()</p><p>  ON_BN_CLICKED(ID_SEND, OnSend)</p><p>  //}}AFX_MSG_MAP</p><p>  END_MESSAGE_MAP()</p><p>  CMyChatDlg類(lèi)中的OnSend方法:</p><p> 

79、 void CMyChatDlg::OnSend() //響應(yīng)發(fā)送按鈕的函數(shù)。</p><p><b>  {</b></p><p>  UpdateData();//控件的值—>變量</p><p>  if(m_strMessage == "")</p><p><b>  {&

80、lt;/b></p><p>  AfxMessageBox("不能發(fā)送空消息?。。?quot;);</p><p>  CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT_MESSAGE);//得到該控件類(lèi)型的對(duì)象地址。</p><p>  pEdit->SetFocus();//調(diào)用成員函數(shù)設(shè)置焦點(diǎn)。<

81、;/p><p><b>  return;</b></p><p><b>  }</b></p><p>  Header head;</p><p>  head.type = SEND_MESSAGE;</p><p>  head.len = m_strMessage.G

82、etLength();</p><p>  CTime time = CTime::GetCurrentTime();//得到系統(tǒng)當(dāng)前時(shí)間。</p><p>  CString t = time.Format("%H:%M:%S");//設(shè)置時(shí)間格式。</p><p>  CString nikeName = theApp.m_strName;&

83、lt;/p><p>  CString str =nikeName+ " " + t + "\r\n" +m_strMessage;//把要發(fā)送的信息都存儲(chǔ)在這str變量中。</p><p>  m_pSocket->Send((char *)&head,sizeof(Header));//發(fā)送“頭信息”。</p>

84、<p>  // TODO: Add your control notification handler code here</p><p>  if(m_pSocket->Send((LPCTSTR)str, str.GetLength()))//發(fā)送用戶編輯的信息,并判斷Send函數(shù)的返回值。</p><p><b>  {</b></p&g

85、t;<p>  m_strMessage = "";</p><p>  UpdateData(FALSE);//變量—>控件的值</p><p>  CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT_MESSAGE);</p><p>  pEdit->SetFocus();<

86、/p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  AfxMessageBox("網(wǎng)絡(luò)傳輸錯(cuò)誤!");</p><p><b>  }&

87、lt;/b></p><p><b>  }</b></p><p>  CMyChatDlg類(lèi)中的OnCancel方法:</p><p>  void CMyChatDlg::OnCancel()//響應(yīng)退出鍵。 </p><p><b>  {</b></p><p&g

88、t;  // TODO: Add extra cleanup here</p><p>  if(m_pSocket)</p><p><b>  {</b></p><p>  m_pSocket->Close();//關(guān)閉連接。</p><p>  delete m_pSocket;</p>&l

89、t;p><b>  }</b></p><p>  CDialog::OnCancel();</p><p><b>  }</b></p><p>  CMyChatDlg類(lèi)中的GetMessage方法:</p><p>  BOOL CMyChatDlg::GetMessage()//由C

90、ClientSocket對(duì)象中的OnReceive方法調(diào)用。</p><p><b>  {</b></p><p>  char buff[1000];//定義一個(gè)數(shù)組來(lái)接受消息。</p><p>  memset(buff,0,sizeof(buff));//將數(shù)組全部初始化為0。</p><p>  m_pSock

91、et->Receive(buff, sizeof(buff),0);//接受消息。</p><p>  CString strTemp = buff;</p><p>  strTemp += _T("\r\n");</p><p>  m_MessageList.ReplaceSel(strTemp);//用strTemp變量中的內(nèi)容替

92、換消息顯示框控件的當(dāng)前區(qū)域。</p><p>  return TRUE;</p><p><b>  }</b></p><p>  CMyChatDlg類(lèi)中的UpdateUser方法:</p><p>  oid CMyChatDlg::UpdateUser()</p><p><b&g

93、t;  {</b></p><p>  char buff[1000];</p><p>  memset(buff,0,sizeof(buff));</p><p>  m_pSocket->Receive(buff, sizeof(buff),0);</p><p>  CString user_info = buff

94、;</p><p>  CString array[100];//存放用戶名稱(chēng)</p><p>  int b = 0;</p><p>  for( int i=0; i<user_info.GetLength(); i++ )//拆分服務(wù)器端發(fā)來(lái)的用戶名稱(chēng),并用ARRAY數(shù)組來(lái)存儲(chǔ)。</p><p><b>  {<

95、/b></p><p>  if(i != (user_info.GetLength() - 1))//判斷是否已經(jīng)到達(dá)UER_INFO的尾端。</p><p><b>  {</b></p><p>  if ( user_info[i]=='&' )//判斷是否已經(jīng)到一個(gè)昵稱(chēng)的結(jié)尾。</p>&l

96、t;p><b>  {</b></p><p>  b ++;//用戶加一</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  ar

97、ray[b] = array[b] + user_info[i];//將一個(gè)用戶名稱(chēng)拷貝到一個(gè)數(shù)組單元中。</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  m_num.Format(&q

98、uot;%d", b+1);//將INT類(lèi)型的b轉(zhuǎn)換為CString類(lèi)型。</p><p>  UpdateData(FALSE);//變量到控件。</p><p>  m_UserList.ResetContent();//置空列表框。</p><p>  for(int j=0; j<b+1; j++)</p><p>&

99、lt;b>  {</b></p><p>  m_UserList.AddString(array[j]);//將轉(zhuǎn)換好的用戶名稱(chēng)依次顯示出來(lái)。</p><p><b>  }</b></p><p><b>  }</b></p><p>  以上就是客戶端的源代碼。</p

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論