

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)</p><p><b> 設(shè)計(jì)說(shuō)明書(shū)</b></p><p> 起止日期:2012年5月27日至2012年6月1日</p><p><b> 計(jì)算機(jī)與通信學(xué)院</b></p><p> 2012年 5 月30 日</p><
2、;p> 網(wǎng)絡(luò)聊天程序設(shè)計(jì)</p><p><b> 網(wǎng)絡(luò)聊天程序設(shè)計(jì)</b></p><p> 課題的介紹和課題的任務(wù)</p><p><b> 課題介紹:</b></p><p> 近年來(lái)隨著PC的廣泛應(yīng)用和網(wǎng)絡(luò)的不斷發(fā)展,目前網(wǎng)絡(luò)技術(shù)已經(jīng)成為了計(jì)算機(jī)領(lǐng)域內(nèi)的最熱門(mén)的發(fā)展方向。<
3、;/p><p> 聊天室。在網(wǎng)絡(luò)早期就開(kāi)始盛行,不論是BBS,IRC 都有類似網(wǎng)上聊天室的機(jī)制。聊天室適用于網(wǎng)上會(huì)議或閑聊的一些場(chǎng)合。聊天室為網(wǎng)友提供了較好的交友環(huán)境,網(wǎng)友之間相互以文字交談,在形式上有點(diǎn)類似筆友的性質(zhì),卻大大節(jié)省了書(shū)信往返的時(shí)間,這也是網(wǎng)上交友之所以如此熱門(mén)的原因。</p><p><b> 課題任務(wù):</b></p><
4、;p> 1、綜合運(yùn)用本課程及計(jì)算機(jī)網(wǎng)絡(luò)的相關(guān)知識(shí)設(shè)計(jì)并實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)應(yīng)用程序,以Visual C++6.0作為開(kāi)發(fā)平臺(tái),通過(guò)實(shí)踐復(fù)習(xí)鞏固課堂所學(xué)的理論知識(shí),提高對(duì)所學(xué)知識(shí)的綜合應(yīng)用能力,進(jìn)一步加強(qiáng)winsock編程技術(shù)。</p><p> 2、采用客戶/服務(wù)器模式,分為客戶端程序和服務(wù)器程序。服務(wù)器采用WINSOCK I/O模型中的任一種,支持多個(gè)客戶同時(shí)在線聊天??蛻舳顺绦蚝头?wù)器程序通過(guò)網(wǎng)絡(luò)交換聊天字
5、符串內(nèi)容,服務(wù)器窗口的列表框中顯示當(dāng)前在線用戶,支持服務(wù)器與客戶端之間的私聊</p><p><b> 二、設(shè)計(jì)的要求</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> 得server和client之間可以相互通信; <
6、;/p><p> 多人能夠發(fā)送信息至服務(wù)器,首先顯示進(jìn)入聊天室的成員名,然后顯示對(duì)方名字和聊天信息,可以并發(fā)執(zhí)行。</p><p> 服務(wù)器與單個(gè)客戶端之間可以進(jìn)行私聊</p><p> 三、系統(tǒng)的分析和系統(tǒng)中類的設(shè)計(jì)</p><p> 在此主要介紹服務(wù)器端的構(gòu)建(即本人所負(fù)責(zé)的部分),不是本人負(fù)責(zé)的部分不過(guò)多介紹</p>
7、<p> 建立連接過(guò)程流程圖如下:</p><p> 程序個(gè)模塊代碼如下:</p><p><b> 1.客戶端</b></p><p> ?。?)通過(guò)AppWizard生成基于對(duì)話框的應(yīng)用程序ChatClient,在向?qū)У牡诙竭x擇WindowsSockets的支持,其余步驟均用默認(rèn)值。</p><p>
8、; ?。?)增加一個(gè)登錄服務(wù)器的對(duì)話框資源,其ID為IDD_SETUP,然后通過(guò)ClassWizard生成對(duì)應(yīng)的基于CDialog的類CSetupDlg。</p><p> ?。?)給對(duì)話框CSetupDlg增加3個(gè)編輯框,用來(lái)輸入登錄信息(聊天代號(hào)、服務(wù)器地址以及服務(wù)器端口號(hào)),</p><p> ?。?)通過(guò)ClassWizard生成對(duì)應(yīng)的基于CSocket的類CChatSocket。
9、</p><p> ?。?)給CChatSocket類聲明一個(gè)主對(duì)話框CChatClientDlg指針類型的私有成員變量,其代碼如下:</p><p> protected:</p><p> CChatClientDlg* m_pDlg;</p><p> 并且在ChatSocket類的頭文件開(kāi)始處增加如下代碼:</p>
10、<p> class CChatClientDlg; //主對(duì)話框類</p><p> (6)給ChatSocket類重載一個(gè)構(gòu)造函數(shù),其定義如下:</p><p> CChatSocket::CChatSocket(CChatClientDlg* pDlg)</p><p><b> {</b></p>&
11、lt;p> m_pDlg = pDlg;</p><p><b> }</b></p><p> 并且在ChatSocket類的CPP文件開(kāi)始處增加如下語(yǔ)句:</p><p> #include "ChatClientDlg.h"</p><p> ?。?)通過(guò)ClassWizard響應(yīng)
12、類的ChatSocket的OnReceive函數(shù),表示可以接收數(shù)據(jù)了,其代碼如下:</p><p> //通知客戶端可以接受數(shù)據(jù)</p><p> void CChatSocket::OnReceive(int nErrorCode) {</p><p> CSocket::OnReceive(nErrorCode);</p><p>
13、; if(m_pDlg){</p><p> PlaySound("F:\msg.wav",NULL,SND_ASYNC|SND_NODEFAULT);</p><p> m_pDlg->ProcessPendingRead();</p><p><b> }</b></p><p>
14、;<b> }</b></p><p> ?。?)在主對(duì)話框ChatClientDlg的頭文件中定義ChatSocket指針類型的私有成員變量,其代碼如下:</p><p> CChatSocket* m_pSocket;</p><p> 并且在CChatClientDlg類的頭文件開(kāi)始處增加如下代碼:</p><p
15、> class CChatSocket;//基于CSocket的新類CChatSocket</p><p> ?。?)給對(duì)話框CChatClientDlg增加處理接收數(shù)據(jù)的共有成員函數(shù)ProcessPendingRead,其定義如下:</p><p> void CChatClientDlg::ProcessPendingRead()//處理接收的數(shù)據(jù){</p>&
16、lt;p><b> //定義緩沖區(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);</
17、p><p> 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);&
18、lt;/p><p><b> }</b></p><p> ?。?0)給對(duì)話框CChatClientDlg增加發(fā)送數(shù)據(jù)的私有成員函數(shù)SendMsg:</p><p> //發(fā)送數(shù)據(jù)到服務(wù)器</p><p> void CChatClientDlg::SendMsg(CString strMsg){</p>
19、<p> CString 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>
20、;</p><p> 并且在CChatClientDlg類的頭文件開(kāi)始處定義緩沖區(qū)的大小,其代碼如下:</p><p> #defineBUFFER_SIZE200</p><p> (11)給對(duì)話框CChatClientDlg增加表示聊天代號(hào)的CString類型私有成員變量m_strClientName。</p><p> (
21、12)在對(duì)話框CChatClientDlg的OnInitialUpdate函數(shù)中增加登錄服務(wù)器的代碼:</p><p> BOOL CChatClientDlg::OnInitDialog()//登錄服務(wù)器{</p><p> CDialog::OnInitDialog();</p><p> ASSERT((IDM_ABOUTBOX & 0xFFF0
22、) == IDM_ABOUTBOX);</p><p> ASSERT(IDM_ABOUTBOX < 0xF000);</p><p> CMenu* pSysMenu = GetSystemMenu(FALSE);</p><p> if (pSysMenu != NULL) {</p><p> CStrin
23、g strAboutMenu;</p><p> strAboutMenu.LoadString(IDS_ABOUTBOX);</p><p> if (!strAboutMenu.IsEmpty()) {</p><p> pSysMenu->AppendMenu(MF_SEPARATOR); pSysMen
24、u->AppendMenu(MF_STRING,IDM_ABOUTBOX, strAboutMenu);</p><p><b> }</b></p><p><b> }</b></p><p> SetIcon(m_hIcon, TRUE);// Set big icon</p><
25、;p> SetIcon(m_hIcon, FALSE);// Set small icon </p><p><b> //顯示登錄對(duì)話框</b></p><p> CSetupDlg dlg;</p><p> if(dlg.DoModal()==IDOK) {</p><p> //
26、創(chuàng)建一個(gè)新的Socket</p><p> m_pSocket = new CChatSocket(this);</p><p> if (!m_pSocket->Create()) {</p><p> delete m_pSocket;</p><p> m_pSocket = NULL;</p>
27、;<p> AfxMessageBox("create socket failed");</p><p> return FALSE;</p><p><b> }</b></p><p><b> //連接服務(wù)器</b></p><p> while
28、 (!m_pSocket->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_pSock
29、et;</p><p> m_pSocket = NULL;</p><p> return FALSE;</p><p><b> }</b></p><p><b> }</b></p><p> m_strClientName = dlg.m_strName;
30、</p><p><b> }</b></p><p><b> else</b></p><p> return FALSE;</p><p> //發(fā)送登錄消息給服務(wù)器</p><p> SendMsg("進(jìn)入聊天室");</p>
31、;<p> return TRUE; // return TRUE unless you set the focus to a control</p><p><b> }</b></p><p> ?。?3)給主對(duì)話框CChatClientDlg增加一個(gè)CListBox類型的變量m_strMsg。</p><p> ?。?/p>
32、14)給住對(duì)話框CChatClientDlg增加一個(gè)輸入發(fā)送信息的編輯框,并生成對(duì)應(yīng)的CString類型的變量m_strMsg。</p><p> (15)給主對(duì)話框CChatClientDlg增加一個(gè)【send】按鈕,其響應(yīng)函數(shù)定義如下:</p><p> void CChatClientDlg::OnSend() //響應(yīng)控件send{</p><p>
33、UpdateData(TRUE); </p><p> SendMsg(m_strMsg);</p><p> m_strMsg.Empty();////清空編輯區(qū)</p><p> UpdateData(FALSE);</p><p><b> } </b></p><p> ?。?6)
34、給主對(duì)話框增添一個(gè)【離開(kāi)】按鈕,其響應(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_p
35、Socket->Close();</p><p><b> }</b></p><p> ?。?7)給主對(duì)話框增添一個(gè)【連接】按鈕,其響應(yīng)函數(shù)如下:</p><p> void CChatClientDlg::land()//連接{</p><p> OnInitDialog();</p>&l
36、t;p><b> }</b></p><p><b> 四、系統(tǒng)的數(shù)據(jù)設(shè)計(jì)</b></p><p> 沒(méi)有涉及到數(shù)據(jù)設(shè)計(jì),只有文件保存。</p><p> 五、系統(tǒng)的實(shí)現(xiàn)及調(diào)試</p><p> 1.服務(wù)端初始化, 進(jìn)入聊天室界面:</p><p> 2.客
37、戶端初始化,端口號(hào)與服務(wù)器對(duì)應(yīng):</p><p> 4. 進(jìn)入聊天界面:</p><p> 5.聊天室顯示進(jìn)入的客戶:</p><p> 6.另一個(gè)客戶進(jìn)入聊天室:</p><p> 7.在客戶界面上顯示聊天界面:</p><p> 8.在聊天室界面上顯示所有客戶的聊天記錄:</p><p
38、> 9.顯示何留根離開(kāi)聊天室:</p><p> 10.在何留根的聊天界面上顯示離開(kāi)狀態(tài):</p><p> 11.顯示何留根又進(jìn)入聊天室:</p><p> 五、系統(tǒng)的實(shí)現(xiàn)及調(diào)試</p><p> 我做的是“網(wǎng)絡(luò)聊天程序”,這個(gè)程序是和何留根同學(xué)合作的,通過(guò)做這個(gè)系統(tǒng),我鞏固和運(yùn)用了很多課上學(xué)過(guò)的知識(shí),也學(xué)會(huì)了很多課上沒(méi)有講
39、過(guò)的知識(shí),感受到了解課外知識(shí)的重要性,可謂是受益匪淺。</p><p> 在最開(kāi)始建立工程時(shí)就犯了一個(gè)很大的錯(cuò)誤,建錯(cuò)了工程,以致在建類時(shí)總是出錯(cuò),浪費(fèi)了幾個(gè)小時(shí)才發(fā)現(xiàn)要建基于對(duì)話框的程序。這就體現(xiàn)了上課聽(tīng)講的重要性,由于一時(shí)的疏忽又很有可能造成無(wú)可挽回的錯(cuò)誤。我們做的系統(tǒng)很小,如果這是一個(gè)巨大工程,犯了這樣一個(gè)錯(cuò)誤,那是致命的。但是,話說(shuō)回來(lái),這不叫浪費(fèi)時(shí)間,我們要吃一塹長(zhǎng)一智,下次要記住,做工程,從第一步就
40、應(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è)很大的優(yōu)點(diǎn)。根據(jù)參考書(shū)上的講解和自己的揣摩,我明白了整個(gè)算法的靈魂。</p><p> 這個(gè)程序講的是通信,互聯(lián)網(wǎng)上關(guān)于聊天功能的
41、工具非常多,但是其實(shí)現(xiàn)技術(shù)都是大同小異。我們做的這個(gè)系統(tǒng)是用WINSOCK實(shí)現(xiàn)的最簡(jiǎn)單的聊天,能夠發(fā)送信息至服務(wù)器,。把通信的思想轉(zhuǎn)化成語(yǔ)言的過(guò)程,靠的是C++的基礎(chǔ)。實(shí)現(xiàn)過(guò)程中犯了很多錯(cuò)誤,真的很后悔基礎(chǔ)功不牢固,現(xiàn)在就要付出更多的時(shí)間來(lái)彌補(bǔ)。有些人,可以隨口說(shuō)出那些常用的函數(shù),走了一條捷徑,而不知道的人,就要花時(shí)間去找那個(gè)函數(shù),或者說(shuō)自己寫(xiě)代碼來(lái)實(shí)現(xiàn)那個(gè)函數(shù)的功能。所以,從現(xiàn)在開(kāi)始,我會(huì)認(rèn)真面對(duì)每一次編程,即使是小程序,也一樣能鍛煉
42、人。</p><p> 到這,這個(gè)學(xué)期的MFC學(xué)習(xí)結(jié)束了,但對(duì)知識(shí)的追求還沒(méi)有結(jié)束,我們會(huì)的只是知識(shí)海洋里的一瓢水,還有更多的東西需要我們?nèi)ャ@研。不能說(shuō)自己會(huì)有多高的覺(jué)悟,但小小的收益是無(wú)可否認(rèn)的。</p><p> 最后,謝謝xx老師本學(xué)期的精心教導(dǎo)!</p><p> 附1:完成該系統(tǒng)的所有成員名單及其工作</p><p> 徐夢(mèng)
43、云:服務(wù)器戶端的開(kāi)發(fā)及美化,后期處理等。</p><p> 何劉根:客戶端的開(kāi)發(fā)及美化。</p><p> 附2:系統(tǒng)的主要程序代碼</p><p> void CListeningSocket::OnAccept(int nErrorCode) //通知服務(wù)器,有客戶端需要連接服務(wù)器</p><p><b> {<
44、/b></p><p> CSocket::OnAccept(nErrorCode);</p><p> //主對(duì)話框處理連接信息</p><p> if(m_pDlg)</p><p> m_pDlg->ProcessPendingAccept();</p><p><b> }<
45、;/b></p><p> void CClientSocket::OnReceive(int nErrorCode) </p><p> {//通知服務(wù)器可以接受數(shù)據(jù)</p><p> CSocket::OnReceive(nErrorCode);</p><p> if(m_pDlg)</p><p&g
46、t; { //讓主對(duì)話框處理數(shù)據(jù)</p><p> m_pDlg->ProcessPendingRead(this);</p><p><b> }</b></p><p><b> }</b></p><p> void CChatServerDlg::ProcessPendin
47、gAccept()</p><p><b> {</b></p><p> //生成一個(gè)新的套節(jié)字與客戶端通訊</p><p> CClientSocket* pSocket = new CClientSocket(this);</p><p> if (m_pSocket->Accept(*pSocket
48、)) </p><p> {//將該套節(jié)字保存起來(lái)</p><p> m_connectionList.AddTail(pSocket);</p><p><b> }</b></p><p><b> else</b></p><p><b>
49、 {</b></p><p> delete pSocket;</p><p><b> }</b></p><p><b> }</b></p><p> void CChatServerDlg::UpdateClients(char *buffer, int nBufferS
50、ize) //通知所有客戶端更新消息</p><p><b> {</b></p><p> for(POSITION pos = m_connectionList.GetHeadPosition();pos != NULL;)</p><p> {//將新信息發(fā)送給每個(gè)客戶端</p><p> CClientS
51、ocket* pSocket= (CClientSocket*)m_connectionList.GetNext(pos);</p><p> if (buffer != NULL)</p><p> pSocket->Send(buffer,nBufferSize,0);</p><p><b> }</b></p>
52、<p><b> }</b></p><p> void CChatServerDlg::Onsiliao() </p><p> {//將數(shù)據(jù)發(fā)送給指定客戶</p><p> int Position=m_people_num.GetCurSel();</p><p> if(Position==
53、-1)</p><p><b> {</b></p><p> AfxMessageBox("沒(méi)有選中聯(lián)系人!",NULL,MB_OK);</p><p><b> return ;</b></p><p><b> }</b></p>
54、<p> int cnt=0;</p><p> CString name,temp;</p><p> m_people_num.GetText(Position,name); //得到選中人的姓名</p><p> for(POSITION pos = m_connectionList.GetHeadPosition();pos != NUL
55、L; ++cnt)</p><p> {//將新信息發(fā)送給指定客戶端</p><p> CClientSocket* pSocket= (CClientSocket*)m_connectionList.GetNext(pos);</p><p> m_people_num.GetText(cnt,temp);</p><p> if(
56、temp==name)</p><p><b> {</b></p><p> pSocket->Send(m_strMsg.GetBuffer(0),m_strMsg.GetLength(),0);</p><p><b> break;</b></p><p><b>
57、 }</b></p><p><b> }</b></p><p> UpdateData(1);</p><p> //將數(shù)據(jù)在列表框中顯示出來(lái)</p><p> m_ctrlMsgs.AddString(m_strMsg);</p><p> m_strMsg.Empt
58、y();////清空編輯區(qū)</p><p> UpdateData(0);</p><p><b> }</b></p><p> void CChatServerDlg::OnSave() </p><p><b> {</b></p><p> ofstream
59、 outfile;</p><p> outfile.open("ServerData.txt",ios::out|ios::app);//以追加打開(kāi)文件</p><p> if(!outfile)</p><p><b> {</b></p><p> MessageBox("保存
60、失敗!",NULL,MB_OK);</p><p><b> return ;</b></p><p><b> }</b></p><p> CString str; </p><p><b> string s;</b></p><p&
61、gt;<b> int i,n;</b></p><p> for(i=0;i<m_ctrlMsgs.GetCount();i++) //遍歷ListBox</p><p><b> {</b></p><p> n=m_ctrlMsgs.GetTextLen(i);</p><p>
62、; m_ctrlMsgs.GetText(i,str.GetBuffer(n));</p><p> s=str; //把CString轉(zhuǎn)換string,否則亂碼</p><p> outfile<<s<<endl;</p><p><b> }</b></p><p> outfil
63、e.close();</p><p><b> }</b></p><p> void CChatServerDlg::OnRead() </p><p><b> {</b></p><p> ifstream infile("ServerData.txt"); //讀
64、取文件</p><p> if(!infile)</p><p><b> {</b></p><p> MessageBox("親,木有聊天記錄哦!",NULL,MB_OK);</p><p><b> return ;</b></p><p>
65、<b> }</b></p><p> char s[1005];</p><p> CString temp;</p><p> while(infile.getline(s,1000,'\n'))</p><p><b> {</b></p><p&
66、gt; string str(s);</p><p> temp.Format("%s",str.c_str());</p><p> ((CChatServerDlg</p><p> *)(AfxGetApp()->m_pMainWnd))->m_ctrlMsgs.AddString(temp); </p>
67、<p> ((CChatServerDlg *)(AfxGetApp()->m_pMainWnd))->m_ctrlMsgs.SetTopIndex(0);</p><p><b> }</b></p><p> infile.close();</p><p><b> }</b></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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- mfc聊天軟件課程設(shè)計(jì)---網(wǎng)絡(luò)聊天程序設(shè)計(jì)
- mfc課程設(shè)計(jì)報(bào)告---聊天室程序設(shè)計(jì)
- 網(wǎng)絡(luò)編程課程設(shè)計(jì)-簡(jiǎn)單的聊天室程序設(shè)計(jì)
- 網(wǎng)絡(luò)編程課程設(shè)計(jì)-簡(jiǎn)單的聊天室程序設(shè)計(jì)
- 軟件課程設(shè)計(jì)---簡(jiǎn)易網(wǎng)絡(luò)聊天系統(tǒng)
- vc++課程設(shè)計(jì)--聊天室程序設(shè)計(jì)
- vc++網(wǎng)絡(luò)聊天軟件課程設(shè)計(jì)
- 軟件課程設(shè)計(jì)---局域網(wǎng)聊天程序
- java課程設(shè)計(jì)-聊天程序
- java課程設(shè)計(jì)--簡(jiǎn)單的網(wǎng)絡(luò)聊天程序
- 軟件課程設(shè)計(jì)報(bào)告--局域網(wǎng)聊天程序
- 聊天室課程設(shè)計(jì)---聊天程序的設(shè)計(jì)和實(shí)現(xiàn)
- java課程設(shè)計(jì)聊天小程序
- tcpip網(wǎng)絡(luò)聊天課程設(shè)計(jì)
- 軟件課程設(shè)計(jì)報(bào)告---簡(jiǎn)易網(wǎng)絡(luò)聊天室
- java課程設(shè)計(jì)報(bào)告--聊天小程序
- mfc程序設(shè)計(jì)課程設(shè)計(jì)---考勤系統(tǒng)
- 課程設(shè)計(jì)一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)聊天程序
- java網(wǎng)絡(luò)聊天室課程設(shè)計(jì)
- 網(wǎng)絡(luò)編程課程設(shè)計(jì)---網(wǎng)絡(luò)聊天室
評(píng)論
0/150
提交評(píng)論