東南大學(xué)計算機(jī)網(wǎng)絡(luò)第三次實驗報告_第1頁
東南大學(xué)計算機(jī)網(wǎng)絡(luò)第三次實驗報告_第2頁
東南大學(xué)計算機(jī)網(wǎng)絡(luò)第三次實驗報告_第3頁
東南大學(xué)計算機(jī)網(wǎng)絡(luò)第三次實驗報告_第4頁
東南大學(xué)計算機(jī)網(wǎng)絡(luò)第三次實驗報告_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上東南大學(xué)自動化學(xué)院實 驗 報 告課程名稱: 信息通信網(wǎng)絡(luò)概論 第3次實驗實驗名稱: 實驗三 基于客戶/服務(wù)器模式的網(wǎng)絡(luò)通信編程實現(xiàn) 院 (系): 自動化 專 業(yè): 自動化 姓 名: 學(xué) 號: 實 驗 室: 金智樓 實驗組別: 同組人員: 實驗時間: 2016 年 12 月 13 日評定成績: 審閱教師: 目 錄一實驗?zāi)康暮鸵?#183;···················

2、83;················3二實驗原理································

3、83;··········3三. 實驗方案與實驗步驟·································4四實驗設(shè)備與器材配置··

4、83;······························5五實驗記錄··················

5、83;························5六實驗總結(jié)························

6、83;·················10七思考題或討論題·······························

7、;·····11附錄:部分代碼一 實驗?zāi)康暮鸵?. 進(jìn)一步了解網(wǎng)絡(luò)編程的過程;2. 掌握Windows環(huán)境下基于WinSock的編程方法和通信實現(xiàn); 3. 熟悉客戶/服務(wù)器模式的網(wǎng)絡(luò)通信編程實現(xiàn),編寫一個聊天工具,即以客戶端和服務(wù)器端的模式進(jìn)行互發(fā)消息。二 實驗原理一個在建立分布式應(yīng)用時最常用的范例便是客戶機(jī)/服務(wù)器模型。在這種方案中客戶應(yīng)用程序向服務(wù)器程序請求服務(wù)。這種方式隱含了在建立客戶機(jī)/服務(wù)器間通訊時的非對稱性。客戶機(jī)/服務(wù)器模型工作時要求有一套為客戶機(jī)和服務(wù)器所共識的慣例來保證服務(wù)能夠被提供(或被接受)。這一套慣例包含了一套協(xié)議。它

8、必須在通訊的兩頭都被實現(xiàn)。根據(jù)不同的實際情況,協(xié)議可能是對稱的或是非對稱的。在對稱的協(xié)議中,每一方都有可能扮演主從角色;在非對稱協(xié)議中,一方被不可改變地認(rèn)為是主機(jī),而另一方則是從機(jī)。一個對稱協(xié)議的例子是Internet中用于終端仿真的TELNET。而非對稱協(xié)議的例子是Internet中的FTP。無論具體的協(xié)議是對稱的或是非對稱的,當(dāng)服務(wù)被提供時必然存在“客戶進(jìn)程”和“服務(wù)進(jìn)程”。 一個服務(wù)程序通常在一個眾所周知的地址監(jiān)聽對服務(wù)的請求,也就是說,服務(wù)進(jìn)程一直處于休眠狀態(tài),直到一個客戶對這個服務(wù)的地址提出了連接請求。在這個時刻,服務(wù)程序被“驚醒”并且為客戶提供服務(wù)對客戶的請求作出適當(dāng)?shù)姆磻?yīng)。這一請

9、求/相應(yīng)的過程可以簡單的用圖2-1表示。雖然基于連接的服務(wù)是設(shè)計客戶機(jī)/服務(wù)器應(yīng)用程序時的標(biāo)準(zhǔn),但有些服務(wù)也是可以通過數(shù)據(jù)報套接口提供的。圖2-1 客戶機(jī)/服務(wù)器模型三 實驗方案與實驗步驟1、 客戶機(jī)/服務(wù)器工作流程圖3.1 客戶機(jī)/服務(wù)器工作流程2、 聊天室的工作流程圖3.2 聊天室工作流程首先,服務(wù)器要創(chuàng)建一個用于偵聽的套接字,為該套接字分配地址之后,調(diào)用listen()函數(shù)使它處于偵聽狀態(tài);客戶機(jī)在創(chuàng)建套接字完畢后,為套接字分配地址,然后調(diào)用connect()函數(shù),請求與服務(wù)器套接字連接;服務(wù)器套接字在收到客戶機(jī)的連接請示后,調(diào)用accept()函數(shù),該函數(shù)創(chuàng)建一個用于連接的套接字。應(yīng)用

10、該套接字和客戶機(jī)上的連接套接字,用戶就可以在服務(wù)器和客戶機(jī)之間進(jìn)行數(shù)據(jù)傳輸了。在結(jié)束傳輸之后,客戶機(jī)調(diào)用closesocket()函數(shù)關(guān)閉套接字,服務(wù)器也調(diào)用該函數(shù)關(guān)閉用于偵聽和連接的套接字。3、 套接字事件處理相關(guān)函數(shù)OnAccept():監(jiān)聽套接字在斷口聽到連接請求時,應(yīng)用程序框架調(diào)用該函數(shù)以告之可以接受或拒絕連接請求,調(diào)用Accept來接受請求,建立連接。OnConnect():當(dāng)客戶端套接字連接請求完成后,應(yīng)用程序框架調(diào)用該函數(shù),告之是否成功。OnSend():框架調(diào)用該函數(shù)通知該套接字現(xiàn)在可以調(diào)用Send函數(shù)開始傳送數(shù)據(jù)。OnReceive():框架調(diào)用該函數(shù)通知套接字可以調(diào)用Rec

11、eive函數(shù)從數(shù)據(jù)緩沖區(qū)中取數(shù)據(jù)。OnClose():框架調(diào)用該函數(shù)告之與其相連的對方套接字已被關(guān)閉。4、 系統(tǒng)實現(xiàn)圖3.3 系統(tǒng)實現(xiàn)過程四 實驗設(shè)備與器材配置電腦、VC6.0五 實驗記錄1、 界面(1) 選擇:客戶機(jī)、服務(wù)器;(2) 輸入:服務(wù)器名稱、服務(wù)器端口、發(fā)送的消息;(3) 輸出顯示:發(fā)送的消息、接收的消息、發(fā)送和接收消息數(shù)目;(4) 按鈕:連接/偵聽、斷開、發(fā)送、清空。圖5.1 界面設(shè)計2、 功能描述(1)服務(wù)器端i. 建立Socket,綁定端口,并監(jiān)聽;ii. 接受客戶端的連接;iii. 與客戶端進(jìn)行通訊;iv. 斷開連接。圖5.2 服務(wù)器端(2)客戶端i. 建立Socket,并

12、申請連接到服務(wù)器;ii. 與服務(wù)器進(jìn)行通訊;iii. 斷開連接。圖5.3 客戶機(jī)端3、 改進(jìn)(1) 獲取對方主機(jī)信息通過函數(shù)gethostname(hostname,sizeof(hostname)得到主機(jī)名,客戶機(jī)獲得服務(wù)器主機(jī)名為2013-WQ,服務(wù)器獲得客戶機(jī)主機(jī)名為2013-WQ(實驗時使用同一臺電腦進(jìn)行調(diào)試,所以主機(jī)名是一樣的),添加到接收信息列表中信息前面。(2) 添加發(fā)送接收時間通過函數(shù)time()、localtime()獲得當(dāng)前系統(tǒng)時間,能夠顯示發(fā)送接收時間,格式為年/月/日 時/分/秒,添加到接收信息列表中信息首部。(3) 顯示發(fā)送、接收消息總數(shù)通過m_list.GetCou

13、nt()函數(shù)實現(xiàn)對列表中發(fā)送和接收到的信息計數(shù),并顯示在界面上,清空列表后,相應(yīng)的重置為0。(4) 清空列表通過函數(shù)m_list.ResetContent()實現(xiàn)清空列表。(5) 添加背景圖片、改變控件背景色、字體等。上傳bmp圖片到Bitmap資源文件夾中,在OnPaint()中添加代碼,通過不同圖片的ID來設(shè)置不同的背景圖片。通過加入WM_CTLCOLOR消息,自動生成OnCtlColor()函數(shù),利用SetBkMode()、SetTextColor()、SetBkColor()、CreateSolidBrush()、SetFont()等函數(shù)設(shè)置背景格式、改變控件背景色和字體大小顏色等。圖

14、5.4 改進(jìn)功能六 實驗總結(jié)在原demo程序的基礎(chǔ)上,增加了獲取對方主機(jī)名、添加發(fā)送時間、清空列表等功能,并且嘗試添加背景圖片,利用WM_CTLCOLOR消息實現(xiàn)對MFC界面的修改。通過本次實驗,我對“點對點”模型有了非常深刻的認(rèn)識,進(jìn)一步了解了網(wǎng)絡(luò)編程的過程,掌握了Windows環(huán)境下基于WinSock的編程方法和通訊實現(xiàn),并且實現(xiàn)了客戶端和服務(wù)器的連接通信。對相關(guān)套接字事件處理函數(shù)OnAccept()、OnConnect()、OnSend()、OnReceive()、OnClose()有了一定了解,熟悉了服務(wù)器和客戶端不同的工作流程。七 思考題或討論題1、 結(jié)合所學(xué)知識,談?wù)勛约簩CP三

15、次握手的理解。1) 主機(jī)A向主機(jī)B發(fā)出連接請求數(shù)據(jù)包:“我想給你發(fā)數(shù)據(jù),可以嗎?”,這是第一次對話;2) 主機(jī)B向主機(jī)A發(fā)送同意連接和要求同步(同步就是兩臺主機(jī)一個在發(fā)送,一個在接收,協(xié)調(diào)工作)的數(shù)據(jù)包:“可以,你什么時候發(fā)?”,這是第二次對話;3) 主機(jī)A再發(fā)出一個數(shù)據(jù)包確認(rèn)主機(jī)B的要求同步:“我現(xiàn)在就發(fā),你接著吧!”,這是第三次對話。三次“對話”的目的是使數(shù)據(jù)包的發(fā)送和接收同步,經(jīng)過三次“對話”之后,主機(jī)A才向主機(jī)B正式發(fā)送數(shù)據(jù)。2、 TCP協(xié)議有什么優(yōu)點,根據(jù)你的理解說說為什么http要采用TCP作為底層協(xié)議?(1) 優(yōu)點:面向連接、傳輸可靠、無擁塞、無亂序、無丟包、完整性檢查、可重傳;

16、(2) TCP協(xié)議對應(yīng)于傳輸層,而HTTP協(xié)議對應(yīng)于應(yīng)用層,Http協(xié)議是建立在TCP協(xié)議基礎(chǔ)之上的,當(dāng)瀏覽器需要從服務(wù)器獲取網(wǎng)頁數(shù)據(jù)的時候,會發(fā)出一次Http請求。Http會通過TCP建立起一個到服務(wù)器的連接通道,當(dāng)本次請求需要的數(shù)據(jù)完畢后,Http會立即將TCP連接斷開。附錄:(部分代碼)1、獲取對方主機(jī)信息添加發(fā)送接收時間void CTalkDlg:OnReceive()CString mDay;CString mTime;CString ttime;time_t t1; t1 = time(NULL); /機(jī)器時間struct tm *p; p = localtime(&t1)

17、; /轉(zhuǎn)換為本地時間mDay.Format("%4d/%2d/%2d",1900+p->tm_year,1+p->tm_mon,p->tm_mday);mTime.Format("%3d:%2d:%2d",p->tm_hour,p->tm_min,p->tm_sec);char* pBuf = new char1025;/char pBuf1025;int nBufSize = 1024;int nReceived;char hostname100;CString strReceived; nReceived = m_

18、sConnectSocket.Receive(pBuf,nBufSize); /接收消息 /判斷消息接收是否成功?if(nReceived!=SOCKET_ERROR)gethostname(hostname,sizeof(hostname); /獲取對方主機(jī)信息pBufnReceived = NULL; /保留接收消息的有效部分strReceived = pBuf; /將消息轉(zhuǎn)化為CString對象/添加主機(jī)信息和發(fā)送時間strReceived=mDay+mTime+" "+hostname+": "+strReceived;/將消息添加到“已接收的消

19、息”列表框m_listReceived.AddString(strReceived);m_Countb = m_listReceived.GetCount();/顯示接收信息數(shù)UpdateData(FALSE); /更新對話框elseAfxMessageBox("信息接收錯誤!",MB_OK|MB_ICONSTOP); delete pBuf;2、 顯示發(fā)送、接收消息總數(shù)void CTalkDlg:OnSendMsg() CString mDay;CString mTime;CString ttime;time_t t1; t1 = time(NULL); /機(jī)器時間str

20、uct tm *p; p = localtime(&t1); /轉(zhuǎn)換為字符串時間mDay.Format("%4d/%2d/%2d",1900+p->tm_year,1+p->tm_mon,p->tm_mday);mTime.Format("%3d:%2d:%2d",p->tm_hour,p->tm_min,p->tm_sec);int nLen;/消息長度int nSent;/已發(fā)送消息的長度/從對話框取回數(shù)據(jù)UpdateData(TRUE);/判斷要發(fā)送的消息是否為空if(!m_strMsg.IsEmpty(

21、)nLen = m_strMsg.GetLength();/獲取消息的長度nSent = m_sConnectSocket.Send(LPCTSTR(m_strMsg),nLen); /發(fā)送消息if(nSent!=SOCKET_ERROR) /發(fā)送是否成功/添加主機(jī)信息和發(fā)送時間m_strMsg=mDay+mTime+" send: "+m_strMsg;/將消息添加到“已發(fā)送列表框”m_listSent.AddString(m_strMsg);m_Counta = m_listSent.GetCount();/顯示發(fā)送信息數(shù)UpdateData(FALSE); /更新對話

22、框elseAfxMessageBox("信息發(fā)送錯誤",MB_OK|MB_ICONSTOP);m_strMsg.Empty();/清除當(dāng)前信息UpdateData(FALSE);3、 清空列表void CTalkDlg:OnButton1() / TODO: Add your control notification handler code herem_listSent.ResetContent();/清空發(fā)送列表m_Counta = m_listSent.GetCount();/重置發(fā)送消息數(shù)UpdateData(FALSE);void CTalkDlg:OnButto

23、n2() / TODO: Add your control notification handler code herem_listReceived.ResetContent();/清空接受列表m_Countb = m_listReceived.GetCount();/重置接收消息數(shù)UpdateData(FALSE);4、 添加背景圖片void CTalkDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.Ge

24、tSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);else/CDialo

25、g:OnPaint();CPaintDC dc(this); CRect rect; GetClientRect(&rect); CDC dcMem; dcMem.CreateCompatibleDC(&dc); CBitmap bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP3); /IDB_BITMAP3是對應(yīng)的IDBITMAP bitmap; bmpBackground.GetBitmap(&bitmap); Cbitmap*pbmpOld=dcMem.SelectObject(&bmpBackground); dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0, bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);5、 改變背景色、字體大小顏色HB

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論