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

正文內(nèi)容

畢業(yè)設(shè)計論文--基于vc的局域網(wǎng)聊天室-wenkub

2022-12-14 17:57:51 本頁面
 

【正文】 I Abstract Along with the highspeed development of the puter science and Inter, chatting on line has been an important method in our munication. Comparing with Email and telephone, the chatline service is more realtime and effective. The subject under discussion adopts the method of the software project ,use procedure designing technique and the work technology. The project use Visual C++ as the development tools,mainly studies under the TCP/IP protocol of LAN chat rooms. This local area work chat tool adopts client/server mechanism(C/S) and is posed of two ponents:the server and the client. The server model is mainly used to prootect all users ’ information ,incuuding user’s name and so on。系統(tǒng)采用 C/S 結(jié)構(gòu),客戶端與客戶端以及客戶端與服務器端之間通過 CSocket 傳送消息 [1]。在內(nèi)部局域網(wǎng)的幫助下,企業(yè)得以簡化信息流程,提高信息交換的速度,從而提高工作效率。即時通訊的發(fā)展 不論是 在基礎(chǔ)應用方面 還是在擴展應用方面都有著飛躍。它的實現(xiàn)無需對企業(yè)原有的局域網(wǎng)硬件進行任何改動,具有實現(xiàn)成本低廉的優(yōu)點,它的使用能有效地降低局域網(wǎng)通信負荷,提高局域網(wǎng)的使用效率,可以很好地解決企業(yè)內(nèi)部局域網(wǎng)的各種通信需求。 武漢理工大學畢業(yè)設(shè)計(論文) 2 如今基于局域網(wǎng)的即時通信工具一般采用 UDP 或者 TCP 協(xié)議體系來實現(xiàn) ,開發(fā)技術(shù)已經(jīng)比較成熟。登錄后,客戶端各用戶可以發(fā)送文字信息,相互聊天。選擇 TCP 協(xié)議而不選 UDP 是為了保證信息的可靠性,不同于 UDP 協(xié)議, TCP 要求在獲得可靠連接后才發(fā)送消息。 第四章討論了整個聊天系統(tǒng)的設(shè)計,介紹了客戶端 /服務器模型,并討論了系統(tǒng)的實現(xiàn)原理和界面設(shè)計。 騰訊無疑是國內(nèi)即時通訊市場的霸主,自從 99 年進入即時通訊領(lǐng)域并迅速占市場之后,其在國內(nèi)用戶數(shù)量始終高居榜首,即 使近幾年面對微軟 MSN 的強大攻勢,騰訊 的時常占有率依然穩(wěn)步增長。并且在兩個客戶端之間不能建立直連的情況下,才由服務器進行中轉(zhuǎn)通信。 上述軟件 都實現(xiàn)了廣域網(wǎng)上的即時通信 ,在使用方面 各有特色,在實現(xiàn)方面也各有所長 。使用 ,可以完成創(chuàng)建、調(diào)試、修改應用程序等的各種操作??梢暬幊淌撬闹匾獞弥弧T谶@個項目中 研究人員為 TCP/IP網(wǎng)絡(luò)通信開發(fā)了一個 API(應用程序接口)。因為在 Socket 環(huán)境下編程很像是打電話的模擬 ,Inter 的 IP 地址就是電話號碼 ,要打電話 ,首先要有個電話插座 ,在程序中就是向系統(tǒng)申請一個 Socket,以后兩臺機器上的程序 “ 交談 ” 都是通過這個 Socket 來進行的。換句話說 ,網(wǎng)絡(luò)互連是兩個計算機或處理器通過網(wǎng)絡(luò)相互傳輸數(shù)據(jù)?;谔捉幼值某绦蛳葎?chuàng)建一個套接字 ,然后再將套接字和目標終點連接起來。利用 Socket 進行通訊 ,有兩種主要的方式。第二種叫作數(shù)據(jù)報文方式 (DatagramSocket) ,又稱無連接方式 ,這時兩臺計算機像是把數(shù)據(jù)放在一封封信里通過網(wǎng)絡(luò)寄給對方 ,信在傳送的過程中有可能會殘缺不全 ,而且 ,后發(fā)出的信也有可能會先收到 ,它對應的是 UDP 協(xié)議 [7]。 武漢理工大學畢業(yè)設(shè)計(論文) 7 4 局域網(wǎng)聊天室的設(shè)計 客戶機 /服務器模式 通信的兩個應用程序間相互作用的主要模式是客戶機 /服務器模式 ,即客戶向服務器發(fā)出服務請求 ,服務器接收到請求后 ,提供相應的服務。 客戶機 /服務器模式在操作過程中采取的是主動請求方式 :首先服務器方要先啟動 ,并根據(jù)請求提供相應服務 : 1) 打開通信通道并告知本地主機 ,它愿意在某一公認地址上接收客戶請求 。 4) 返回第二步 ,等待客戶請求 。 3) 請求結(jié)束后關(guān)閉通信通道并終止。 系統(tǒng)實現(xiàn)原理 聊天系統(tǒng)的設(shè)計跟普通網(wǎng)站設(shè)計有著許多不同的地方,普通網(wǎng)站設(shè)計所考慮的因素,例如,普通網(wǎng)站需要對布局進入大量美化以及動畫設(shè)計等等,而聊天室只要提供滿足訪客雙方直接實時聊天即可。利用這兩類函數(shù)就可以開始寫網(wǎng)絡(luò)通信程序。 ( 3) Listen(): 監(jiān)聽套接字專用,用于向監(jiān)聽套接字發(fā)送對端口監(jiān)聽的命令。 ( 7) Receive(): 用于套接字接受數(shù)據(jù)。具體函數(shù)見下: ( 1) OnAccept(): 監(jiān)聽套接字在端口聽到連接請求時 應用程序框架自動調(diào)用,以告知可以接受請求或拒絕連接。 ( 4) OnReceive(): 框架調(diào)用此函數(shù)來告訴套接字現(xiàn)在可以調(diào)用 Receive 函數(shù)從數(shù)據(jù)緩沖區(qū)取出數(shù)據(jù)。進入聊天室后用戶之間可以進行簡單的文字聊天。當用戶斷開連接后,服務器也會通知該用戶 下線。 界面設(shè)計 圖 5 界面 資源圖 在設(shè)計的過程中,當掌握了核心思想內(nèi)容,成功完成功能實現(xiàn)后,界面設(shè)計永遠是重要的部分。上 半部為服務器名稱設(shè)置,監(jiān)聽端口的設(shè)置。如果沒有勾選也沒關(guān)系,只要在編程過程中正確加入相應內(nèi)容即可!正確的向?qū)гO(shè)置會給你省去很多工作 [13]! 在開 始程序之前先得創(chuàng)建一個派生于 CAsyncSocket 的類,當然也可以直接派生于CSocket。 }。 }。 private: CTcpseverDlg *dlg。 OnReceive()函數(shù)在 MSDN中的聲明是這樣的: virtual void OnReceive( int nErrorCode )。在類 csocket 中直接用到了CTcpseverDlg 類的對象?,F(xiàn)在來 分析 onrev()在類 CTcpseverDlg 中的定義。 武漢理工大學畢業(yè)設(shè)計(論文) 14 for(int j=0。 csrev[mynum].Receive(ss,100)。i++) if(csrev[i]) csrev[i].Send(str,100)。 CEdit *ce=((CEdit*)GetDlgItem(IDC_EDIT1))。并設(shè)置正確的滾動條信息。 函數(shù) setp()起到了一個指針保護作用。 } AfxSocketInit()函數(shù)如果初始化成功則返回非零,否者返回零。 wnd=GetDlgItem(IDC_MARKST)。 wndShowWindow(SW_HIDE)。 (IDB_BITMAP1)。 // return TRUE unless you set the focus to a control } 代碼中又涉及到了虛函數(shù)多態(tài)性,實現(xiàn)了動態(tài)聯(lián)編。 這些代碼首先對窗口進行了一些文本設(shè)置和某些窗口的隱藏。但是 01023 被系統(tǒng)占用了, 只能設(shè)置從 102465535 中的號碼。當點擊清空后會清空聊天區(qū)的信息記錄。下面貼出部分實現(xiàn)代碼: void CTcpseverDlg::Onsend() { CString str,history。 int len=()。 SetDlgItemText(IDC_EDIT1,history+\r\n+str)。函數(shù)先把以前聊天區(qū)的內(nèi)容存儲下來,再把其要發(fā)送的內(nèi)和以前的內(nèi)容都打印到屏幕上。 GetDlgItemText(IDC_EDIT3,ipstr)。 ()。port65536){ SetDlgItemText(IDC_listen,正在監(jiān)聽 ……)。 CWnd *cw=GetDlgItem(IDC_EDIT3)。 cw=GetDlgItem(IDC_listen)。 } else{ MessageBox(綁定監(jiān)聽端口失敗 ,請確認該端口沒有被其它程序占用 )。 wnd=GetDlgItem(IDC_EDIT3)。 wnd=GetDlgItem(IDC_SERVINFORM)。函數(shù) TrimLeft 和 TrimRight 分別意為裁掉該端口字符串的左 邊空格和右邊空格。最后再把信息反饋到屏幕上打印出來。 最后是個公告信息 , 可以直接點擊進行編輯。 CBitmap bitmap。 ((HBITMAP)())。 CString str。 wnd=GetDlgItem(IDC_MARK)。在設(shè)計的過程中對話框的初始化函數(shù)中對兩個控件做了設(shè)置。再將編輯框顯示出來,設(shè)置編輯框中的內(nèi)容為開始獲取的靜態(tài)文本中內(nèi)容。然后隱藏編輯框,顯示靜態(tài)文本。 wnd=GetDlgItem(IDC_MARK)。 wndShowWindow(SW_SHOW)。有一個問題就是在初始化函數(shù)中為什么要將靜態(tài)文本的內(nèi)容復制到編輯框中呢?這個必須要復制的,不然在啟動程序后任何時候點擊對話框都會將靜態(tài)文本內(nèi)容置空。當點擊后,側(cè)邊欄又顯示出 ” ” 符號。 static CRect rectSmall。 GetDlgItem(IDC_SEPARATE)GetWindowRect(amp。 =。 SetWindowPos(NULL,0,0,(),(),SWP_NOMOVE|SWP_NOZORDER )。 } } 實現(xiàn)該過程的核心思想是選擇兩個矩形區(qū)域,并記錄下 他們的位置點坐標。并把記錄下的數(shù)據(jù)填入 rectLarge 中 。這樣當點擊按鈕時自動識別要做怎樣的處理。見下圖: 武漢理工大學畢業(yè)設(shè)計(論文) 23 圖 11 提示斷開連接 在 CSocket 中前面也提到過,當某個套接字獲取到消息與其連接的套接字斷開連接后。在 CAsyncSocket 中定義了很多被框架自動調(diào)用的虛函數(shù), 編程時 要重寫這些函數(shù)。 }。 dlg=severdlg。 }。在這些函數(shù)中分別做了自己的事情。 csrev[csnum].setp(this,csnum)。i++) if(!csrev[i]) csrev[i].Close()。 } else 武漢理工大學畢業(yè)設(shè)計(論文) 25 { GetDlgItem(IDC_CLEAN)EnableWindow(true)。清空按鈕可以點解,否者則為灰色按鈕。 最 初 用 SOCKET 實現(xiàn)的時候, 設(shè)置 連接成功,但是整個服務器等待監(jiān)聽以后便處于一種死鎖狀態(tài)。 當成功開辟 線程 后 , 在聲明的線程函數(shù)中寫入了監(jiān)聽代碼,監(jiān)聽順利完成,然而 問題接著又來了。接著問題又出現(xiàn) 了,雖然成功的接受和發(fā)送了消息,但是消息最后會出現(xiàn)亂碼。全局函數(shù)和變量雖然對很多棘手的問題都能方便實現(xiàn),但是對程序的封裝性和可 移植性是個很大的挑戰(zhàn)。 之后 學習了 CSocket 類及其實現(xiàn)過程,發(fā)現(xiàn)這是一種非阻塞的網(wǎng)絡(luò)編程,實現(xiàn)很簡單,可以不用開辟線程處理監(jiān)聽等事件。 這些函數(shù)分別在連接、發(fā)送消息、接受到消息及 斷開連接時被調(diào)用,所以可以 很方便的 在這些函數(shù)里面 添加自己的代碼來完成通訊??蛻舳擞煤瘮?shù) Connect()請求連接,當連接成功后框架自動調(diào)用函數(shù) OnAceept()。 服務器 將 所有客戶端連接在一個網(wǎng)絡(luò)中,所有 客戶端發(fā)送 的信息都 是 發(fā)送到服務器,通過消息過濾后 服務器再將 其 發(fā)送給各個客戶端。 在 開發(fā) 的過程中 原想 進行更多研究,比如圖片發(fā)送、抖動窗口、語音視頻發(fā)送、以及文件傳送等等。 當 基本功能實現(xiàn)后,便開始實現(xiàn)界面設(shè)計,看了孫鑫的視頻教學,對基本界面開發(fā)也有所了解??梢栽?某片區(qū)域擺放兩個控件,靜態(tài)文本和編輯框。當然其中還涉及了信息的傳輸?shù)葐栴}。這 也證實了 ,只有有了壓力才會拼命的去學 ,只要不斷的努力,收獲總是有的 。 void OnAccept(int i){ dlgonac()。 void setp(CTcpseverDlg * severdlg,int num){ mynum=num。 int mynum。 BOOL CTcpseverApp::InitInstance() { if (!AfxSocketInit()) { AfxMessageBox(IDP_SOCKETS_INIT_FAILED)。 int len。 for(int i=1。 } } CDialog::OnClose()。 0xFFF0) == IDM_ABOUTBOX)。 (IDS_ABOUTBOX)。 // Set big icon SetIcon(m_hIcon, FALSE)。 wndGetWindowText(str)。 SetDlgItemText(IDC_EDIT3,
點擊復制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1