




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、東南大學自動化學院實 驗 報 告課程名稱: 信息通信網(wǎng)絡概論 第4次實驗實驗名稱: 實驗四計算機網(wǎng)絡通信應用程序設計 院 (系): 自動化 專 業(yè): 自動化 姓 名: 學 號: 實 驗 室: 金智樓 實驗組別: 同組人員: 實驗時間: 2016 年 12 月 20 日評定成績: 審閱教師: 目 錄(一)基于TCP/IP的計算機網(wǎng)絡通信應用程序設計一實驗目的和要求 ···················
2、83;································3二實驗原理 ················
3、183;·········································3三. 實驗方案與實驗步驟 ······
4、··········································3四實驗設備與器材配置 ······
5、··········································4五實驗記錄 ·······
6、;··················································
7、;·4六實驗總結 ···············································
8、3;·········11附錄:部分代碼(二)基于UDP/IP的計算機網(wǎng)絡通信應用程序設計一實驗目的和要求 ·································
9、83;················17二實驗原理 ································&
10、#183;·······················17三. 實驗方案與實驗步驟 ·······················
11、3;······················17四實驗設備與器材配置 ·························
12、83;····················18五實驗記錄 ····························&
13、#183;···························18六實驗總結 ·····················
14、;···································25七思考題或討論題 ·············
15、·····································25附錄:部分代碼(一)基于TCP/IP的計算機網(wǎng)絡通信應用程序設計一 實驗目的和要求1. 通過本實驗課程的學習,使學生能夠理解TCP協(xié)議通信的基本原理。
16、2.通過運用WinSock接口編寫網(wǎng)絡通信應用程序,掌握TCP網(wǎng)絡應用程序架構的設計思想。3.學會設計利用TCP簡單的應用層協(xié)議。二 實驗原理TCP是面向連接的通信協(xié)議,TCP提供兩臺計算機之間的可靠無錯的數(shù)據(jù)傳輸。應用程序利用TCP進行通信時,源和目標之間會建立一個虛擬連接。這個連接一但建立,兩臺計算機之間就可以把數(shù)據(jù)當作一個雙向字節(jié)流進行交換。三 實驗方案與實驗步驟1、 客戶機/服務器工作流程服務器端1:創(chuàng)建套接字并將套接字綁定到一個本地地址和端口上(create)。2:將套接字設為監(jiān)聽模式,準備接受客戶請求(listen)。3:等待客戶請求到來;請求到來后,接受請求,返回一個新的對應于此
17、次連接的套接字(accept)。4:用返回的套接字和客戶端進行通信(send/receive)。5:返回,等待另一客戶請求。6:關閉套接字??蛻舳?:創(chuàng)建套接字(create)。2:向服務器發(fā)出連接請求(connect)。3:和服務器進行通信(send/receive)。4:關閉套接字。圖3.1 客戶機/服務器工作流程2、 系統(tǒng)實現(xiàn)圖3.2 系統(tǒng)實現(xiàn)過程四 實驗設備與器材配置電腦、VC6.0五 實驗記錄1、 界面(1) 選擇:客戶機、服務器;(2) 輸入:IP設置、端口設置、輸入內容;(3) 輸出顯示:消息列表、發(fā)送和接收消息數(shù)目;(4) 按鈕:連接/偵聽、發(fā)送、清空、退出。圖5.1 界面設計
18、2、 功能描述(1)初始化:服務器點擊偵聽,客戶機輸入服務器IP后,點擊連接實現(xiàn)服務器客戶機之間的連接通信。在界面上顯示連接信息,服務器向客戶機發(fā)送Welcome my friend!,客戶機向服務器發(fā)送I am Paul。圖5.2 初始化(2)客戶機與服務器對話:服務器顯示Server:+發(fā)送的消息 ,客戶機顯示Paul:+發(fā)送的信息。圖5.3客戶機與服務器對話(3)輸入/n在聊天對話框畫一個牛,輸入/p畫一個電話圖5.4 輸入/p畫一個電話圖5.5 輸入/n畫一個電話(4)輸入/l會彈出一個對話框圖5.6 輸入/l彈出一個對話框(5)輸入/r會打開一個windows資源管理器,并打開指定的
19、路徑,當前設置的路徑為:C:/windows/media圖5.7 輸入/r打開一個windows資源管理器3、 改進(1) 獲取發(fā)送方主機名和發(fā)送時間通過函數(shù)gethostname(hostname,sizeof(hostname)得到主機名,客戶機獲得服務器主機名為2013-20140524WQ,服務器獲得客戶機主機名為2013-20140524WQ(實驗時使用同一臺電腦進行調試,所以主機名是一樣的),添加到接收信息列表中信息前面。通過函數(shù)time()、localtime()獲得當前系統(tǒng)時間,能夠顯示發(fā)送接收時間,格式為年/月/日 時/分/秒,添加到接收信息列表中信息首部。圖5.8 獲取主機
20、名、添加發(fā)送時間(2) 自定義字符畫:定義字符串TP_xin_str,輸入/x時調用繪制一個小象圖5.9 自定義字符畫(3) 自定義表情符號:輸入/s時輸出"難過()",輸入/a時輸出"生氣(皿#)",輸入/j時輸出"驚訝(o)"等。圖5.10 自定義表情符號(4) 顯示發(fā)送、接收消息總數(shù)通過m_list.GetCount()函數(shù)實現(xiàn)對列表中發(fā)送和接收到的信息計數(shù),并顯示在界面上。初始化時,發(fā)送數(shù)和接收數(shù)均為1,清空列表后,相應的重置為0。(5)清空列表通過函數(shù)m_list.ResetContent()實現(xiàn)清空列表。(6)添加背景圖片
21、、改變控件背景色、字體等。上傳bmp圖片到Bitmap資源文件夾中,在OnPaint()中添加代碼,通過不同圖片的ID來設置不同的背景圖片。通過加入WM_CTLCOLOR消息,自動生成OnCtlColor()函數(shù),利用SetBkMode()、SetTextColor()、SetBkColor()、CreateSolidBrush()、SetFont()等函數(shù)設置背景格式、改變控件背景色和字體大小顏色等。圖5.10 其他功能六 實驗總結這次實驗與實驗三較為相似,在上次的基礎上,增加了自定義字符畫、符號表情等,進一步加深了對TCP/IP協(xié)議的理解,也能夠根據(jù)生活中的聊天工具如QQ等,增加一些類似的
22、功能,使其應用性更強。附錄:(部分代碼)1、獲取對方主機信息添加發(fā)送接收時間(客戶端和服務器類似,在此只貼出服務器代碼)void CProject2Dlg:OnServerReceive()CString mDay;CString mTime;CString ttime;time_t t1; t1 = time(NULL); /機器時間struct tm *p; p = localtime(&t1); /轉換為本地時間mDay.Format("%4d/%2d/%2d",1900+p->tm_year,1+p->tm_mon,p->tm_mday);
23、mTime.Format("%3d:%2d:%2d",p->tm_hour,p->tm_min,p->tm_sec);BOOL Act=FALSE;CString nRev,nret,nRet;char bufMAX_BUFFER+1;int ret,i,len;char hostname100;ret=m_connectsocket.Receive(buf,MAX_BUFFER,0);if(ret!=SOCKET_ERROR)gethostname(hostname,sizeof(hostname);/獲取對方主機名m_receive+=1;/接收消息數(shù)
24、加1bufret=NULL;nRev=buf;nRet+=mDay+mTime+" "+hostname+" "/添加發(fā)送時間和主機名nret+=CLIENT;nret+=":"len=nret.GetLength();nret=nRev.Right( ( (nRev.GetLength()-len ) ); if(nret.GetAt(0)='/')m_list_msg.AddString(nRet);Act=DoAction(nret);if(Act=FALSE)nRet+=nRev;m_list_msg.AddS
25、tring(nRet);i=m_list_msg.GetCount();m_list_msg.SetCurSel(i-1);m_list_msg.SetCurSel(-1);UpdateData(FALSE);elseAfxMessageBox("消息接收錯誤!");2、 顯示發(fā)送、接收消息總數(shù)void CProject2Dlg:OnSendMsg() / TODO: Add your control notification handler code hereCString buf;int nret;BOOL Act=FALSE;int nLen,i;UpdateData
26、(TRUE);m_outmsg.TrimLeft();if(m_outmsg.IsEmpty()AfxMessageBox("對不起,不能發(fā)送空消息!");return;if(m_server=TRUE)buf+=SERVER;buf+=":"elsebuf+=CLIENT;buf+=":"buf+=m_outmsg;nLen=buf.GetLength();nret = m_connectsocket.Send(LPCTSTR)buf,nLen);if(nret!=SOCKET_ERROR)m_send+=1;/發(fā)送消息數(shù)加1if(
27、m_outmsg.GetAt(0)='/')Act=DoAction(m_outmsg);if(Act=FALSE)m_list_msg.AddString(LPCTSTR)buf);m_outmsg.Empty();i=m_list_msg.GetCount();m_list_msg.SetCurSel(i-1);m_list_msg.SetCurSel(-1);UpdateData(FALSE);elseAfxMessageBox("消息發(fā)送失敗! :(");3、 清空列表void CProject2Dlg:OnRemoveall() / TODO: A
28、dd your control notification handler code herem_list_msg.ResetContent();/清空列表m_receive=0;/重置接收消息數(shù)m_send=0;/重置發(fā)送消息數(shù)UpdateData(FALSE);4、 自定義字符畫void CProject2Dlg:DrawXin()CString TP_xin_str7= " _ _ ", " / / ", " ,-( . ) "," / _ _/ ", " /| ( |("," /
29、_ / | "," |_| |_|-“" int TP_xin_int=7;for(int i=0;i<TP_xin_int;i+)m_list_msg.AddString(TP_xin_stri);5、 自定義表情符號switch(act.GetAt(1)case'm':ShellExecute(NULL,NULL,"老人與海.mp3","wmplayer.exe", NULL,SW_SHOWMAXIMIZED );return TRUE;case 'q':AfxMessageBox(
30、"Quit");return TRUE;case 'l':AfxMessageBox("開心(*)");return TRUE;case 's':AfxMessageBox("難過()");return TRUE;case 'a':AfxMessageBox("生氣(皿#)");return TRUE;case 'j':AfxMessageBox("驚訝(o)");return TRUE;case 'c':AfxMe
31、ssageBox("Circle OoOoOo");return TRUE;case 'r':/AfxMessageBox("Rectangle ");ShellExecute(NULL,"explore","C:/windows/media",NULL,NULL,SW_SHOWNORMAL);return TRUE;case 'n':DrawNiu();return TRUE;case 'p':DrawPhone();return TRUE;case 'x&
32、#39;:DrawXin();return TRUE;default: return FALSE;6、 添加背景圖片void CProject2Dlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSy
33、stemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;dc.DrawIcon(x, y, m_hIcon); / Draw the iconelse/CDialog:OnPaint();CPaintDC dc(this); CRect rect; GetClientRect(&rect); CDC dcMem; dcMem.CreateCompatibleDC(&
34、amp;dc); CBitmap bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP1); /IDB_BITMAP是圖對應的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);7
35、、 改變背景色、字體大小顏色等HBRUSH CProject2Dlg:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) HBRUSH hbr = CDialog:OnCtlColor(pDC, pWnd, nCtlColor);/ TODO: Change any attributes of the DC here/設置顯示字體CFont * cFont=new CFont;cFont->CreateFont(16,0,0,0,FW_SEMIBOLD,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS
36、,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH&FF_SWISS,"Arial");if(pWnd = this)/改變整個界面背景色HBRUSH brush=CreateSolidBrush(RGB(199,237,204); return (HBRUSH)brush; switch(nCtlColor)case CTLCOLOR_STATIC: /對所有靜態(tài)文本控件的設置pDC->SetBkMode(TRANSPARENT); /設置背景為透明pDC->SetTextColor(RGB(255,2
37、55,0); /設置字體顏色pWnd->SetFont(cFont); /設置字體HBRUSH B = CreateSolidBrush(RGB(199,237,204); /創(chuàng)建畫刷return (HBRUSH) B; /返回畫刷句柄break;default:return CDialog:OnCtlColor(pDC,pWnd, nCtlColor);/ TODO: Return a different brush if the default is not desiredreturn hbr;(二)基于UDP/IP的計算機網(wǎng)絡通信應用程序設計一、 實驗目的和要求1 通過本實驗課程的
38、學習,使學生能夠理解UDP協(xié)議通信的基本原理。 2 通過運用WinSock接口編寫網(wǎng)絡通信應用程序,掌握UDP網(wǎng)絡應用程序架構的設計思想。3 學會設計利用UDP簡單的應用層協(xié)議。二、 實驗原理UDP是無連接通信協(xié)議,UDP不保證可靠數(shù)據(jù)的傳輸,但能夠向若干個目標發(fā)送數(shù)據(jù),接收發(fā)自若干個源的數(shù)據(jù)。簡單地說,如果一個主機向另外一臺主機發(fā)送數(shù)據(jù),這一數(shù)據(jù)就會立即發(fā)出,而不管另外一臺主機是否已準備接收數(shù)據(jù)。如果另外一臺主機收到了數(shù)據(jù),它不會確認收到與否。三、 實驗方案與實驗步驟服務器端1.創(chuàng)建套接字并將套接字綁定到一個本地地址和端口上(create);2.等待接收數(shù)據(jù)(ReceiveFrom);3.關
39、閉套接字??蛻舳?.創(chuàng)建套接字(create);2.向服務器發(fā)送數(shù)據(jù)(sendto);3.關閉套接字。四、 實驗設備與器材配置電腦、VC6.0五、 實驗記錄1、 界面(1) 輸入:IP設置、端口設置、輸入內容;(2) 輸出顯示:消息列表;(3) 按鈕:發(fā)送、清空列表、導出消息記錄、退出。圖5.1 界面設計2、 功能描述(1) 初始化:客戶機輸入服務器IP223.3.202.241后,點擊開始聊天。(a)客戶端初始化(b)服務器初始化圖5.2 初始化(2) 客戶機與服務器對話:此時服務器并沒有填寫客戶機的IP地址,能夠接收到客戶機發(fā)送的消息,并且獲得發(fā)送方IP。但是不能發(fā)送消息給客戶機,只有填寫
40、客戶機IP223.3.210.241后,才能發(fā)送消息給客戶機。(a)客戶機端界面(b)服務器端界面圖5.3 客戶機與服務器對話(a)客戶機端界面(b)服務器端界面圖5.3客戶機與服務器對話(3)輸入/n在聊天對話框畫一個牛,輸入/p畫一個電話圖5.4 字符畫(4)輸入/r會打開一個windows資源管理器,并打開指定的路徑,當前設置的路徑為:C:/windows/media圖5.7 輸入/r打開一個windows資源管理器3、 改進(1)添加發(fā)送時間通過函數(shù)time()、localtime()獲得當前系統(tǒng)時間,能夠顯示發(fā)送接收時間,格式為年/月/日 時/分/秒,添加到接收信息列表中信息首部。(
41、2)清空列表通過函數(shù)m_list.ResetContent()實現(xiàn)清空列表。(3)導出消息記錄通過函數(shù)m_list_msg.GetText()把列表中的信息寫入字符串中,再利用文件讀寫函數(shù)fopen()、fwrite()、fclose()將字符串寫入指定文件中。圖5.8 導出消息記錄到txt中(4)輸入/e打開指定網(wǎng)址,輸入/t打開指定圖片圖5.9 輸入指定字符執(zhí)行相應的操作(5)添加背景圖片、改變控件背景色、字體等。方法與實驗(一)中相同,不再贅述。圖5.10 其他功能六、 實驗總結在原有程序的基礎上,增加了保存消息記錄、自定義協(xié)議等功能,同時修改了界面,但是對于MFC中按鈕的界面設置仍然不
42、太了解,嘗試直接在WM_CTLCOLOR消息自動生成OnCtlColor()函數(shù)中進行設置,沒有達到預期效果,希望在以后的學習過程中能夠學到并解決這個問題。通過這次實驗,我對TCP協(xié)議和UDP協(xié)議各自的特點有了一定理解,能夠判斷在不同場合下應使用哪個協(xié)議,掌握并理解了它們的區(qū)別和各自的優(yōu)缺點。七、 思考題或討論題1、 結合所學知識與實驗中的感受,說明TCP協(xié)議和UDP協(xié)議各自的優(yōu)缺點。在工業(yè)控制的現(xiàn)場中,要通過網(wǎng)絡控制一臺焊接機器人的運行,要求控制數(shù)據(jù)能正確傳輸。試分析說明,采用哪種運輸層協(xié)議比較好?另外,網(wǎng)絡中使用的IP電話服務采用的是哪種運輸層協(xié)議?為什么要采用這種協(xié)議?并說明理由。(1)
43、 TCP協(xié)議和UDP協(xié)議各自的優(yōu)缺點:TCP-有連接,所以握手過程會消耗資源,過程為可靠連接,不會丟失數(shù)據(jù),適合大數(shù)據(jù)量交換;UDP-非可靠連接,會丟包,沒有校驗,速度快,無須握手過程; tcp需要首先建立連接,而udp只要綁定端口發(fā)送就行,tcp如果建立連接以后,能夠保證傳送的數(shù)據(jù)包次序,而udp則不能保證數(shù)據(jù)包到達的先后次序,甚至會丟包;編程時,TCP面向連接的,即每次收發(fā)數(shù)據(jù)之前必須通過connect建立連接,也是雙向的,即任何一方都可以收發(fā)數(shù)據(jù),協(xié)議本身提供了一些保障機制保證它是可靠的、有序的,即每個包按照發(fā)送的順序到達接收方。UDP它是無連接的,不可靠的,因為通訊雙方發(fā)送數(shù)據(jù)后不知道
44、對方是否已經(jīng)收到數(shù)據(jù),是否正常收到數(shù)據(jù)。任何一方建立一個socket以后就可以用sendto發(fā)送數(shù)據(jù),也可以用recvfrom接收數(shù)據(jù)。根本不關心對方是否存在,是否發(fā)送了數(shù)據(jù)。它的特點是通訊速度比較快。(2) 應采用TCP協(xié)議,TCP-有連接, 過程為可靠連接,不會丟失數(shù)據(jù),能保證數(shù)據(jù)正確傳輸。(3) 網(wǎng)絡中使用的IP電話服務采用的是UDP協(xié)議,IP電話是實時傳輸,必須使用UDP。UDP 不保證可靠交付,但UCP 比TCP 的開銷要小很多,IP電話接受這樣的服務質量就可以使用UDP。2、思考和調研目前常用的通信工具之一:QQ的基本實現(xiàn)方式??紤]其各種不同的應用可能采取的是TCP和UDP中的哪種
45、協(xié)議。如果需要對本實驗結果進行進一步改進,有哪些想法。附錄:(部分代碼)1、 清空列表void CUDPprojectDlg:OnDelete() / TODO: Add your control notification handler code herem_list_msg.ResetContent();/清空列表2、 導出消息記錄void CUDPprojectDlg:OnDownload() / TODO: Add your control notification handler code hereCString content; CString temp; for(int i=0;
46、i<m_list_msg.GetCount();i+)m_list_msg.GetText(i,temp);/將列表中內容寫入字符串tempcontent+=temp;content+="rn"FILE * fp;fp = fopen("f:消息記錄.txt", "a+");/打開指定目錄fwrite(content, strlen(content), 1, fp);/寫入字符串fclose(fp);3、 自定義指定操作void CUDPprojectDlg:DoAction(LPVOID lParam, char str)CUDPproject
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 禮儀用品企業(yè)環(huán)境保護責任考核試卷
- 周莊超深基坑施工方案
- 紙張加工中的涂布工藝改進考核試卷
- 了解項目管理考試命題思路試題及答案
- 熱電聯(lián)產關鍵技術研究考核試卷
- 2025年【過氧化工藝】考試題及答案
- 海洋能源開發(fā)市場前景分析考核試卷
- 環(huán)保工程綠色交通設計與規(guī)劃考核試卷
- 高一物理綜合試題及答案
- 2023年中國神華煤制油化工有限公司第三批次系統(tǒng)內招聘2人筆試參考題庫附帶答案詳解
- 質量整改通知單(樣板)
- 二子女無財產無債務離婚協(xié)議書
- 裝配作業(yè)指導書
- 換填承載力計算(自動版)
- 公司董事會會議臺賬
- 2021-2022學年福建省廈門市第一中學高二下學期期中生物試題(原卷版)
- 煤礦安管人員七新題庫及答案
- (完整word版)中小學教育質量綜合評價指標框架(試行)
- HIV-1病毒載量測定及質量保證指南
- 電路原理圖設計評審檢查要素表
- 工控機測試標準
評論
0/150
提交評論