湖南科技大學(xué)計算機網(wǎng)絡(luò)課程設(shè)計報告.doc
《湖南科技大學(xué)計算機網(wǎng)絡(luò)課程設(shè)計報告.doc》由會員分享,可在線閱讀,更多相關(guān)《湖南科技大學(xué)計算機網(wǎng)絡(luò)課程設(shè)計報告.doc(9頁珍藏版)》請在裝配圖網(wǎng)上搜索。
計算機網(wǎng)絡(luò)課程設(shè)計報告姓名: 學(xué)號: 班級: 指導(dǎo)老師: 湖南科技大學(xué)計算機科學(xué)與工程學(xué)院2016年 1 月網(wǎng)絡(luò)聊天程序的設(shè)計與實現(xiàn)一、 課程設(shè)計題目了解Socket通信的原理,在此基礎(chǔ)上編寫一個聊天程序。二、 課程設(shè)計內(nèi)容1TCP/IP協(xié)議與WinSock網(wǎng)絡(luò)編程接口的關(guān)系WinSock 并不是一種網(wǎng)絡(luò)協(xié)議,它只是一個網(wǎng)絡(luò)編程接口,也就是說,它不是協(xié)議,但是它可以訪問很多種網(wǎng)絡(luò)協(xié)議,你可以把它當(dāng)作一些協(xié)議的封裝?,F(xiàn)在的 WinSock已經(jīng)基本上實現(xiàn)了與協(xié)議無關(guān)。你可以使用WinSock來調(diào)用多種協(xié)議的功能。那么,WinSock和TCP/IP協(xié)議到底是什么關(guān)系呢?實際上,WinSock就是TCP/IP協(xié)議的一種封裝,你可以通過調(diào)用WinSock的接口函數(shù)來調(diào)用TCP/IP的各種功能.例如我想用TCP/IP 協(xié)議發(fā)送數(shù)據(jù),你就可以使用WinSock的接口函數(shù)Send()來調(diào)用TCP/IP的發(fā)送數(shù)據(jù)功能,至于具體怎么發(fā)送數(shù)據(jù),WinSock已經(jīng)幫你封裝好了這種功能。2. WinSock編程簡單流程WinSock編程分為服務(wù)器端和客戶端兩部分,TCP服務(wù)器端的大體流程如下:對于任何基于WinSock的編程首先必須要初始化WinSock DLL庫。int WSAStarup( WORD wVersionRequested,LPWSADATA lpWsAData )。wVersionRequested是我們要求使用的WinSock的版本。調(diào)用這個接口函數(shù)可以初始化WinSock 。然后必須創(chuàng)建一個套接字(Socket)。SOCKET Socket(int af,int type,int protocol);套接字可以說是WinSock通訊的核心。WinSock通訊的所有數(shù)據(jù)傳輸,都是通過套接字來完成的,套接字包含了兩個信息,一個是IP地址,一個是Port端口號,使用這兩個信息,就可以確定網(wǎng)絡(luò)中的任何一個通訊節(jié)點。當(dāng)調(diào)用了Socket()接口函數(shù)創(chuàng)建了一個套接字后,必須把套接字與你需要進行通訊的地址建立聯(lián)系,可以通過綁定函數(shù)bind來實現(xiàn)這種聯(lián)系。int bind(SOCKET s,const struct sockaddr FAR* name,int namelen) ;struct sockaddr_inshort sin_family ;u_short sin_port;struct in_addr sin_addr ;char sin_sero8 ;就包含了需要建立連接的本地的地址,包括地址族、IP和端口信息。sin_family字段必須把它設(shè)為AF_INET,這是告訴WinSock使用的是IP地址族。sin_port就是要用來通訊的端口號。sin_addr就是要用來通訊的IP地址信息。在這里,必須還得提一下有關(guān)大頭(big-endian)小頭(little-endian)。因為各種不同的計算機處理數(shù)據(jù)時的方法是不一樣的,Intel X86處理器上是用小頭形式來表示多字節(jié)的編號,就是把低字節(jié)放在前面,把高字節(jié)放在后面,而互聯(lián)網(wǎng)標準卻正好相反,所以,必須把主機字節(jié)轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)的順序。WinSock API提供了幾個函數(shù)。把主機字節(jié)轉(zhuǎn)化成網(wǎng)絡(luò)字節(jié)的函數(shù);u_long htonl(u_long hostlong);u_short htons(u_short hostshort);把網(wǎng)絡(luò)字節(jié)轉(zhuǎn)化成主機字節(jié)的函數(shù);u_long ntohl(u_long netlong);u_short ntohs(u_short netshort) ;這樣,設(shè)置IP地址和port端口時,就必須把主機字節(jié)轉(zhuǎn)化成網(wǎng)絡(luò)字節(jié)后,才能用Bind()函數(shù)來綁定套接字和地址。當(dāng)綁定完成之后,服務(wù)器端必須建立一個監(jiān)聽的隊列來接收客戶端的連接請求。int listen(SOCKET s,int backlog);這個函數(shù)可以把套接字轉(zhuǎn)成監(jiān)聽模式。如果客戶端有了連接請求,我們還必須使用int accept(SOCKET s,struct sockaddr FAR* addr,int FAR* addrlen);來接受客戶端的請求?,F(xiàn)在基本上已經(jīng)完成了一個服務(wù)器的建立,而客戶端的建立的流程則是初始化WinSock,然后創(chuàng)建Socket套接字,再使用int connect(SOCKET s,const struct sockaddr FAR* name,int namelen) ;來連接服務(wù)端。計算機網(wǎng)絡(luò)(第6版)295頁圖6-32所示的系統(tǒng)調(diào)用使用順序:3VC中socket編程步驟服務(wù)器端編程的步驟:1:加載套接字庫,創(chuàng)建套接字(WSAStartup()/socket();2:綁定套接字到一個IP地址和一個端口上(bind();3:將套接字設(shè)置為監(jiān)聽模式等待連接請求(listen();4:請求到來后,接受連接請求,返回一個新的對應(yīng)于此次連接的套接字(accept();5:用返回的套接字和客戶端進行通信(send()/recv();6:返回,等待另一連接請求;7:關(guān)閉套接字,關(guān)閉加載的套接字庫(closesocket()/WSACleanup()??蛻舳司幊痰牟襟E:1:加載套接字庫,創(chuàng)建套接字(WSAStartup()/socket();2:向服務(wù)器發(fā)出連接請求(connect();3:和服務(wù)器端進行通信(send()/recv();4:關(guān)閉套接字,關(guān)閉加載的套接字庫(closesocket()/WSACleanup()。三、 結(jié)果及結(jié)果分析服務(wù)器端:客服端:客戶端發(fā)送hello,服務(wù)器端接收hello;然后服務(wù)器端發(fā)送hi,客戶端接收hi。客戶使用send發(fā)送請求,而服務(wù)器使用send發(fā)送回答。服務(wù)器使用recv接收客戶用send調(diào)用發(fā)送的請求??蛻粼诎l(fā)完請求后用recv接收回答。在調(diào)試過程中,曾輸出了“燙燙燙燙燙燙燙燙燙燙燙燙”。先將服務(wù)器端設(shè)為活動工程,再運行,然后將客戶端設(shè)為活動工程,再運行,即可。由于程序的缺陷,當(dāng)運行多個客戶端時,多個客戶端競爭與服務(wù)器端連接,僅能一個客戶端與服務(wù)器端相連?;贗P多播的網(wǎng)絡(luò)會議程序一、 課程設(shè)計題目設(shè)計一個圖形界面的網(wǎng)絡(luò)會議程序(實現(xiàn)文本多播方式即可)。二、 課程設(shè)計內(nèi)容在局域網(wǎng)中,管理員常常需要將某條信息發(fā)送給一組用戶。如果使用一對一的發(fā)送方法,雖然是可行的,但是過于麻煩,也常會出現(xiàn)漏發(fā)、錯發(fā)。為了更有效的解決這種組通信問題,出現(xiàn)了一種多播技術(shù)(也常稱為組播通信),它是基于IP層的通信技術(shù)。眾所周知,普通IP通信是在一個發(fā)送者和一個接收者之間進行的,我們常把它稱為點對點的通信,但對于有些應(yīng)用,這種點對點的通信模式不能有效地滿足實際應(yīng)用的需求。廣播也是一種實現(xiàn)一對多數(shù)據(jù)通信的模式,但廣播與多播在實現(xiàn)方式上有所不同。廣播是將數(shù)據(jù)從一個工作站發(fā)出,局域網(wǎng)內(nèi)的其他所有工作站都能收到它。這一特征適用于無連接協(xié)議,因為LAN上的所有機器都可獲得并處理廣播消息。使用廣播消息的不利之處是每臺機器都必須對該消息進行處理。多播通信則不同,數(shù)據(jù)從一個工作站發(fā)出后,如果在其它LAN上的機器上面運行的進程表示對這些數(shù)據(jù)有興趣,多播數(shù)據(jù)才會發(fā)給它們。編程步驟1、啟動Visual C+6.0,創(chuàng)建一個控制臺項目工程MultiCase。#define MCASTADDR 233.0.0.1 /多播組地址#define MCASTPORT 5150 /本地端口號Receiver項目實現(xiàn)步驟:(1)、創(chuàng)建一個SOCK_DGRAM類型的Socket。(2)、將此Socket綁定到本地的一個端口上,為了接收服務(wù)器端發(fā)送的多播數(shù)據(jù)。local.sin_family = AF_INET;local.sin_port = htons(MCASTPORT);local.sin_addr.s_addr = INADDR_ANY;if( bind(sock,(struct sockaddr*)&local,sizeof(local) = SOCKET_ERROR )printf( bind failed with:%d n,WSAGetLastError();closesocket(sock);WSACleanup();return -1; (3)、加入多播組。remote.sin_family = AF_INET;remote.sin_port = htons(MCASTPORT);remote.sin_addr.s_addr = inet_addr( MCASTADDR );mcast.imr_multiaddr.s_addr = inet_addr(MCASTADDR);mcast.imr_interface.s_addr = INADDR_ANY;if( setsockopt(sockM,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char*)&mcast,sizeof(mcast) = SOCKET_ERROR) printf(setsockopt(IP_ADD_MEMBERSHIP) failed:%dn,WSAGetLastError(); closesocket(sockM); WSACleanup(); return -1;(4)、接收多播數(shù)據(jù)。Sender實現(xiàn)步驟:(1)、創(chuàng)建一個SOCK_DGRAM類型的Socket。(2)、加入多播組。remote.sin_family = AF_INET;remote.sin_port = htons(MCASTPORT);remote.sin_addr.s_addr = inet_addr( MCASTADDR );if( sockM = WSAJoinLeaf(sock,(SOCKADDR*)&remote, sizeof(remote),NULL,NULL,NULL,NULL, JL_BOTH) = INVALID_SOCKET)printf(WSAJoinLeaf() failed:%dn,WSAGetLastError();closesocket(sock);WSACleanup();return -1;(3)、發(fā)送多播數(shù)據(jù)。2、編譯兩個項目,在局域網(wǎng)中按如下步驟測試:(1)、將Sender.exe拷貝到發(fā)送多播數(shù)據(jù)的上。(2)、將Receiver.exe拷貝到多個要求接收多播數(shù)據(jù)的上。(3)、各自運行相應(yīng)的程序。(4)、在Sender PC上輸入多播數(shù)據(jù)后,你就可以在Receiver PC上看到輸入的多播數(shù)據(jù)。三、結(jié)果及結(jié)果分析Sender:Receiver:Sender與receiver只要綁定相同的多播組地址和端口號,sender就可以向多個receiver發(fā)送信息,receiver也可以接收多個sender發(fā)出的信息。在此只列出一個sender向receiver發(fā)送信息的情況。Tracert與Ping程序設(shè)計與實現(xiàn)一、 課程設(shè)計題目了解Tracert程序的實現(xiàn)原理,并調(diào)試通過。然后參考Tracert程序和教材4.4.2節(jié),編寫一個Ping程序,并能測試本局域網(wǎng)的所有機器是否在線,運行Ping程序。二、 課程設(shè)計內(nèi)容實現(xiàn)原理Tracert程序關(guān)鍵是對IP頭部生存時間(time to live)TTL字段的使用,程序?qū)崿F(xiàn)時是向目地主機發(fā)送一個ICMP回顯請求消息,初始時TTL等于1,這樣當(dāng)該數(shù)據(jù)報抵達途中的第一個路由器時,TTL的值就被減為0,導(dǎo)致發(fā)生超時錯誤,因此該路由生成一份ICMP超時差錯報文返回給源主機。隨后,主機將數(shù)據(jù)報的TTL值遞增1,以便IP報能傳送到下一個路由器,并由下一個路由器生成ICMP超時差錯報文返回給源主機。不斷重復(fù)這個過程,直到數(shù)據(jù)報達到最終的目地主機,此時目地主機將返回ICMP回顯應(yīng)答消息。這樣,源主機只需對返回的每一份ICMP報文進行解析處理,就可以掌握數(shù)據(jù)報從源主機到達目地主機途中所經(jīng)過的路由信息。三、 結(jié)果及結(jié)果分析Tracert程序結(jié)果:輸出數(shù)據(jù)包往返時間及IP地址心得體會 通過本次的課程設(shè)計中對計算機程序?qū)崿F(xiàn)的編寫與對網(wǎng)絡(luò)的某些功能的模擬,本應(yīng)更好地理解并掌握計算機網(wǎng)絡(luò)的基本工作原理和工作過程,以及更好地理解應(yīng)用程序和操作系統(tǒng)之間傳遞控制權(quán)的機制。但是,由于對計算機網(wǎng)絡(luò)的基本原理掌握得不好,及對C語言的生疏,不能很好地利用原理去分析代碼、編寫代碼。因此,不能很好地達到本來的課程設(shè)計目的。不過也使我了解了套接字socket的創(chuàng)建和運用。要注重平時的知識積累,培養(yǎng)查閱技術(shù)文獻、資料及手冊的能力,多動手實踐,提高實際編程能力和靈活運用所學(xué)知識解決問題的能力。- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 湖南 科技大學(xué) 計算機網(wǎng)絡(luò) 課程設(shè)計 報告
鏈接地址:http://www.szxfmmzy.com/p-9460365.html