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

正文內(nèi)容

畢業(yè)設(shè)計(jì)論文--基于vc的局域網(wǎng)聊天室-在線瀏覽

2025-02-05 17:57本頁面
  

【正文】 號,同時設(shè)置一個網(wǎng)名,與服務(wù)器建立連接,如果所取網(wǎng)名已經(jīng)被其他已經(jīng)登錄的客戶端使用,服務(wù)器會告訴客戶端 ,要求重新登錄。服務(wù)器模塊主要用來維護(hù)網(wǎng)絡(luò)上所有用戶的信息,如用戶名;聊天客戶端模塊主要包括用戶登錄、發(fā)送信息、接收信息等 。 研究本課題需要熟練掌握 VC++語言,并且熟悉 VC 平臺 的操作 , 利用 socket 編 程技術(shù) 、 TCP 協(xié)議 進(jìn)行局域網(wǎng)聊天軟件的實(shí)際開發(fā)。 第一章主要討論課題研究的目的和意義,并對主要內(nèi)容作了簡單的介紹。 第三章主要介紹開發(fā)平臺和網(wǎng)絡(luò)編程,對 Socket 的歷史和發(fā)展簡單描述。 第五章主要是對各個功 能的實(shí)現(xiàn)做了詳細(xì)的分析 第六章給出總結(jié),對設(shè)計(jì)過程中出現(xiàn)的問題進(jìn)行分析,概括了整個聊天室系統(tǒng)的優(yōu)缺點(diǎn)。本人取最具代表性的 和 MSN 進(jìn)行了一些研究,作為開發(fā)聊天系統(tǒng)的準(zhǔn)備。騰訊的成功與其對 的不斷創(chuàng)新和完善是分不開的。可以確定騰訊 是以多服務(wù)器提供服務(wù)、服務(wù)器總控客戶端、客戶端之間 UDP 直連通信的。 圖 1 騰訊 服務(wù)器 客戶端模型 與騰訊 不同,微軟的 MSN Messenger 只使用了 TCP 作為傳輸層通信協(xié)議,所有客戶端與服務(wù)器進(jìn)行連接,然后通過與服務(wù)器的 TCP 連 接進(jìn)行中轉(zhuǎn)通信。而 MSN Messenger 所有數(shù)據(jù)都要經(jīng)過服務(wù)器,服務(wù)器壓力可想而知(難怪平時很少見到使用 MSN 進(jìn)行語音視頻聊天的)。 但是 隨著企業(yè)規(guī)模的擴(kuò)大,業(yè)務(wù)量的增加,企業(yè)內(nèi)部的信息越來越私密,企業(yè)只希望員工通過內(nèi)部局域網(wǎng)進(jìn)行溝通與交流,避免企業(yè)內(nèi)部機(jī)密通過 Inter 泄露到外部 ,所以局域網(wǎng)的聊天工具也占了很大的市場 [4]。 包含了一個文本編輯器、資源編輯器、工程編譯工具、一個增量連接器、源代碼瀏覽器、集成調(diào)試工具,以及一套聯(lián)機(jī)文檔。 采用標(biāo)準(zhǔn)的多窗口 Windows 用戶界面,并增加了一些新特性,使得開發(fā)環(huán)境更易于使用,用戶很容易學(xué)會它的使用方法??梢暬夹g(shù)是當(dāng)前發(fā)展迅速并引人注目的技術(shù)之一,它的特點(diǎn)是把原來抽象的數(shù)字、表格、功能邏輯等用直觀的圖形、圖象的形式表現(xiàn)出來 [5]。所謂可視化編程,就是指:在軟件開發(fā)過程中,用直觀的具有一定含義的圖標(biāo)按鈕、圖形化的對象取代原來手工的抽象的編輯、運(yùn)行、瀏覽操作,軟件開發(fā)過程表現(xiàn)為鼠標(biāo)點(diǎn)擊按鈕和拖放圖形化的對象以及指定對象的屬性、行為的過程。 網(wǎng)絡(luò)編程 80 年代初,美國政府的高級研究工程機(jī)構(gòu)( ARPA)給加利福尼亞大 Berkeley 分校提供了資金,讓他們在 UNIX 操作系統(tǒng)下實(shí)現(xiàn) TCP/IP 協(xié) 議。這個 API 稱為 Socket 接口(套接字)。 套接字是從英文單詞 socket 翻譯過來的 , ( Socket 在英文中是插座的意思 ,在這里設(shè)計(jì)者實(shí)際上是暗指 電話插座。對程序員來說 ,也可以把 Socket 看成一個文件指針 ,只要向指針?biāo)傅奈募x寫數(shù)據(jù) ,就可以實(shí)現(xiàn)雙向通訊。套接字是可以被命名和尋址的通信端點(diǎn) ,是網(wǎng)絡(luò)互連終點(diǎn)。網(wǎng)絡(luò)專業(yè)人員將每個網(wǎng)絡(luò)會話的末端稱做 終點(diǎn)。當(dāng)然 ,套接字句柄和文件句柄是不同的 ,武漢理工大學(xué)畢業(yè)設(shè)計(jì)(論文) 6 文件句柄指向一個特定的文件和設(shè)備 ,而套接字句柄并不代表一個特定的終點(diǎn)或目標(biāo)地址。底層的套接字函數(shù)是 WinIAPI 的一部分 ,但使用 MFC 的 CSocket 類 ,它封裝了這些套接字函數(shù)。 CSocket 類提供了一個高級的 Socket 支持 ,運(yùn)用了 MFC 的序列化類來提供和傳輸 Socket 對象。一種叫流方式 ( StreamSocket)也稱面向連接方式。其過程好像客戶機(jī)在給服務(wù)器打電話 ,只有服務(wù)器拿起了聽 筒 ,才有可能開始傳輸數(shù)據(jù) ,這種方式對應(yīng)的 TCP 協(xié)議。流方式的特點(diǎn)是 ,通訊可靠 ,對數(shù)據(jù)有校驗(yàn)和重發(fā)的機(jī)制 ,通常用來作數(shù)據(jù)文件的傳輸如 ftp、 tel 等 。由于兩臺計(jì)算機(jī)之間采用的是客戶機(jī) /服務(wù)器模式 ,為保證數(shù)據(jù)的可靠性 ,可以 采用了基于流方式的套接字編程 [8]??蛻魴C(jī) /服務(wù)器模式的建立基于以下兩點(diǎn) :首先。其次 ,網(wǎng)間進(jìn)程通信完全是異步的 ,相 互通信的進(jìn)程間既不存在父子關(guān)系 ,又不共享內(nèi)存緩沖區(qū) ,因此需要一種機(jī)制為希望通信的進(jìn)程間建立聯(lián)系 ,為二者的數(shù)據(jù)交換提供同步 [9]。 2) 等待客戶請求到達(dá)該端口 。服務(wù)完成后 ,關(guān)閉與客戶的通信鏈路 ,并終止 。 5) 關(guān)閉服務(wù)器。 2) 向服務(wù)器發(fā)服務(wù)請求 ,等待并接收應(yīng)答 。 由此可知 : 1) 客戶與服務(wù)器進(jìn)程的作用是非對稱的 ,因此編碼不同 。只要系統(tǒng)運(yùn)行 ,該服務(wù)進(jìn)程一直存在 ,直到正常終止或被強(qiáng)迫終止。因此,在設(shè)計(jì)聊天系統(tǒng)的過 程中,必須要考慮好以下幾個設(shè)計(jì)要點(diǎn): 在 Inter 上的聊天程序一般都是以服務(wù)器提供服務(wù)端連接響應(yīng),使用者通過客戶端武漢理工大學(xué)畢業(yè)設(shè)計(jì)(論文) 8 程序登錄到服務(wù)器,就可以與登錄在同一服務(wù)器上的用戶交談,這是一個面向連接的通信過程。 為了利用重載套接字的消息相應(yīng)函數(shù) 必須從 CAsyncSocket 派生出自己的套接字類 ,有時為了分開監(jiān)聽套接字和客戶端套接字 ,還應(yīng)該分別派生監(jiān)聽套接字類和客戶端套接字類。整個過程可以分成三個階段 連接建 立 、數(shù)據(jù)傳和拆除連接 [10]。 ( 2) Create(): 創(chuàng)建套接字,在創(chuàng)建監(jiān)聽套接字時必須加上端口號。 ( 4) Connect(): 客 戶端套接字專用,用于向服務(wù)器發(fā)送連接請求。 ( 6) Send(): 用于向套接字發(fā)送數(shù)據(jù)。 客戶端 服務(wù)器 建立服務(wù)端 監(jiān)聽 等待并接受連接 創(chuàng)建連接套接字 發(fā)送消息 Send 接受消息 Receive 關(guān)閉套接字 Close 向服務(wù)端發(fā)送連接請求 Connect 發(fā)送消息 Send 接受消息 Receive 關(guān)閉套接字 Close 武漢理工大學(xué)畢業(yè)設(shè)計(jì)(論文) 9 ( 8) Close(): 關(guān)閉套接字,可由析構(gòu)函數(shù)調(diào)用??梢栽谶@些函數(shù)中寫入自己的代碼,從而更好的完成通信過程??稍谠摵瘮?shù)中調(diào)用 Accept()來連接請求,建立連接。 ( 3) OnSend(): 框架調(diào)用此函數(shù)來通知該套接字現(xiàn)在可以調(diào)用 Send 函數(shù)來傳送數(shù)據(jù)。 ( 5) OnCloes(): 框架調(diào)用該函數(shù)告知套接字與其連接的對方套接字已經(jīng)斷開連接。然后啟動客戶端(可啟動多個),設(shè)置用戶昵稱和連接端口等信息,連接服務(wù)器。當(dāng)用戶發(fā)送信息后,服務(wù)器會收到用戶發(fā)送的信息,然后服務(wù)器把收到的信息發(fā)送給所有在線用戶。當(dāng)用戶進(jìn)入聊天室后,服務(wù)器會發(fā)送相應(yīng)的消息通知該用戶進(jìn)入了聊天室。整個聊天室基于 CSocket 的流式連接放大。該協(xié)議所要求用戶必須先確定連接成功后才能發(fā)送消息,如果是 UDP 協(xié)議那可以不進(jìn)行連接過程,這樣實(shí)時性比較好 [11]。一個好的界面會讓使用者方便操控,會讓功能直觀的實(shí)現(xiàn),也會給人們良好的視覺沖擊。對于基本內(nèi)容發(fā)送及接受消息,設(shè)計(jì)都以比較突出的方式顯示,并且占據(jù)大部分界面。右邊部分為一些其它內(nèi)容設(shè)置 [12]。這樣編譯器會自動的加載有關(guān) Socket的相關(guān)動態(tài)連接庫和靜態(tài)庫及相應(yīng)的頭文件到程序中。 CAsyncSocket 類中封裝了一些有關(guān)套接字之間消息傳遞的函數(shù)。代碼如下: class csocket:public CSocket { public: 注意勾選這項(xiàng)了! 武漢理工大學(xué)畢業(yè)設(shè)計(jì)(論文) 13 void OnReceive(int i){ dlgonrev(mynum)。 void OnAccept(int i){ dlgonac()。 void OnClose(int i){ dlgoncl()。 void setp(CTcpseverDlg * severdlg,int num){ mynum=num。 }。 int mynum。 在上面的代碼中,只解釋一個封裝于 CAsyncSocket 中的函數(shù)。 該函數(shù)定義為虛函數(shù),這樣才可以在派生的新類 csocket 中重新定義,根據(jù)多態(tài)性原理可以當(dāng)應(yīng)用程序框架收到消息后會調(diào)用定義的這個 OnReceive 函數(shù)。該代碼意為用對象 dlg 調(diào)用函數(shù) onrev(), onrev()在類 CTcpseverDlg 中做了聲明和定義, 后續(xù)會 去分析這個函數(shù)。這樣在派生 csocket 類之前一定要對 CTcpseverDlg 類做一個申明。 當(dāng)服務(wù)器收到網(wǎng)絡(luò)發(fā)送的消息后,框架自動調(diào)用函數(shù) OnReceive(),這樣就執(zhí)行了代碼dlgonrev(mynum)。 void CTcpseverDlg::onrev(int mynum) { CString str,str1。 char ss[100]。j100。\039。 (%s,ss)。i=csnum。 GetDlgItemText(IDC_EDIT1,str1)。 SetDlgItemText(IDC_EDIT1,str)。 ceLineScroll(ceGetLineCount()1)。并且在發(fā) 送完成后把信息打印到自己的屏幕上。這樣 就完成了接收并轉(zhuǎn)發(fā)消息的功能。在這些消息調(diào)用中只要正確的加入自己的信息就可以處理好各種事件。 在類 CTcpseverApp 的初始化函數(shù)中對套接字做了一個初始化工作,使工程正確的得到 WinSock 的信息。 return FALSE。這樣可知如果初始化失敗則會調(diào)用函數(shù) AfxMessageBox 彈出錯誤信息。 CString str。 wndGetWindowText(str)。 武漢理工大學(xué)畢業(yè)設(shè)計(jì)(論文) 15 wndSetWindowText(str)。 SetDlgItemText(IDC_EDIT3,亡羊哺狼 )。 CBitmap bitmap。 (0,SS_BITMAP)。 return TRUE。先定義了個 CWnd 的指針。這樣只需 在最前面定義一個 CWnd 的指針就可以動態(tài)的獲取相應(yīng)消息。還設(shè)置了服務(wù)器的昵稱為 亡羊哺狼 ,默認(rèn)監(jiān)聽端口號 。首先服務(wù)器有一個默認(rèn)設(shè)置,服務(wù)器名稱默武漢理工大學(xué)畢業(yè)設(shè)計(jì)(論文) 16 認(rèn)值為“亡羊哺狼”,默認(rèn)端口號是 ,在 32 位機(jī)器上端口號有 65536 個。當(dāng)點(diǎn)擊開始監(jiān)聽后,服務(wù)器設(shè)置 中的按鈕都會變成灰色,不可點(diǎn)擊了,這樣在整個監(jiān)聽過程中維護(hù)了信息的安全性。當(dāng)聊天區(qū)有信息記錄后會變成可點(diǎn)擊按鈕。監(jiān)聽成功,用戶登入,聊天內(nèi)容,用戶退出等信息都會記錄在聊天區(qū)中,方便閱讀。當(dāng)然從 102565535 之間的端口不可能被全部占用。 GetDlgItemText(IDC_EDIT1,history)。 str=severname+:+str。 for(int i=1。i++) { if(csrev[i]) { if( sended=csrev[i].Send(str,len)) { SetDlgItemText(IDC_EDIT2,)。 CEdit *ce=((CEdit*)GetDlgItem(IDC_EDIT1))。 } } } } 這是點(diǎn)擊控件“發(fā)送”的消息響應(yīng)函數(shù)。做完這些工作向各個登入用戶發(fā)送信息。 int port。 severname=ipstr。 ()。 port=atoi(portstr)。amp。 if((port)){ ()。 ()。 cwEnableWindow(false)。 cwEnableWindow(false)。 cwEnableWindow(false)。 cwSetWindowText(本服務(wù)器名稱為 : +severname+\r\n 正在后臺等待用戶連接 ,監(jiān)聽端口 :+portstr+……) 。 ()。 CWnd* wnd。 wndGetWindowText(strServ)。 wndGetWindowText(strPort)。 wndSetWindowText(\n****************服務(wù)器名稱: \n+strServ+\n\n 端口號 : +strPort+\n\n 協(xié)議類型: TCP\n 傳輸控制協(xié)議 \n****************)。 } } 前面一部分代碼捕捉了端口號,但是端口號是以字符串的形式處理的,而不是數(shù)字。這樣防止了用戶某些習(xí)慣性輸入錯誤。然后通過 EnableWindow()把某些窗體設(shè)置為不可點(diǎn)擊。 右邊有個圖片設(shè)置,可以點(diǎn)擊圖片更改到下一幅。打印出了服務(wù)器的監(jiān)聽端口號,昵稱等等,這些由程序動態(tài)獲取。貼出部分實(shí)現(xiàn)代碼: void CTcpseverDlg::OnPic() 武漢理工大學(xué)畢業(yè)設(shè)計(jì)(論文) 19 { static int index。 index=index%5。 int bit[5]={IDB_BITMAP1,IDB_BITMAP2,IDB_BITMAP3,IDB_BITMAP4,IDB_BITMAP5}。 (0,SS_BITMAP)。 } 這是點(diǎn)擊改變圖片的代碼,在 VC 中, ID 號其實(shí)就是一些整數(shù)的標(biāo)記 ,把 ID 存入 一個整型數(shù)組中
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1