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

正文內容

vc局域網(wǎng)聊天程序修正(編輯修改稿)

2025-08-03 12:08 本頁面
 

【文章內容簡介】 要求用戶必須先確定連接成功后才能發(fā)送消息,如果是UDP協(xié)議那可以不進行連接過程,這樣實時性比較好[11]。 界面設計 圖5 界面資源圖 在設計的過程中,當掌握了核心思想內容,成功完成功能實現(xiàn)后,界面設計永遠是重要的部分。一個好的界面會讓使用者方便操控,會讓功能直觀的實現(xiàn),也會給人們良好的視覺沖擊。上圖為該局域網(wǎng)聊天室的服務器界面資源圖。對于基本內容發(fā)送及接受消息,設計都以比較突出的方式顯示,并且占據(jù)大部分界面。上半部為服務器名稱設置,監(jiān)聽端口的設置。右邊部分為一些其它內容設置[12]。5 局域網(wǎng)聊天室的實現(xiàn) 準備工作注意勾選這項了!圖6 設置MFC向導圖該聊天室是基于MFC的CSocket編程,首先建立正確的MFC AppWizard(exe)程序后,進行MFC程序向導的設置中要記得勾選Windows Socket這項。這樣編譯器會自動的加載有關Socket的相關動態(tài)連接庫和靜態(tài)庫及相應的頭文件到程序中。如果沒有勾選也沒關系,只要在編程過程中正確加入相應內容即可!正確的向導設置會給你省去很多工作[13]!在開始程序之前先得創(chuàng)建一個派生于CAsyncSocket的類,當然也可以直接派生于CSocket。CAsyncSocket類中封裝了一些有關套接字之間消息傳遞的函數(shù)。當有相關消息到來時,應用框架會自動調用這些函數(shù),從而可以比較方便的實現(xiàn)套接字之間的信息傳輸。代碼如下:class csocket:public CSocket{public: void OnReceive(int i){ dlgonrev(mynum)。 }。 void OnAccept(int i){ dlgonac()。 }。 void OnClose(int i){ dlgoncl()。 }。 void setp(CTcpseverDlg * severdlg,int num){ mynum=num。 dlg=severdlg。 }。private: CTcpseverDlg *dlg。 int mynum。}。在上面的代碼中,只解釋一個封裝于CAsyncSocket中的函數(shù)。OnReceive()函數(shù)在MSDN中的聲明是這樣的:virtual void OnReceive( int nErrorCode )。該函數(shù)定義為虛函數(shù),這樣才可以在派生的新類csocket中重新定義,根據(jù)多態(tài)性原理可以當應用程序框架收到消息后會調用定義的這個OnReceive函數(shù)。在函數(shù)的實現(xiàn)中加入了自己的代碼:dlgonrev(mynum)。該代碼意為用對象dlg調用函數(shù)onrev(),onrev()在類CTcpseverDlg中做了聲明和定義,后續(xù)會去分析這個函數(shù)。在類csocket中直接用到了CTcpseverDlg類的對象。這樣在派生csocket類之前一定要對CTcpseverDlg類做一個聲明?;蛘甙杨恈socket類的聲明放在類CTcpseverDlg之后。當服務器收到網(wǎng)絡發(fā)送的消息后,框架自動調用函數(shù)OnReceive(),這樣就執(zhí)行了代碼dlgonrev(mynum)?,F(xiàn)在來分析onrev()在類CTcpseverDlg中的定義。void CTcpseverDlg::onrev(int mynum){ CString str,str1。int i。 char ss[100]。 for(int j=0。j100。j++) ss[j]=39。\039。 csrev[mynum].Receive(ss,100)。 (%s,ss)。 for(i=1。i=csnum。i++) if(csrev[i]) csrev[i].Send(str,100)。 GetDlgItemText(IDC_EDIT1,str1)。 str=str1+\r\n+str。 SetDlgItemText(IDC_EDIT1,str)。 CEdit *ce=((CEdit*)GetDlgItem(IDC_EDIT1))。 ceLineScroll(ceGetLineCount()1)。}從定義中可以看出,函數(shù)實現(xiàn)的功能是把收到的信息(某客戶端發(fā)送的)發(fā)送到連接到這個聊天室的所有用戶。并且在發(fā)送完成后把信息打印到自己的屏幕上。并設置正確的滾動條信息。這樣就完成了接收并轉發(fā)消息的功能。下面的OnAccept和OnClose函數(shù)都是框架自動調用的,分別在建立連接和斷開連接后觸發(fā)調用。在這些消息調用中只要正確的加入自己的信息就可以處理好各種事件。函數(shù)setp()起到了一個指針保護作用。在類CTcpseverApp的初始化函數(shù)中對套接字做了一個初始化工作,使工程正確的得到WinSock的信息。部分代碼如下:if (!AfxSocketInit()) { AfxMessageBox(IDP_SOCKETS_INIT_FAILED)。 return FALSE。 }AfxSocketInit()函數(shù)如果初始化成功則返回非零,否者返回零。這樣可知如果初始化失敗則會調用函數(shù)AfxMessageBox彈出錯誤信息。在類CTcpseverDlg的初始化函數(shù)中也做了一些事情,看代碼:BOOL CTcpseverDlg::OnInitDialog(){ CWnd* wnd。 CString str。 wnd=GetDlgItem(IDC_MARKST)。 wndGetWindowText(str)。 wnd=GetDlgItem(IDC_MARK)。 wndSetWindowText(str)。 wndShowWindow(SW_HIDE)。 SetDlgItemText(IDC_EDIT3,亡羊哺狼)。 SetDlgItemText(IDC_EDIT4,1025)。 CBitmap bitmap。 (IDB_BITMAP1)。 (0,SS_BITMAP)。 ((HBITMAP)())。 return TRUE。 // return TRUE unless you set the focus to a control}代碼中又涉及到了虛函數(shù)多態(tài)性,實現(xiàn)了動態(tài)聯(lián)編。先定義了個CWnd的指針。CWnd封裝了函數(shù)GetDlgItem(),這樣對于其派生的比如編輯框類,靜態(tài)文本類,按鈕類等都繼承了此函數(shù)。這樣只需在最前面定義一個CWnd的指針就可以動態(tài)的獲取相應消息。這些代碼首先對窗口進行了一些文本設置和某些窗口的隱藏。還設置了服務器的昵稱為亡羊哺狼。 功能實現(xiàn) 圖7服務器啟動界面圖運行VC,打開服務端時啟動界面如上。首先服務器有一個默認設置,服務器名稱默認值為“亡羊哺狼”,在32位機器上端口號有65536個。但是01023被系統(tǒng)占用了,只能設置從102465535中的號碼。當點擊開始監(jiān)聽后,服務器設置中的按鈕都會變成灰色,不可點擊了,這樣在整個監(jiān)聽過程中維護了信息的安全性。聊天區(qū)右上角有個“清空”按鈕,初始狀態(tài)是灰色的,不可點擊。當聊天區(qū)有信息記錄后會變成可點擊按鈕。當點擊清空后會清空聊天區(qū)的信息記錄。監(jiān)聽成功,用戶登入,聊天內容,用戶退出等信息都會記錄在聊天區(qū)中,方便閱讀。在監(jiān)聽端口過程中可能發(fā)生端口被占用的錯誤信息,這樣就得重新設置端口了。當然從102565535之間的端口不可能被全部占用。下面貼出部分實現(xiàn)代碼:void CTcpseverDlg::Onsend() { CString str,history。 GetDlgItemText(IDC_EDIT1,history)。 GetDlgItemText(IDC_EDIT2,str)。 str=severname+:+str。 int len=()。 for(int i=1。i=csnum。i++) { if(csrev[i]) { if( sended=csrev[i].Send(str,len)) { SetDlgItemText(IDC_EDIT2,)。 SetDlgItemText(IDC_EDIT1,history+\r\n+str)。 CEdit *ce=((CEdit*)GetDlgItem(IDC_EDIT1))。 ceLineScroll(ceGetLineCount()1)。 } } } }這是點擊控件“發(fā)送”的消息響應函數(shù)。函數(shù)先把以前聊天區(qū)的內容存儲下來,再把其要發(fā)送的內榮和以前的內容都打印到屏幕上。做完這些工作向各個登入用戶發(fā)送信息。發(fā)送的聊天記錄灰色了可清空了 圖8 用戶登入后聊天圖void CTcpseverDlg::Onlisten() { CString ipstr,portstr。 int port。 GetDlgItemText(IDC_EDIT3,ipstr)。 severname=ipstr。 GetDlgItemText(IDC_EDIT4,portstr)。 ()。 ()。 port=atoi(portstr)。 if(port1024amp。amp。port65536)
點擊復制文檔內容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1