mfc課程設(shè)計(jì)報(bào)告---聊天室程序設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  MFC課程設(shè)計(jì)報(bào)告</b></p><p>  題 目 聊天室程序設(shè)計(jì) </p><p>  學(xué) 號(hào) </p><p>  專(zhuān) 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) </p><p>  授課班號(hào) <

2、;/p><p>  學(xué)生姓名 </p><p>  指導(dǎo)教師 </p><p>  完成時(shí)間 2008.12.30 </p><p>  題目:設(shè)計(jì)一個(gè)聊天室系統(tǒng),實(shí)現(xiàn)多人一起聊天。</p><p><b>  引言<

3、/b></p><p><b>  1.1開(kāi)發(fā)背景</b></p><p>  隨著網(wǎng)絡(luò)信息時(shí)代的來(lái)臨,INTERNET應(yīng)用越來(lái)越廣泛,人們?cè)絹?lái)越習(xí)慣于在網(wǎng)上獲取和交流信息。據(jù)調(diào)查顯示,80%以上的人上網(wǎng)都會(huì)打開(kāi)聊天工具來(lái)聊天,而幾乎每一個(gè)年輕人都會(huì)去聊天。使用網(wǎng)上聊天已經(jīng)成為現(xiàn)代年輕人一種新的交往方式。聊天室更適合于陌生人之間進(jìn)行較為主觀(guān)、感興化的討論。所以有

4、大部分的人會(huì)進(jìn)入聊天室聊天,它會(huì)給人一個(gè)完全自由的聊天世界。因此我聯(lián)系所學(xué)的MFC知識(shí),決定做一個(gè)簡(jiǎn)易的聊天室程序。</p><p>  1.2開(kāi)發(fā)環(huán)境以及運(yùn)行環(huán)境</p><p>  1.2.1 開(kāi)發(fā)環(huán)境</p><p>  Intel® Pentium® 4 2.0GHz,512M內(nèi)存,80G硬盤(pán)</p><p>  

5、Microsoft® Windows? XP Professional</p><p>  Microsoft® Visual C++ 6.0</p><p>  1.2.2 運(yùn)行環(huán)境</p><p>  Intel® Pentium® 2及以上處理器,32M以上內(nèi)存,4G以上硬盤(pán)</p><p>  

6、Microsoft® Windows? XP操作系統(tǒng)</p><p>  800*600或以上的屏幕分辨率</p><p><b>  二.需求分析</b></p><p>  用WINSOCK實(shí)現(xiàn)簡(jiǎn)單的網(wǎng)絡(luò)聊天;</p><p>  在MFC開(kāi)發(fā)平臺(tái)上編寫(xiě)一個(gè)聊天系統(tǒng); </p><p&g

7、t;  得server和client之間可以相互通信; </p><p>  多人能夠發(fā)送信息至服務(wù)器,首先顯示進(jìn)入聊天室的成員名,然后顯示對(duì)方名字和聊天信息,可以并發(fā)執(zhí)行。</p><p><b>  三、算法分析</b></p><p>  建立連接過(guò)程流程圖如下:</p><p><b>  四、詳細(xì)設(shè)計(jì)

8、</b></p><p>  程序個(gè)模塊代碼如下:</p><p><b>  1.客戶(hù)端</b></p><p>  (1)通過(guò)AppWizard生成基于對(duì)話(huà)框的應(yīng)用程序ChatClient,在向?qū)У牡诙竭x擇WindowsSockets的支持,其余步驟均用默認(rèn)值。</p><p> ?。?)增加一個(gè)登錄服

9、務(wù)器的對(duì)話(huà)框資源,其ID為IDD_SETUP,然后通過(guò)ClassWizard生成對(duì)應(yīng)的基于CDialog的類(lèi)CSetupDlg。</p><p> ?。?)給對(duì)話(huà)框CSetupDlg增加3個(gè)編輯框,用來(lái)輸入登錄信息(聊天代號(hào)、服務(wù)器地址以及服務(wù)器端口號(hào)),</p><p> ?。?)通過(guò)ClassWizard生成對(duì)應(yīng)的基于CSocket的類(lèi)CChatSocket。</p>&

10、lt;p>  (5)給CChatSocket類(lèi)聲明一個(gè)主對(duì)話(huà)框CChatClientDlg指針類(lèi)型的私有成員變量,其代碼如下:</p><p>  protected:</p><p>  CChatClientDlg* m_pDlg;</p><p>  并且在ChatSocket類(lèi)的頭文件開(kāi)始處增加如下代碼:</p><p>  c

11、lass CChatClientDlg; //主對(duì)話(huà)框類(lèi)</p><p>  (6)給ChatSocket類(lèi)重載一個(gè)構(gòu)造函數(shù),其定義如下:</p><p>  CChatSocket::CChatSocket(CChatClientDlg* pDlg)</p><p><b>  {</b></p><p>  m_p

12、Dlg = pDlg;</p><p><b>  }</b></p><p>  并且在ChatSocket類(lèi)的CPP文件開(kāi)始處增加如下語(yǔ)句:</p><p>  #include "ChatClientDlg.h"</p><p> ?。?)通過(guò)ClassWizard響應(yīng)類(lèi)的ChatSocket的

13、OnReceive函數(shù),表示可以接收數(shù)據(jù)了,其代碼如下:</p><p>  //通知客戶(hù)端可以接受數(shù)據(jù)</p><p>  void CChatSocket::OnReceive(int nErrorCode) {</p><p>  CSocket::OnReceive(nErrorCode);</p><p>  if(m_pDlg)

14、{</p><p>  PlaySound("F:\msg.wav",NULL,SND_ASYNC|SND_NODEFAULT);</p><p>  m_pDlg->ProcessPendingRead();</p><p><b>  }</b></p><p><b>  }

15、</b></p><p>  (8)在主對(duì)話(huà)框ChatClientDlg的頭文件中定義ChatSocket指針類(lèi)型的私有成員變量,其代碼如下:</p><p>  CChatSocket* m_pSocket;</p><p>  并且在CChatClientDlg類(lèi)的頭文件開(kāi)始處增加如下代碼:</p><p>  class C

16、ChatSocket;//基于CSocket的新類(lèi)CChatSocket</p><p> ?。?)給對(duì)話(huà)框CChatClientDlg增加處理接收數(shù)據(jù)的共有成員函數(shù)ProcessPendingRead,其定義如下:</p><p>  void CChatClientDlg::ProcessPendingRead()//處理接收的數(shù)據(jù){</p><p><b

17、>  //定義緩沖區(qū)</b></p><p>  char buffer[BUFFER_SIZE];</p><p><b>  //接收數(shù)據(jù)</b></p><p>  int nReceived = m_pSocket->Receive(buffer,BUFFER_SIZE,0);</p><p&

18、gt;  buffer[nReceived] = 0;</p><p>  //將數(shù)據(jù)在列表框中顯示出來(lái)</p><p>  CString str;</p><p>  str.Format("%s",buffer);</p><p>  m_ctrlMsgs.AddString(str);</p>&l

19、t;p><b>  }</b></p><p> ?。?0)給對(duì)話(huà)框CChatClientDlg增加發(fā)送數(shù)據(jù)的私有成員函數(shù)SendMsg:</p><p>  //發(fā)送數(shù)據(jù)到服務(wù)器</p><p>  void CChatClientDlg::SendMsg(CString strMsg){</p><p>  C

20、String str;</p><p>  str.Format("%s:%s",m_strClientName,strMsg);</p><p>  m_pSocket->Send(str.GetBuffer(0),str.GetLength(),0);</p><p><b>  }</b></p>

21、<p>  并且在CChatClientDlg類(lèi)的頭文件開(kāi)始處定義緩沖區(qū)的大小,其代碼如下:</p><p>  #defineBUFFER_SIZE200</p><p> ?。?1)給對(duì)話(huà)框CChatClientDlg增加表示聊天代號(hào)的CString類(lèi)型私有成員變量m_strClientName。</p><p> ?。?2)在對(duì)話(huà)框CChatC

22、lientDlg的OnInitialUpdate函數(shù)中增加登錄服務(wù)器的代碼:</p><p>  BOOL CChatClientDlg::OnInitDialog()//登錄服務(wù)器{</p><p>  CDialog::OnInitDialog();</p><p>  ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOU

23、TBOX);</p><p>  ASSERT(IDM_ABOUTBOX < 0xF000);</p><p>  CMenu* pSysMenu = GetSystemMenu(FALSE);</p><p>  if (pSysMenu != NULL) {</p><p>  CString strAboutMen

24、u;</p><p>  strAboutMenu.LoadString(IDS_ABOUTBOX);</p><p>  if (!strAboutMenu.IsEmpty()) {</p><p>  pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendM

25、enu(MF_STRING,IDM_ABOUTBOX, strAboutMenu);</p><p><b>  }</b></p><p><b>  }</b></p><p>  SetIcon(m_hIcon, TRUE);// Set big icon</p><p>  SetIc

26、on(m_hIcon, FALSE);// Set small icon </p><p><b>  //顯示登錄對(duì)話(huà)框</b></p><p>  CSetupDlg dlg;</p><p>  if(dlg.DoModal()==IDOK) {</p><p>  //創(chuàng)建一個(gè)新的Socket&

27、lt;/p><p>  m_pSocket = new CChatSocket(this);</p><p>  if (!m_pSocket->Create()) {</p><p>  delete m_pSocket;</p><p>  m_pSocket = NULL;</p><p> 

28、 AfxMessageBox("create socket failed");</p><p>  return FALSE;</p><p><b>  }</b></p><p><b>  //連接服務(wù)器</b></p><p>  while (!m_pSocket-

29、>Connect(dlg.m_strServer,dlg.m_nPort + 700)) {</p><p>  if (AfxMessageBox("Failed to connect to server\nTry again?",MB_YESNO) == IDNO) {</p><p>  delete m_pSocket;</p>

30、<p>  m_pSocket = NULL;</p><p>  return FALSE;</p><p><b>  }</b></p><p><b>  }</b></p><p>  m_strClientName = dlg.m_strName;</p>&

31、lt;p><b>  }</b></p><p><b>  else</b></p><p>  return FALSE;</p><p>  //發(fā)送登錄消息給服務(wù)器</p><p>  SendMsg("進(jìn)入聊天室");</p><p> 

32、 return TRUE; // return TRUE unless you set the focus to a control</p><p><b>  }</b></p><p> ?。?3)給主對(duì)話(huà)框CChatClientDlg增加一個(gè)CListBox類(lèi)型的變量m_strMsg。</p><p>  (14)給住對(duì)話(huà)框CChat

33、ClientDlg增加一個(gè)輸入發(fā)送信息的編輯框,并生成對(duì)應(yīng)的CString類(lèi)型的變量m_strMsg。</p><p> ?。?5)給主對(duì)話(huà)框CChatClientDlg增加一個(gè)【send】按鈕,其響應(yīng)函數(shù)定義如下:</p><p>  void CChatClientDlg::OnSend() //響應(yīng)控件send{</p><p>  UpdateData(TR

34、UE); </p><p>  SendMsg(m_strMsg);</p><p>  m_strMsg.Empty();////清空編輯區(qū)</p><p>  UpdateData(FALSE);</p><p><b>  } </b></p><p> ?。?6)給主對(duì)話(huà)框增添一個(gè)【離開(kāi)】

35、按鈕,其響應(yīng)函數(shù)定義如下:</p><p>  void CChatClientDlg::leave()//離開(kāi){</p><p>  SendMsg("離開(kāi)聊天室");</p><p>  m_ctrlMsgs.AddString("離開(kāi)狀態(tài)");</p><p>  m_pSocket->Cl

36、ose();</p><p><b>  }</b></p><p> ?。?7)給主對(duì)話(huà)框增添一個(gè)【連接】按鈕,其響應(yīng)函數(shù)如下:</p><p>  void CChatClientDlg::land()//連接{</p><p>  OnInitDialog();</p><p><b&

37、gt;  }</b></p><p><b>  2.服務(wù)器端</b></p><p> ?。?)通過(guò)AppWizard生成基于對(duì)話(huà)框的應(yīng)用程序ChatServer,在向?qū)У牡诙竭x擇WindowsSockets的支持,其余步驟均用默認(rèn)值。</p><p>  (2)增加一個(gè)登錄服務(wù)器的對(duì)話(huà)框資源,其ID為IDD_INT,然后通過(guò)C

38、lassWizard生成對(duì)應(yīng)的基于CDialog的類(lèi)CInitDlg。</p><p> ?。?)給對(duì)話(huà)框CInitDlg增加1個(gè)輸入端口號(hào)的編輯框,并生成對(duì)應(yīng)的整形變量m_nPort。</p><p> ?。?)通過(guò)ClassWizard生成對(duì)應(yīng)的基于CSocket的類(lèi)CListeningSocket,用來(lái)監(jiān)聽(tīng)服務(wù)器。</p><p> ?。?)給CListeni

39、ngSocket類(lèi)聲明一個(gè)主對(duì)話(huà)框CChatServerDlg指針類(lèi)型的私有成員變量,其代碼如下:</p><p>  protected:</p><p>  CChatServerDlg* m_pDlg;</p><p>  并且在CListeningSocket類(lèi)的頭文件開(kāi)始處增加如下代碼:</p><p>  class CChatS

40、erverDlg; //主對(duì)話(huà)框類(lèi)</p><p>  (6)給ChatSocket類(lèi)重載一個(gè)構(gòu)造函數(shù),其定義如下:</p><p>  CChatSocket::CClientSocket(CChatServerDlg* pDlg)</p><p>  { m_pDlg = pDlg; }</p><p>  并且在CListe

41、ningSocket類(lèi)的CPP文件開(kāi)始處增加如下語(yǔ)句:</p><p>  #include "ChatServerDlg.h"</p><p> ?。?)通過(guò)ClassWizard響應(yīng)類(lèi)的CListeningSocket的OnAccept函數(shù),表示客戶(hù)端連接,其代碼如下:</p><p>  void CListeningSocket::OnA

42、ccept(int nErrorCode) </p><p>  //通知服務(wù)器,有客戶(hù)端需要連接服務(wù)器</p><p>  { CSocket::OnAccept(nErrorCode);</p><p>  //主對(duì)話(huà)框處理連接信息</p><p>  if(m_pDlg)</p><p>  m_pDlg-&

43、gt;ProcessPendingAccept();</p><p><b>  }</b></p><p>  (8)通過(guò)ClassWizard生成基于CSocket的新類(lèi)CClientSocket,用來(lái)與客戶(hù)端通信。</p><p> ?。?)給CClientSocket類(lèi)聲明一個(gè)主對(duì)話(huà)框CChatServerDlg指針類(lèi)型的私有成員變量,

44、其代碼如下:</p><p>  protected:</p><p>  CChatServerDlg* m_pDlg;</p><p>  并且在CClientSocket類(lèi)的頭文件開(kāi)始處增加如下語(yǔ)句:</p><p>  class CChatServerDlg;</p><p> ?。?0)給CClientSo

45、cket類(lèi)重載一個(gè)構(gòu)造函數(shù),其定義如下:</p><p>  CClientSocket::CClientSocket(CChatServerDlg* pDlg){</p><p>  m_pDlg = pDlg;</p><p><b>  }</b></p><p>  并且在CClientSocket類(lèi)的CPP文件

46、開(kāi)始處增加如下語(yǔ)句:</p><p>  #include "ChatServerDlg.h"</p><p> ?。?1)通過(guò)ClassWizard響應(yīng)類(lèi)的CClientSocket的OnReceive函數(shù),表示數(shù)據(jù)已到達(dá),其代碼如下:</p><p>  void CClientSocket::OnReceive(int nErrorCode

47、)</p><p>  //通知服務(wù)器可以接受數(shù)據(jù)</p><p>  { CSocket::OnReceive(nErrorCode);</p><p>  if(m_pDlg)</p><p>  { //讓主對(duì)話(huà)框處理數(shù)據(jù)</p><p>  m_pDlg->ProcessPendingRead(th

48、is);</p><p><b>  }</b></p><p><b>  } </b></p><p> ?。?2)在主對(duì)話(huà)框CChatServerDlg的頭文件那個(gè)增加兩個(gè)私有成員變量,其代碼如下:</p><p>  CListeningSocket* m_pSocket;//監(jiān)聽(tīng)套節(jié)字

49、</p><p>  CPtrList m_connectionList;//客戶(hù)端套節(jié)字鏈表</p><p>  并且在CChatSvrDlg的頭文件開(kāi)始處增加如下代碼:</p><p>  class CListeningSocket;</p><p>  class CClientSocket;</p><p&

50、gt; ?。?3)給主對(duì)話(huà)框CChatSvrDlg增加處理客戶(hù)端連接信息的私有成員變量ProcessPendingAccept,其定義如下:</p><p>  void CChatServerDlg::ProcessPendingAccept() {</p><p>  //生成一個(gè)新的套節(jié)字與客戶(hù)端通訊</p><p>  CClientSocket* pSoc

51、ket = new CClientSocket(this);</p><p>  if (m_pSocket->Accept(*pSocket)) {</p><p>  //將該套節(jié)字保存起來(lái)</p><p>  m_connectionList.AddTail(pSocket);</p><p><b>

52、  }</b></p><p><b>  else</b></p><p>  delete pSocket;</p><p><b>  }</b></p><p> ?。?4)給主對(duì)話(huà)框CChatSvrDlg增加更新所有客戶(hù)端的私有成員函數(shù)UpdateClient,其定義如下:&l

53、t;/p><p>  void CChatServerDlg::UpdateClients(char* buffer,int nBufferSize)</p><p><b>  {</b></p><p>  for(POSITION pos = m_connectionList.GetHeadPosition();</p><

54、;p>  pos != NULL;)</p><p><b>  {</b></p><p>  //將新信息發(fā)送給每個(gè)客戶(hù)端</p><p>  CClientSocket* pSocket= (CClientSocket*)m_connectionList.GetNext(pos);</p><p>  if

55、(buffer != NULL)</p><p>  pSocket->Send(buffer,nBufferSize,0);</p><p><b>  }</b></p><p><b>  }</b></p><p>  (15)給主對(duì)話(huà)框CChatSvrDlg增加接受數(shù)據(jù)的私有成Pro

56、cessPendingRe,</p><p><b>  其定義如下:</b></p><p>  void CChatServerDlg::ProcessPendingRead(CClientSocket* pSocket)</p><p><b>  {</b></p><p><b>

57、;  //定義緩沖區(qū)</b></p><p>  char buffer[BUFFER_SIZE];</p><p><b>  //接收數(shù)據(jù)</b></p><p>  int nReceived = pSocket->Receive(buffer,BUFFER_SIZE,0);</p><p>  

58、buffer[nReceived] = 0;</p><p>  //將數(shù)據(jù)在列表框中顯示出來(lái)</p><p>  m_ctrlMsgs.AddString(buffer);</p><p>  //將數(shù)據(jù)發(fā)送給每個(gè)客戶(hù)</p><p>  UpdateClients(buffer,nReceived);</p><p&g

59、t;<b>  }</b></p><p>  并且在CChatSvrDlg類(lèi)的頭文件開(kāi)始處定義緩沖區(qū)的大小,其代碼如下:</p><p>  #define BUFFER_SIZE200</p><p> ?。?6)給主對(duì)話(huà)框CChatSvrDlg的OnInitialUpdate函數(shù)中顯示初始化對(duì)話(huà)框,其定義如下:</p>

60、<p>  BOOL CChatServerDlg::OnInitDialog()</p><p><b>  {</b></p><p>  CDialog::OnInitDialog();</p><p>  ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);</p>

61、;<p>  ASSERT(IDM_ABOUTBOX < 0xF000);</p><p>  CMenu* pSysMenu = GetSystemMenu(FALSE);</p><p>  if (pSysMenu != NULL)</p><p><b>  {</b></p><p>  C

62、String strAboutMenu;</p><p>  strAboutMenu.LoadString(IDS_ABOUTBOX);</p><p>  if (!strAboutMenu.IsEmpty())</p><p><b>  {</b></p><p>  pSysMenu->AppendMen

63、u(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX, strAboutMenu);</p><p><b>  }</b></p><p><b>  }</b></p><p>  SetIcon(m_hIcon, TRUE)

64、;// Set big icon</p><p>  SetIcon(m_hIcon, FALSE);// Set small icon</p><p>  //彈出初始話(huà)對(duì)話(huà)框</p><p>  CInitDlg dlg;</p><p>  if (dlg.DoModal() == IDOK)</p><

65、p><b>  {</b></p><p><b>  //創(chuàng)建監(jiān)聽(tīng)套節(jié)字</b></p><p>  m_pSocket = new CListeningSocket(this);</p><p>  if (m_pSocket->Create(dlg.m_nPort+700))</p><

66、;p><b>  {</b></p><p>  if (m_pSocket->Listen())</p><p>  return TRUE;</p><p><b>  }</b></p><p><b>  else</b></p><p&

67、gt;  return FALSE;</p><p><b>  }</b></p><p><b>  else</b></p><p>  return FALSE;</p><p>  return TRUE; // return TRUE unless you set the focu

68、s to a control</p><p><b>  }</b></p><p><b>  五、運(yùn)行結(jié)果如下:</b></p><p>  1.服務(wù)端初始化, 進(jìn)入聊天室界面:</p><p>  3.客戶(hù)端初始化,端口號(hào)與服務(wù)器對(duì)應(yīng):</p><p>  4. 進(jìn)入聊

69、天界面:</p><p>  5.聊天室顯示進(jìn)入的客戶(hù):</p><p>  6.另一個(gè)客戶(hù)進(jìn)入聊天室:</p><p>  7.在客戶(hù)界面上顯示聊天界面:</p><p><b>  (芳菲燕)</b></p><p><b> ?。_)</b></p>&

70、lt;p>  8.在聊天室界面上顯示所有客戶(hù)的聊天記錄:</p><p>  9.顯示芳菲燕離開(kāi)聊天室:</p><p>  10.在芳菲燕的聊天界面上顯示離開(kāi)狀態(tài):</p><p>  11.顯示芳菲燕又進(jìn)入聊天室:</p><p><b>  六、課程設(shè)計(jì)心得:</b></p><p>

71、  我做的是“聊天室”系統(tǒng),這個(gè)程序是和鐘宏運(yùn)同學(xué)合作的,他教會(huì)了我很多東西。通過(guò)做這個(gè)系統(tǒng),我鞏固和運(yùn)用了很多課上學(xué)過(guò)的知識(shí),也學(xué)會(huì)了很多課上沒(méi)有講過(guò)的知識(shí),感受到了解課外知識(shí)的重要性,可謂是受益匪淺。</p><p>  在最開(kāi)始建立工程時(shí)就犯了一個(gè)很大的錯(cuò)誤,間錯(cuò)了工程,以致在建類(lèi)時(shí)總是出錯(cuò),浪費(fèi)了幾個(gè)小時(shí)才發(fā)現(xiàn)要建基于對(duì)話(huà)框的程序。這就體現(xiàn)了上課聽(tīng)講的重要性,由于一時(shí)的疏忽又很有可能造成無(wú)可挽回的錯(cuò)誤。我

72、們做的系統(tǒng)很小,如果這是一個(gè)巨大工程,犯了這樣一個(gè)錯(cuò)誤,那是致命的。但是,話(huà)說(shuō)回來(lái),這不叫浪費(fèi)時(shí)間,我們要吃一塹長(zhǎng)一智,下次要記住,做工程,從第一步就應(yīng)該認(rèn)認(rèn)真真,踏踏實(shí)實(shí),避免出錯(cuò)。已進(jìn)入工程,首先就做好了所有的界面設(shè)計(jì)。其中又遇到了很多困難。在插入位圖時(shí),要調(diào)整位圖的大小,這是我不知道的,通過(guò)參考書(shū)和討論終于完成這一步。從中,我更加堅(jiān)定了討論的重要作用。其次,代碼部分很多很復(fù)雜,但是結(jié)構(gòu)確是很清晰的。我想這應(yīng)該是MFC的一個(gè)很大的

73、優(yōu)點(diǎn)。根據(jù)參考書(shū)上的講解和自己的揣摩,我明白了整個(gè)算法的靈魂。</p><p>  這個(gè)程序講的是通信,互聯(lián)網(wǎng)上關(guān)于聊天功能的工具非常多,但是其實(shí)現(xiàn)技術(shù)都是大同小異。我們做的這個(gè)系統(tǒng)是用WINSOCK實(shí)現(xiàn)的最簡(jiǎn)單的聊天,多人能夠發(fā)送信息至服務(wù)器,服務(wù)器首先顯示進(jìn)入聊天室的成員名,然后顯示對(duì)方名字和聊天信息,而且可以并發(fā)執(zhí)行。把通信的思想轉(zhuǎn)化成語(yǔ)言的過(guò)程,靠的是C++的基礎(chǔ)。實(shí)現(xiàn)過(guò)程中犯了很多錯(cuò)誤,真的很后悔基礎(chǔ)功

74、不牢固,現(xiàn)在就要付出更多的時(shí)間來(lái)彌補(bǔ)。最近有很多專(zhuān)業(yè)課的要做課程設(shè)計(jì),每一次任務(wù)的完成,都會(huì)很有成就感,發(fā)現(xiàn)經(jīng)驗(yàn)真的很寶貴。有些人,可以隨口說(shuō)出那些常用的函數(shù),走了一條捷徑,而不知道的人,就要花時(shí)間去找那個(gè)函數(shù),或者說(shuō)自己寫(xiě)代碼來(lái)實(shí)現(xiàn)那個(gè)函數(shù)的功能。所以,從現(xiàn)在開(kāi)始,我會(huì)認(rèn)真面對(duì)每一次編程,即使是小程序,也一樣能鍛煉人。</p><p>  到這,這個(gè)學(xué)期的MFC學(xué)習(xí)結(jié)束了,但對(duì)知識(shí)的追求還沒(méi)有結(jié)束,我們會(huì)的只是

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論