freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

聊天系統(tǒng)的服務端的設(shè)計與實現(xiàn)-資料下載頁

2025-07-21 08:32本頁面

【導讀】長江大學畢業(yè)論文(設(shè)計)任務書·······································································I. 聊天系統(tǒng)的服務端的實現(xiàn)················································································I. 長江大學畢業(yè)設(shè)計(論文)指導教師審查意見·······················································I. 畢業(yè)設(shè)計(論文)答辯記錄及成績評定·····························································I

  

【正文】 客戶端 服務端 數(shù)據(jù)庫 注冊消息的響應 聊天系統(tǒng)服務端的設(shè)計與實現(xiàn) 第 13 頁 共 43 頁 當服務端接到文件傳送請求時,服務端會向目標客戶端發(fā)送文件傳送請求,然后如果 目標客戶端同意了請求的話,兩個客戶端就可以實現(xiàn)點對點文件傳送了,這就是文件傳送 消息的響應。 在本程序中,消息是通過轉(zhuǎn)發(fā)的形式來發(fā)送的。這是為了便于服務端來提取聊天記錄。此處的群聊,就是服務端在接到請求之后,會將要傳送的消息循環(huán)發(fā)送現(xiàn)有客戶端數(shù)的次數(shù),已達到群聊的目的。 私聊就是客戶端單獨給目標客戶端發(fā)送消息, 當客戶端向服務端發(fā)出了私聊請求時,服務端會將消息直接傳送給目標客戶端。 請求 客戶端 服 務端 數(shù)據(jù)庫 登陸 消息的響應 文件傳送消息的響應 客戶端 A 服務端 客戶端 B 群聊的實現(xiàn) 客戶端 A 客戶端 A 所有人 系統(tǒng)設(shè)計 第 14 頁 共 43 頁 當服務端接到語音聊天請求時,服務端會向目標客戶端發(fā)送語音聊天請求,然后如果目標客戶端同意了請求并摁下語音聊天按鈕的話,兩個客戶端就可以實現(xiàn)語音聊天了。 當服務端接到的是查詢聊天系統(tǒng)或是好友資料的消息時,會向數(shù)據(jù)庫發(fā)送查詢操作的請求,查到之后,會將記錄集賦值給 字段,返回給客戶端,這樣就實現(xiàn)了查詢聊天記錄消息的響應 請求 客戶端 服務端 數(shù)據(jù)庫 注冊消息的響應 語音聊天 消息的響應 請求 天 請求 客戶端 A 服務端 客戶端 B 私聊 的實現(xiàn) 客戶端 A 客戶端 A 客戶端 B 聊天系統(tǒng)服務端的設(shè)計與實現(xiàn) 第 15 頁 共 43 頁 第 四 章 數(shù)據(jù)庫 功能具體設(shè)計 數(shù)據(jù)庫 的建立 數(shù)據(jù)庫的 建立 打開 Access,建立名為 的數(shù)據(jù)庫,其中包括 clientsql 和 ltjl 兩張表格, clientsql表格成員有: 昵稱 ,年齡 ,性別 ,密碼 ,真實姓名 ,星座 ,血型 ,生肖 ,手機 。 定義昵稱為文本型,年齡為整數(shù)型,性別為文本型,密碼為文本型,手機號為數(shù)字型,其他的為文本型。定義為 clientsql 表 ,然后再建立 ltjl 表格,加入系統(tǒng)時間為時間, username 為文本型,并加入一個文本型變量用于記錄聊天內(nèi)容,建成的表格如下圖所示 : 建立表格 ,其中有成員 系統(tǒng)時間,會話雙方和會話內(nèi)容如下: 數(shù)據(jù)庫的操作 在做這些工作之前,我們需要 添加一個指向 Connection 對象的指針 : _ConnectionPtr m_pConnection。同時我們好需要 一個指向 Recordset 對象的指針 : Clientspl 表示意 Ltjl 表 示意 數(shù)據(jù)庫具體設(shè)計 第 16 頁 共 43 頁 _RecordsetPtr m_pRecordset。那么在初始化 OLE/COM 環(huán)境之后,就可以 連接上 指定的目錄下的數(shù)據(jù)庫了。 在本任務中,我需要數(shù)據(jù)庫能夠完成查詢以及其他的一些讀入讀出和修改等等任務,在 中 加入 _RecordsetPtramp。 GetRecordSet(_bstr_t bstrSQL)。和BOOL ExecuteSQL(_bstr_t bstrSQL)。以下分別為在 中為這兩個函數(shù)加的響應。 ( 1) _RecordsetPtramp。 ADOConn::GetRecordSet(_bstr_t bstrSQL) { try { if(m_pConnection==NULL) OnInitADOConn()。 // 創(chuàng)建記錄集對象 (__uuidof(Recordset))。 // 取得表中的記錄 m_pRecordsetOpen(bstrSQL, (),adOpenDynamic,adLockOptimistic,adCmdUnknown)。 } // 捕捉異常 catch(__error e) { // 顯示錯誤信息 AfxMessageBox(())。 } // 返回記錄集 return m_pRecordset。 } ( 2)執(zhí)行數(shù)據(jù)庫操作的函數(shù) BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL) { // _variant_t RecordsAffected。 try { if(m_pConnection == NULL) OnInitADOConn()。 // Connection 對象的 Execute 方法 :(_bstr_t CommandText, // VARIANT * RecordsAffected, long Options ) // 其中 CommandText 是命令字串,通常是 SQL 命令。 // 參數(shù) RecordsAffected 是操作完成后所影響的行數(shù) , // 參數(shù) Options 表示 CommandText 的類型: adCmdText文本命令;adCmdTable表名 // adCmdProc存儲過程; adCmdUnknown未知 m_pConnectionExecute(bstrSQL,NULL,adCmdText)。 聊天系統(tǒng)服務端的設(shè)計與實現(xiàn) 第 17 頁 共 43 頁 return true。 } catch(__error e) { AfxMessageBox(())。 return false。 } } 在 接 下來的篇幅中,不管是響應注冊還是查找共能都需要用到這兩個函數(shù),其實登陸和查詢用戶資料等功能都只是要在數(shù)據(jù)庫中找到相關(guān)的內(nèi)容,也就是查詢函數(shù),而新用戶注冊,聊天記錄的保存等功能就相當于一個 insert 功能,此時就需要第二個函數(shù)來完成了。 功能的實現(xiàn) 第 18 頁 共 43 頁 第 五 章 功能的實現(xiàn) 實現(xiàn)注冊請求 當 服務端開啟之后, 就會建立一個線程 Thread(LPVOID p)等待客戶機的連接請求,一旦連接上并且驗證沒有超過偵聽上限時 , 就會建立一個線程 ClientThread(LPVOID p)去響應客戶端的請求。 在服務端接收的用戶發(fā)出的注冊請求的時候,就會用到 插入的操作,在 插入新的成員 clientinfo zc。 tk = strtok(NULL,@)。 (tk)。 tk = strtok(NULL,@)。 (tk)。 tk = strtok(NULL,@)。 (tk)。 tk = strtok(NULL,@)。 (tk)。 tk = strtok(NULL,@)。 (tk)。 tk = strtok(NULL,@)。 (tk)。 tk = strtok(NULL,@)。 (tk)。 tk = strtok(NULL,@)。 (tk)。 tk = strtok(NULL,@)。 (tk)。 ()。 注冊的流程如下圖所示: 聊天系統(tǒng)服務端的設(shè)計與實現(xiàn) 第 19 頁 共 43 頁 實現(xiàn)登陸請求 服務器接收到客戶端的登陸請求時,會驗證客戶信息的合法性 。 當服務端接收到得是登陸請求時,會將 clientname 與數(shù)據(jù)庫中的信息對比。如果 clientname屬于數(shù)據(jù)庫中的元素,就進一步驗證。如果不是的話,就會回復賬號錯誤 if(tk==USER) { tk = strtok(NULL,@)。 CString clientname=tk。 CString clientsecret = strtok(NULL,@)。 clientinfo gt。 int jc。 jc=(clientname)。 if(jc==1) { int jcmm。 jcmm=(clientname,clientsecret)。 if(jcmm==1) { CString u_zh=@USER@ON@。 flag=send(uc_sock,u_zh,(),0)。 sDlg(sDlgm_count++,clientname)。 name=tk。 strcpy(uc_name,tk)。 tk=@USER@ON@+tk。 for(i=0。i50。i++) if(sDlgm_ClientSock[i].c_sock!=NULLamp。amp。sDlgm_ClientSock[i].c_sock!=u c_sock) Y N 注冊請求 賬號重復 ? 操作數(shù)據(jù)庫 返回注冊信息 注冊流程 功能的實現(xiàn) 第 20 頁 共 43 頁 { CString u_name(sDlgm_ClientSock[i].c_name)。 u_name=@USER@ON@+u_name。 flag=send(uc_sock,u_name,(),0)。 flag=send(sDlgm_ClientSock[i].c_sock,tk,(),0)。 } } else { //發(fā)送密碼錯誤信號 CString u_mm=@USER@MMCW@。 flag=send(uc_sock,u_mm,(),0)。 } } else { CString u_zh=@USER@NO@。 flag=send(uc_sock,u_zh,(),0)。 //發(fā)送賬號錯誤信號 } } 登陸的流程圖為: 消息群發(fā) 消息群發(fā)其實是一個循環(huán)發(fā)送的過程,當服務器接受到的是群發(fā)的請求時,N Y N Y 等待登陸請求 名字正確? 密碼正確? 登陸成功 登陸流程圖 聊天系統(tǒng)服務端的設(shè)計與實現(xiàn) 第 21 頁 共 43 頁 會自動按套接字的順序循環(huán)發(fā)送消息 else if(tk==SIG) { CString tmp。 tk = strtok(NULL,@)。 for(i=0。i50。i++) if(tk==sDlgm_ClientSock[i].c_name) { tk = strtok(NULL,@)。 tmp=@SIG@+tk。 tk = strtok(NULL,@)。 tmp=tmp+@+tk。 sDlg(sDlgm_count++,tmp)。 flag=send(sDlgm_ClientSock[i].c_sock,tmp,(),0)。 break。 } 消息群發(fā)流程圖: 文件傳送的實現(xiàn) 當服務端接受的是文件傳送請求的時候,要做的事情就是讓客戶端需要接受文件的好友方 收到一個控件消息,這樣好友方就可以選擇接收或是拒絕來,從而文件傳送的功能就實現(xiàn)了 。 CString tmp。 tk = strtok(NULL,@)。 for(i=0。i50。i++) if(tk==sDlgm_ClientSock[i].c_name) { tk = strtok(NULL,@)。 N Y 等待消息群發(fā)請求 群發(fā)請求? 消息群發(fā) 消息群發(fā)流程 功能的實現(xiàn) 第 22 頁 共 43 頁 tmp=@FILE@+tk。 tk = strtok(NULL,@)。 tmp=tmp+@+tk。 sDlg(sDlgm_count++,tk)。 flag=send(sDlgm_ClientSock[i].c_sock,tmp,(),0)。 break。 } 文件傳送流程圖: 語音聊天的實現(xiàn) 當服務端接收到得是 語音聊天請求的時候,就給 聊天對象 客戶端一個speechon 的消息,在客戶端中 ,客戶只需要點擊“語音聊天”按鈕 , 兩個 客戶端就 同時 開始錄音,并發(fā)送音頻文件 ,這樣就實現(xiàn)了語音聊天的功能。 CString tmp。 tk = strtok(NULL,@)。 for(i=0。i50。i++) if(tk==sDlgm_ClientSock[i].c_name) { tk = strtok(NULL,@)。 tmp=@SPEECHON@+tk。 tk = strtok(NULL,@)。 tmp=tmp+@+tk。 sDlg(sDlgm_count++,tk)。 flag=send(sDlgm_ClientSock[i].c_sock,tmp,(),0)。 break。 } N Y 等待文件傳送請求 文件傳送請求? 發(fā)送請求給目標客戶端 文件傳送請求 聊天系統(tǒng)服務端的設(shè)計與實現(xiàn) 第 23 頁 共 43 頁 語音聊天的流程圖: 查詢 操作請求的響應 當服務器接收到得控件消息是查詢時,就可以 將數(shù)據(jù)庫中的對應的好友的信息讀取出來,并作為 控件 消息發(fā)送 給 客戶端。 else if(tk==HYZL) { clientinfo getzl。 CString age,sex,name,star,blood,sx,phone。 tk = strtok(NULL,@)。 (tk)。 age=。 sex=。 name=。 star=。 blood=。 sx=。 phone=。 CStringu_zh=@USER@HYZL@+age+@+sex+@+name+ @+star+@+blood+@+sx+@+phone。 flag=send(uc_sock,u_zh,(),0)。 } N Y 等 待語音聊天請求 語音聊天請求? 發(fā)送請求給目標客戶端 語音聊天 請求 功能的實現(xiàn) 第 24 頁 共 43 頁 查詢操作的流程圖如下: N Y 等待查詢操作請求 查詢操作請求? 操作數(shù)據(jù)庫 查詢操作 請求 返回結(jié)果 功能演示 第 26 頁 共 42 頁 第 六 章 功能演示 服務器啟動成功后: 登陸成功后 如圖: 聊天 功能演示如圖: 接收到語音聊天請求時: 當兩個客戶端都請求了語音聊天的時候,客戶端之間就可以開始 錄制和接收聊天系統(tǒng)服務端的設(shè)計與實現(xiàn) 第 27 頁 共 43 頁 音頻文件了,此時也就說明他們的語音通訊成功 語音通訊成功: 文件傳送功能演示如圖: 群聊 : 功能演示 第 28 頁 共 42 頁 全文總結(jié) 這次任務讓我受益良多,首先,我認識到自己眼界的狹隘性。本來接到任務的時候,我覺得對于一個有 C 語言基礎(chǔ)的人來說,做一個聊天系統(tǒng)應該沒問題的,結(jié)果在一次次的挫折面前,我絕望了。有幸的是我碰到了一個有責任心的好導師,他就像一盞明燈指引著我,激勵著我,讓我從拾斗志 ,他的存在讓我甚至產(chǎn)生了要在未來超越他的決心。其次,我認識到了協(xié)作的重要性,在這幾個月的時間里,我漸漸的產(chǎn)生了一種 害怕的情緒,我怕以后走出社會后會因為沒有能夠互相協(xié)作的同伴而一事無成。在此就本次任務,說說我的體會。 ,我體會到在實踐 的 重要性, C 語言和C++語言是有區(qū)別的,最開始,我只是看看書,對比起來很好理解,但是當我要開始任務的是后,我缺遲疑了,因為我不知道怎么開始。后來還是老師提醒我要腳踏實地,我才認識到自己的幼稚。 2.由于前期工作的不完善,對軟件設(shè)計要求認識不夠清楚,使得后續(xù)的工作不得不經(jīng)常返回去修改個別代碼。使我體會到在設(shè)計中的每一步的重要性,如果上一個步驟不能很好的完成, 在后續(xù)的設(shè)計將會付出幾倍的代價。 3.設(shè)計過程中,經(jīng)常會遇到困難,我學會通過別人的代碼理解語言的含義,然后根據(jù)自己的設(shè)計要求編寫代碼。設(shè)計中得到了指導教師 鄒偉 老師的悉心指導。 4. 不懂就問,這是老師告訴我的真理, 如果一個問題出現(xiàn)了,你和可能通過網(wǎng)上和書上得到片面或者是不正確的結(jié)果,不妨問問老師。 經(jīng)過近三個月的設(shè)計,我深刻體會到:做好一個完整的事情,需要有系統(tǒng)的思維方式和方法,對待一個新的問題,要耐心、要善于運用已有的資源來充實自己。
點擊復制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1