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

正文內(nèi)容

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

2024-12-07 17:57本頁面
  

【正文】 CBitmap bitmap。 index++。 } 當(dāng)點(diǎn)擊圖片時(shí),可以更換圖片。 } else { GetDlgItem(IDC_CLEAN)EnableWindow(true)。 void CTcpseverDlg::OnMouseMove(UINT nFlags, CPoint point) { UpdateData()。 } else{ MessageBox(端口輸入有誤 ,請重新輸入 )。 wnd=GetDlgItem(IDC_SERVINFORM)。 武漢理工大學(xué)畢業(yè)設(shè)計(jì)(論文) 33 wnd=GetDlgItem(IDC_EDIT4)。 wnd=GetDlgItem(IDC_EDIT3)。 } CString strServ,strPort。 } else{ MessageBox(綁定監(jiān)聽端口失敗 ,請確認(rèn)該端口沒有被其它程序占用 )。 cw=GetDlgItem(IDC_EDIT1)。 cw=GetDlgItem(IDC_listen)。 cw=GetDlgItem(IDC_EDIT4)。 CWnd *cw=GetDlgItem(IDC_EDIT3)。 (this,csnum)。port65536){ SetDlgItemText(IDC_listen,正在監(jiān)聽?? )。 if(port1024amp。 ()。 GetDlgItemText(IDC_EDIT4,portstr)。 GetDlgItemText(IDC_EDIT3,ipstr)。 void CTcpseverDlg::Onlisten() { CString ipstr,portstr。 CDialog::OnLButtonDown(nFlags, point)。 wndShowWindow(SW_SHOW)。 wndShowWindow(SW_HIDE)。 wnd=GetDlgItem(IDC_MARK)。 void CTcpseverDlg::OnLButtonDown(UINT nFlags, CPoint point) { CWnd* wnd。 return TRUE。 (0,SS_BITMAP)。 CBitmap bitmap。 SetDlgItemText(IDC_EDIT3,亡羊哺狼 )。 wndSetWindowText(str)。 wndGetWindowText(str)。 CString str。 // Set big icon SetIcon(m_hIcon, FALSE)。 pSysMenuAppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu)。 (IDS_ABOUTBOX)。 CMenu* pSysMenu = GetSystemMenu(FALSE)。 0xFFF0) == IDM_ABOUTBOX)。 BOOL CTcpseverDlg::OnInitDialog() { CDialog::OnInitDialog()。 } } CDialog::OnClose()。i++) { if(csrev[i]) { csrev[i].Send(str,len)。 for(int i=1。 if(confirm==IDYES) { str=服務(wù)器: +severname+已退出 \n 您與服務(wù)器斷開連接 。 int len。 } 武漢理工大學(xué)畢業(yè)設(shè)計(jì)(論文) 30 } 當(dāng)服務(wù)器斷開后,服務(wù)器應(yīng)該釋放所有創(chuàng)建的套接字 ,并且發(fā)送退出信息 。 BOOL CTcpseverApp::InitInstance() { if (!AfxSocketInit()) { AfxMessageBox(IDP_SOCKETS_INIT_FAILED)。 在應(yīng)用程序類中的初始化函數(shù)里對套接字的版本進(jìn)行協(xié)商,選擇合適的版本號。 int mynum。 }。 void setp(CTcpseverDlg * severdlg,int num){ mynum=num。 void OnClose(int i){ dlgoncl()。 void OnAccept(int i){ dlgonac()。 class csocket:public CSocket { public: void OnReceive(int i){ dlgonrev(mynum)。這 也證實(shí)了 ,只有有了壓力才會(huì)拼命的去學(xué) ,只要不斷的努力,收獲總是有的 。在編寫代碼前對相應(yīng)知識(shí)更是知道甚少 。當(dāng)然其中還涉及了信息的傳輸?shù)葐栴}。當(dāng)點(diǎn)擊那片區(qū)域后隱藏靜態(tài)文本,顯示編輯框。可以在 某片區(qū)域擺放兩個(gè)控件,靜態(tài)文本和編輯框。當(dāng)點(diǎn)擊狀態(tài)欄時(shí)那塊區(qū)域會(huì)變成可編輯的狀態(tài),并且那些以前已經(jīng)存在的文字會(huì)被全部選中。 當(dāng) 基本功能實(shí)現(xiàn)后,便開始實(shí)現(xiàn)界面設(shè)計(jì),看了孫鑫的視頻教學(xué),對基本界面開發(fā)也有所了解。 在成功完成文字聊天后也嘗試過發(fā)送語音信息, 在調(diào)用 API 函數(shù)檢測硬件 信息 時(shí)便出現(xiàn)了 問題。 在 開發(fā) 的過程中 原想 進(jìn)行更多研究,比如圖片發(fā)送、抖動(dòng)窗口、語音視頻發(fā)送、以及文件傳送等等。如果是進(jìn)行大規(guī)模的圖片、語音、視頻傳輸時(shí),特別是在用戶很多的情況下 服務(wù)器承受的 壓力 也是很大 的 。 服務(wù)器 將 所有客戶端連接在一個(gè)網(wǎng)絡(luò)中,所有 客戶端發(fā)送 的信息都 是 發(fā)送到服務(wù)器,通過消息過濾后 服務(wù)器再將 其 發(fā)送給各個(gè)客戶端。在聊天過程中當(dāng)消息到來時(shí)框架會(huì)自動(dòng)調(diào)用函數(shù)OnReceive,可以在這個(gè)函數(shù)內(nèi)部寫入 函數(shù) Receive()接收 消息??蛻舳擞煤瘮?shù) Connect()請求連接,當(dāng)連接成功后框架自動(dòng)調(diào)用函數(shù) OnAceept()。如果不這樣做,應(yīng)用程序框架也會(huì)調(diào)用上述函數(shù),但不會(huì)實(shí)現(xiàn)任何內(nèi)容。 這些函數(shù)分別在連接、發(fā)送消息、接受到消息及 斷開連接時(shí)被調(diào)用,所以可以 很方便的 在這些函數(shù)里面 添加自己的代碼來完成通訊。在 CSocket 中當(dāng)應(yīng) 用程序框架收到某些特殊事件的消息時(shí)會(huì)自動(dòng)調(diào)用某些函數(shù),在這些特殊的函數(shù)中可以寫入自己武漢理工大學(xué)畢業(yè)設(shè)計(jì)(論文) 27 的代碼來完成某些事件。 之后 學(xué)習(xí)了 CSocket 類及其實(shí)現(xiàn)過程,發(fā)現(xiàn)這是一種非阻塞的網(wǎng)絡(luò)編程,實(shí)現(xiàn)很簡單,可以不用開辟線程處理監(jiān)聽等事件。在多文件程序中, 全局變量可能在多個(gè)地方被修改 ,所以 維護(hù)起來麻煩 ,在查錯(cuò) 時(shí) 也不好發(fā)現(xiàn) 。全局函數(shù)和變量雖然對很多棘手的問題都能方便實(shí)現(xiàn),但是對程序的封裝性和可 移植性是個(gè)很大的挑戰(zhàn)??墒沁@次的亂碼出現(xiàn)不同尋常,最后也沒一個(gè)很好的解釋,只有另尋他徑,完成設(shè)計(jì)。接著問題又出現(xiàn) 了,雖然成功的接受和發(fā)送了消息,但是消息最后會(huì)出現(xiàn)亂碼。對于線程函數(shù)中收到的消息怎么傳回給對話框呢? 最初 試圖通過 定義一個(gè)全局變量,再用 API 函數(shù) SetDlgItem()處理 ,但是編譯出現(xiàn) 了 問題 , 指出申明的全局變量沒有定義 。 當(dāng)成功開辟 線程 后 , 在聲明的線程函數(shù)中寫入了監(jiān)聽代碼,監(jiān)聽順利完成,然而 問題接著又來了。 對于這 問題 可謂 百思不得其解,在一次不經(jīng)意的學(xué)習(xí)中發(fā)現(xiàn)了阻塞這種說法,雖然之前也知道 SOCKET 是 堵塞編程,但對阻塞一 詞 還是不明其意。 最 初 用 SOCKET 實(shí)現(xiàn)的時(shí)候, 設(shè)置 連接成功,但是整個(gè)服務(wù)器等待監(jiān)聽以后便處于一種死鎖狀態(tài)。起初選用的是 SOCKET,該方法為網(wǎng)絡(luò)編程的最基礎(chǔ) 實(shí)現(xiàn)。清空按鈕可以點(diǎn)解,否者則為灰色按鈕。 } 該函數(shù)是設(shè)置“清空”按鈕的狀態(tài)的,當(dāng)鼠標(biāo)在對話框中移動(dòng)時(shí)檢測狀態(tài)。 } else 武漢理工大學(xué)畢業(yè)設(shè)計(jì)(論文) 25 { GetDlgItem(IDC_CLEAN)EnableWindow(true)。 void CTcpseverDlg::OnMouseMove(UINT nFlags, CPoint point) { UpdateData()。i++) if(!csrev[i]) csrev[i].Close()。 void CTcpseverDlg::oncl() { for(int i=1。 csrev[csnum].setp(this,csnum)。 Onrev 函數(shù)前面已經(jīng)介紹過,這里介紹其他的幾個(gè)關(guān)鍵函數(shù)。在這些函數(shù)中分別做了自己的事情。 OnAccept 為當(dāng)連接成功后調(diào)用。 }。 private: CTcpseverDlg *dlg。 dlg=severdlg。 }。 }。 }。在 CAsyncSocket 中定義了很多被框架自動(dòng)調(diào)用的虛函數(shù), 編程時(shí) 要重寫這些函數(shù)。在 OnClose 中可以設(shè)置一些代碼,給出相關(guān)操作。見下圖: 武漢理工大學(xué)畢業(yè)設(shè)計(jì)(論文) 23 圖 11 提示斷開連接 在 CSocket 中前面也提到過,當(dāng)某個(gè)套接字獲取到消息與其連接的套接字?jǐn)嚅_連接后。 客戶端的編程和服務(wù)端基本差不多,這里不做詳細(xì)論述。這樣當(dāng)點(diǎn)擊按鈕時(shí)自動(dòng)識(shí)別要做怎樣的處理。rectSeparate)。并把記錄下的數(shù)據(jù)填入 rectLarge 中 。rectLarge)。 } } 實(shí)現(xiàn)該過程的核心思想是選擇兩個(gè)矩形區(qū)域,并記錄下 他們的位置點(diǎn)坐標(biāo)。 SetDlgItemText(IDC_SHOW,str)。 SetWindowPos(NULL,0,0,(),(),SWP_NOMOVE|SWP_NOZORDER )。 } if(GetDlgItemText(IDC_SHOW,str),str==\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n) { str=\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n。 =。 =。 GetDlgItem(IDC_SEPARATE)GetWindowRect(amp。 if(()) { GetWindowRect(amp。 static CRect rectSmall。 圖 10 精簡視圖 void CTcpseverDlg::OnShow() { // TODO: Add your control notification handler code here CString str。當(dāng)點(diǎn)擊后,側(cè)邊欄又顯示出 ” ” 符號。 下圖顯示了點(diǎn)擊公告欄和圖片后的情況: 圖 9 修改資料效果圖 在服務(wù)器中有個(gè) ” ” 收縮符號,當(dāng)點(diǎn)擊它以及它所在位置的垂直方向時(shí)可以把右邊區(qū)域收縮起來。有一個(gè)問題就是在初始化函數(shù)中為什么要將靜態(tài)文本的內(nèi)容復(fù)制到編輯框中呢?這個(gè)必須要復(fù)制的,不然在啟動(dòng)程序后任何時(shí)候點(diǎn)擊對話框都會(huì)將靜態(tài)文本內(nèi)容置空。 CDialog::OnLButtonDown(nFlags, point)。 wndShowWindow(SW_SHOW)。 wndShowWindow(SW_HIDE)。 wnd=GetDlgItem(IDC_MARK)。代碼見下: void CTcpseverDlg::OnLButtonDown(UINT nFlags, CPoint point) 武漢理工大學(xué)畢業(yè)設(shè)計(jì)(論文) 20 { CWnd* wnd。然后隱藏編輯框,顯示靜態(tài)文本。這樣實(shí)現(xiàn)起來比較簡單,方便,無需彈出一個(gè)對話框設(shè)置。再將編輯框顯示出來,設(shè)置編輯框中的內(nèi)容為開始獲取的靜態(tài)文本中內(nèi)容。這樣當(dāng)啟動(dòng)服務(wù)端后顯示出來的就是靜態(tài)文本了,這樣比較美觀。在設(shè)計(jì)的過程中對話框的初始化函數(shù)中對兩個(gè)控件做了設(shè)置。 wndSetWindowText(str)。 wnd=GetDlgItem(IDC_MARK)。 wndGetWindowText(str)。 CString str。這樣可以實(shí)現(xiàn)動(dòng)態(tài)改變圖片。 ((HBITMAP)())。 (bit[index])。 CBitmap bitmap。 index++。 最后是個(gè)公告信息 , 可以直接點(diǎn)擊進(jìn)行編輯。再下面就是服務(wù)器信息。最后再把信息反饋到屏幕上打印出來。當(dāng)正確輸入端口號后,創(chuàng)建了一個(gè)監(jiān)聽套接字并對端口進(jìn)行監(jiān)聽。函數(shù) TrimLeft 和 TrimRight 分別意為裁掉該端口字符串的左 邊空格和右邊空格。 } else{ MessageBox(端口輸入有誤 ,請重新輸入 )。 wnd=GetDlgItem(IDC_SERVINFORM)。 wnd=GetDlgItem(IDC_EDIT4)。 wnd=GetDlgItem(IDC_EDIT3)。 } CString strServ,strPort。 } else{ MessageBox(綁定監(jiān)聽端口失敗 ,請確認(rèn)該端口沒有被其它程序占用 )。 cw=GetDlgItem(IDC_EDIT1)。 cw=GetDlgItem(IDC_listen)
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1