版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> MFC課程設(shè)計報告</b></p><p> 題 目 聊天室程序設(shè)計 </p><p> 學(xué) 號 </p><p> 專 業(yè) 計算機(jī)科學(xué)與技術(shù) </p><p> 授課班號 <
2、;/p><p> 學(xué)生姓名 </p><p> 指導(dǎo)教師 </p><p> 完成時間 2008.12.30 </p><p> 題目:設(shè)計一個聊天室系統(tǒng),實現(xiàn)多人一起聊天。</p><p><b> 引言<
3、/b></p><p><b> 1.1開發(fā)背景</b></p><p> 隨著網(wǎng)絡(luò)信息時代的來臨,INTERNET應(yīng)用越來越廣泛,人們越來越習(xí)慣于在網(wǎng)上獲取和交流信息。據(jù)調(diào)查顯示,80%以上的人上網(wǎng)都會打開聊天工具來聊天,而幾乎每一個年輕人都會去聊天。使用網(wǎng)上聊天已經(jīng)成為現(xiàn)代年輕人一種新的交往方式。聊天室更適合于陌生人之間進(jìn)行較為主觀、感興化的討論。所以有
4、大部分的人會進(jìn)入聊天室聊天,它會給人一個完全自由的聊天世界。因此我聯(lián)系所學(xué)的MFC知識,決定做一個簡易的聊天室程序。</p><p> 1.2開發(fā)環(huán)境以及運(yùn)行環(huán)境</p><p> 1.2.1 開發(fā)環(huán)境</p><p> Intel® Pentium® 4 2.0GHz,512M內(nèi)存,80G硬盤</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><p>
6、Microsoft® Windows? XP操作系統(tǒng)</p><p> 800*600或以上的屏幕分辨率</p><p><b> 二.需求分析</b></p><p> 用WINSOCK實現(xiàn)簡單的網(wǎng)絡(luò)聊天;</p><p> 在MFC開發(fā)平臺上編寫一個聊天系統(tǒng); </p><p&g
7、t; 得server和client之間可以相互通信; </p><p> 多人能夠發(fā)送信息至服務(wù)器,首先顯示進(jìn)入聊天室的成員名,然后顯示對方名字和聊天信息,可以并發(fā)執(zhí)行。</p><p><b> 三、算法分析</b></p><p> 建立連接過程流程圖如下:</p><p><b> 四、詳細(xì)設(shè)計
8、</b></p><p> 程序個模塊代碼如下:</p><p><b> 1.客戶端</b></p><p> ?。?)通過AppWizard生成基于對話框的應(yīng)用程序ChatClient,在向?qū)У牡诙竭x擇WindowsSockets的支持,其余步驟均用默認(rèn)值。</p><p> ?。?)增加一個登錄服
9、務(wù)器的對話框資源,其ID為IDD_SETUP,然后通過ClassWizard生成對應(yīng)的基于CDialog的類CSetupDlg。</p><p> (3)給對話框CSetupDlg增加3個編輯框,用來輸入登錄信息(聊天代號、服務(wù)器地址以及服務(wù)器端口號),</p><p> ?。?)通過ClassWizard生成對應(yīng)的基于CSocket的類CChatSocket。</p>&
10、lt;p> (5)給CChatSocket類聲明一個主對話框CChatClientDlg指針類型的私有成員變量,其代碼如下:</p><p> protected:</p><p> CChatClientDlg* m_pDlg;</p><p> 并且在ChatSocket類的頭文件開始處增加如下代碼:</p><p> c
11、lass CChatClientDlg; //主對話框類</p><p> (6)給ChatSocket類重載一個構(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類的CPP文件開始處增加如下語句:</p><p> #include "ChatClientDlg.h"</p><p> ?。?)通過ClassWizard響應(yīng)類的ChatSocket的
13、OnReceive函數(shù),表示可以接收數(shù)據(jù)了,其代碼如下:</p><p> //通知客戶端可以接受數(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)在主對話框ChatClientDlg的頭文件中定義ChatSocket指針類型的私有成員變量,其代碼如下:</p><p> CChatSocket* m_pSocket;</p><p> 并且在CChatClientDlg類的頭文件開始處增加如下代碼:</p><p> class C
16、ChatSocket;//基于CSocket的新類CChatSocket</p><p> (9)給對話框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ù)在列表框中顯示出來</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)給對話框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類的頭文件開始處定義緩沖區(qū)的大小,其代碼如下:</p><p> #defineBUFFER_SIZE200</p><p> ?。?1)給對話框CChatClientDlg增加表示聊天代號的CString類型私有成員變量m_strClientName。</p><p> (12)在對話框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> //顯示登錄對話框</b></p><p> CSetupDlg dlg;</p><p> if(dlg.DoModal()==IDOK) {</p><p> //創(chuàng)建一個新的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)給主對話框CChatClientDlg增加一個CListBox類型的變量m_strMsg。</p><p> ?。?4)給住對話框CChat
33、ClientDlg增加一個輸入發(fā)送信息的編輯框,并生成對應(yīng)的CString類型的變量m_strMsg。</p><p> (15)給主對話框CChatClientDlg增加一個【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)給主對話框增添一個【離開】
35、按鈕,其響應(yīng)函數(shù)定義如下:</p><p> void CChatClientDlg::leave()//離開{</p><p> SendMsg("離開聊天室");</p><p> m_ctrlMsgs.AddString("離開狀態(tài)");</p><p> m_pSocket->Cl
36、ose();</p><p><b> }</b></p><p> (17)給主對話框增添一個【連接】按鈕,其響應(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> ?。?)通過AppWizard生成基于對話框的應(yīng)用程序ChatServer,在向?qū)У牡诙竭x擇WindowsSockets的支持,其余步驟均用默認(rèn)值。</p><p> ?。?)增加一個登錄服務(wù)器的對話框資源,其ID為IDD_INT,然后通過C
38、lassWizard生成對應(yīng)的基于CDialog的類CInitDlg。</p><p> ?。?)給對話框CInitDlg增加1個輸入端口號的編輯框,并生成對應(yīng)的整形變量m_nPort。</p><p> ?。?)通過ClassWizard生成對應(yīng)的基于CSocket的類CListeningSocket,用來監(jiān)聽服務(wù)器。</p><p> (5)給CListeni
39、ngSocket類聲明一個主對話框CChatServerDlg指針類型的私有成員變量,其代碼如下:</p><p> protected:</p><p> CChatServerDlg* m_pDlg;</p><p> 并且在CListeningSocket類的頭文件開始處增加如下代碼:</p><p> class CChatS
40、erverDlg; //主對話框類</p><p> (6)給ChatSocket類重載一個構(gòu)造函數(shù),其定義如下:</p><p> CChatSocket::CClientSocket(CChatServerDlg* pDlg)</p><p> { m_pDlg = pDlg; }</p><p> 并且在CListe
41、ningSocket類的CPP文件開始處增加如下語句:</p><p> #include "ChatServerDlg.h"</p><p> ?。?)通過ClassWizard響應(yīng)類的CListeningSocket的OnAccept函數(shù),表示客戶端連接,其代碼如下:</p><p> void CListeningSocket::OnA
42、ccept(int nErrorCode) </p><p> //通知服務(wù)器,有客戶端需要連接服務(wù)器</p><p> { CSocket::OnAccept(nErrorCode);</p><p> //主對話框處理連接信息</p><p> if(m_pDlg)</p><p> m_pDlg-&
43、gt;ProcessPendingAccept();</p><p><b> }</b></p><p> ?。?)通過ClassWizard生成基于CSocket的新類CClientSocket,用來與客戶端通信。</p><p> ?。?)給CClientSocket類聲明一個主對話框CChatServerDlg指針類型的私有成員變量,
44、其代碼如下:</p><p> protected:</p><p> CChatServerDlg* m_pDlg;</p><p> 并且在CClientSocket類的頭文件開始處增加如下語句:</p><p> class CChatServerDlg;</p><p> ?。?0)給CClientSo
45、cket類重載一個構(gòu)造函數(shù),其定義如下:</p><p> CClientSocket::CClientSocket(CChatServerDlg* pDlg){</p><p> m_pDlg = pDlg;</p><p><b> }</b></p><p> 并且在CClientSocket類的CPP文件
46、開始處增加如下語句:</p><p> #include "ChatServerDlg.h"</p><p> (11)通過ClassWizard響應(yīng)類的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> { //讓主對話框處理數(shù)據(jù)</p><p> m_pDlg->ProcessPendingRead(th
48、is);</p><p><b> }</b></p><p><b> } </b></p><p> ?。?2)在主對話框CChatServerDlg的頭文件那個增加兩個私有成員變量,其代碼如下:</p><p> CListeningSocket* m_pSocket;//監(jiān)聽套節(jié)字
49、</p><p> CPtrList m_connectionList;//客戶端套節(jié)字鏈表</p><p> 并且在CChatSvrDlg的頭文件開始處增加如下代碼:</p><p> class CListeningSocket;</p><p> class CClientSocket;</p><p&
50、gt; ?。?3)給主對話框CChatSvrDlg增加處理客戶端連接信息的私有成員變量ProcessPendingAccept,其定義如下:</p><p> void CChatServerDlg::ProcessPendingAccept() {</p><p> //生成一個新的套節(jié)字與客戶端通訊</p><p> CClientSocket* pSoc
51、ket = new CClientSocket(this);</p><p> if (m_pSocket->Accept(*pSocket)) {</p><p> //將該套節(jié)字保存起來</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> (14)給主對話框CChatSvrDlg增加更新所有客戶端的私有成員函數(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ā)送給每個客戶端</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)給主對話框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ù)在列表框中顯示出來</p><p> m_ctrlMsgs.AddString(buffer);</p><p> //將數(shù)據(jù)發(fā)送給每個客戶</p><p> UpdateClients(buffer,nReceived);</p><p&g
59、t;<b> }</b></p><p> 并且在CChatSvrDlg類的頭文件開始處定義緩沖區(qū)的大小,其代碼如下:</p><p> #define BUFFER_SIZE200</p><p> (16)給主對話框CChatSvrDlg的OnInitialUpdate函數(shù)中顯示初始化對話框,其定義如下:</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> //彈出初始話對話框</p><p> CInitDlg dlg;</p><p> if (dlg.DoModal() == IDOK)</p><
65、p><b> {</b></p><p><b> //創(chuàng)建監(jiān)聽套節(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.客戶端初始化,端口號與服務(wù)器對應(yīng):</p><p> 4. 進(jìn)入聊
69、天界面:</p><p> 5.聊天室顯示進(jìn)入的客戶:</p><p> 6.另一個客戶進(jìn)入聊天室:</p><p> 7.在客戶界面上顯示聊天界面:</p><p><b> ?。ǚ挤蒲啵?lt;/b></p><p><b> (卡羅)</b></p>&
70、lt;p> 8.在聊天室界面上顯示所有客戶的聊天記錄:</p><p> 9.顯示芳菲燕離開聊天室:</p><p> 10.在芳菲燕的聊天界面上顯示離開狀態(tài):</p><p> 11.顯示芳菲燕又進(jìn)入聊天室:</p><p><b> 六、課程設(shè)計心得:</b></p><p>
71、 我做的是“聊天室”系統(tǒng),這個程序是和鐘宏運(yùn)同學(xué)合作的,他教會了我很多東西。通過做這個系統(tǒng),我鞏固和運(yùn)用了很多課上學(xué)過的知識,也學(xué)會了很多課上沒有講過的知識,感受到了解課外知識的重要性,可謂是受益匪淺。</p><p> 在最開始建立工程時就犯了一個很大的錯誤,間錯了工程,以致在建類時總是出錯,浪費(fèi)了幾個小時才發(fā)現(xiàn)要建基于對話框的程序。這就體現(xiàn)了上課聽講的重要性,由于一時的疏忽又很有可能造成無可挽回的錯誤。我
72、們做的系統(tǒng)很小,如果這是一個巨大工程,犯了這樣一個錯誤,那是致命的。但是,話說回來,這不叫浪費(fèi)時間,我們要吃一塹長一智,下次要記住,做工程,從第一步就應(yīng)該認(rèn)認(rèn)真真,踏踏實實,避免出錯。已進(jìn)入工程,首先就做好了所有的界面設(shè)計。其中又遇到了很多困難。在插入位圖時,要調(diào)整位圖的大小,這是我不知道的,通過參考書和討論終于完成這一步。從中,我更加堅定了討論的重要作用。其次,代碼部分很多很復(fù)雜,但是結(jié)構(gòu)確是很清晰的。我想這應(yīng)該是MFC的一個很大的
73、優(yōu)點。根據(jù)參考書上的講解和自己的揣摩,我明白了整個算法的靈魂。</p><p> 這個程序講的是通信,互聯(lián)網(wǎng)上關(guān)于聊天功能的工具非常多,但是其實現(xiàn)技術(shù)都是大同小異。我們做的這個系統(tǒng)是用WINSOCK實現(xiàn)的最簡單的聊天,多人能夠發(fā)送信息至服務(wù)器,服務(wù)器首先顯示進(jìn)入聊天室的成員名,然后顯示對方名字和聊天信息,而且可以并發(fā)執(zhí)行。把通信的思想轉(zhuǎn)化成語言的過程,靠的是C++的基礎(chǔ)。實現(xiàn)過程中犯了很多錯誤,真的很后悔基礎(chǔ)功
74、不牢固,現(xiàn)在就要付出更多的時間來彌補(bǔ)。最近有很多專業(yè)課的要做課程設(shè)計,每一次任務(wù)的完成,都會很有成就感,發(fā)現(xiàn)經(jīng)驗真的很寶貴。有些人,可以隨口說出那些常用的函數(shù),走了一條捷徑,而不知道的人,就要花時間去找那個函數(shù),或者說自己寫代碼來實現(xiàn)那個函數(shù)的功能。所以,從現(xiàn)在開始,我會認(rèn)真面對每一次編程,即使是小程序,也一樣能鍛煉人。</p><p> 到這,這個學(xué)期的MFC學(xué)習(xí)結(jié)束了,但對知識的追求還沒有結(jié)束,我們會的只是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- vc++課程設(shè)計--聊天室程序設(shè)計
- mfc聊天軟件課程設(shè)計---網(wǎng)絡(luò)聊天程序設(shè)計
- mfc聊天軟件課程設(shè)計---網(wǎng)絡(luò)聊天程序設(shè)計
- 網(wǎng)絡(luò)編程課程設(shè)計-簡單的聊天室程序設(shè)計
- 網(wǎng)絡(luò)編程課程設(shè)計-簡單的聊天室程序設(shè)計
- 聊天室課程設(shè)計---聊天程序的設(shè)計和實現(xiàn)
- 基于java的聊天室程序設(shè)計
- jsp課程設(shè)計報告--在線聊天室
- 《web開發(fā)》課程設(shè)計報告--聊天室
- web課程設(shè)計—— 聊天室
- 軟件課程設(shè)計報告---簡易網(wǎng)絡(luò)聊天室
- java課程設(shè)計--聊天室系統(tǒng)
- java網(wǎng)絡(luò)聊天室課程設(shè)計
- java課程設(shè)計---聊天室系統(tǒng)
- tcp課程設(shè)計--網(wǎng)絡(luò)聊天室
- mfc程序設(shè)計課程設(shè)計---考勤系統(tǒng)
- java課程設(shè)計之簡單聊天室
- 網(wǎng)絡(luò)編程課程設(shè)計---網(wǎng)絡(luò)聊天室
- 網(wǎng)絡(luò)編程課程設(shè)計-java聊天室
- 網(wǎng)絡(luò)編程課程設(shè)計報告--基于linux網(wǎng)絡(luò)聊天室設(shè)計
評論
0/150
提交評論