CUDP通訊入門與簡單示例_第1頁
CUDP通訊入門與簡單示例_第2頁
CUDP通訊入門與簡單示例_第3頁
CUDP通訊入門與簡單示例_第4頁
CUDP通訊入門與簡單示例_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、用則可以使用未被注冊(cè)的動(dòng)態(tài)端口。因?yàn)閁DP報(bào)頭使用兩個(gè)字節(jié)存放端口號(hào),所以端口號(hào)的有效范圍是從0到65535。一般來說,大于49151的端口號(hào)都代表動(dòng)態(tài)端口。OSI參IETFUDP和TCP協(xié)議正數(shù)據(jù)發(fā)送一方(可收一方則通過目標(biāo)而另外一些網(wǎng)絡(luò)應(yīng)數(shù)據(jù)報(bào)的長度是指包括報(bào)頭和數(shù)據(jù)部分在內(nèi)的總字節(jié)數(shù)。因?yàn)閳?bào)頭的長度是固定的,所以該域主要被用來計(jì)算可變長度的數(shù)據(jù)部分(又稱為數(shù)據(jù)負(fù)載)。度根據(jù)操作環(huán)境的不同而各異。從理論上說,包含報(bào)頭在內(nèi)的數(shù)據(jù)報(bào)的最大長度為字節(jié)。不過,一些實(shí)際應(yīng)用往往會(huì)限制數(shù)據(jù)報(bào)的大小,UDP協(xié)議使用報(bào)頭中的校驗(yàn)值來保證數(shù)據(jù)的安全。殊的算法計(jì)算得出,在傳遞到接收方之后,還需要再重新計(jì)算。如

2、果數(shù)據(jù)報(bào)的最大長65535有時(shí)會(huì)降低到用則可以使用未被注冊(cè)的動(dòng)態(tài)端口。因?yàn)閁DP報(bào)頭使用兩個(gè)字節(jié)存放端口號(hào),所以端口號(hào)的有效范圍是從0到65535。一般來說,大于49151的端口號(hào)都代表動(dòng)態(tài)端口。OSI參IETFUDP和TCP協(xié)議正數(shù)據(jù)發(fā)送一方(可收一方則通過目標(biāo)而另外一些網(wǎng)絡(luò)應(yīng)數(shù)據(jù)報(bào)的長度是指包括報(bào)頭和數(shù)據(jù)部分在內(nèi)的總字節(jié)數(shù)。因?yàn)閳?bào)頭的長度是固定的,所以該域主要被用來計(jì)算可變長度的數(shù)據(jù)部分(又稱為數(shù)據(jù)負(fù)載)。度根據(jù)操作環(huán)境的不同而各異。從理論上說,包含報(bào)頭在內(nèi)的數(shù)據(jù)報(bào)的最大長度為字節(jié)。不過,一些實(shí)際應(yīng)用往往會(huì)限制數(shù)據(jù)報(bào)的大小,UDP協(xié)議使用報(bào)頭中的校驗(yàn)值來保證數(shù)據(jù)的安全。殊的算法計(jì)算得出,在

3、傳遞到接收方之后,還需要再重新計(jì)算。如果數(shù)據(jù)報(bào)的最大長65535有時(shí)會(huì)降低到8192字節(jié)。校驗(yàn)值首先在數(shù)據(jù)發(fā)送方通過特某個(gè)數(shù)據(jù)報(bào)在傳輸過程中被第三方篡改或者由于線路噪音等原因受到損壞,發(fā)送和接收方的校驗(yàn)計(jì)算值將不會(huì)相符,由此UDP協(xié)議可以檢測(cè)是否出錯(cuò)。這與TCP協(xié)議是不同的,后者要求必須具有校驗(yàn)值。許多鏈路層協(xié)議都提供錯(cuò)誤檢查,包括流行的以太網(wǎng)協(xié)議,也許想知道為什么UDP也要提供檢查和。其原因是鏈路層以下的協(xié)議在源端和終端之間的某些通道可能不提供錯(cuò)誤檢測(cè)。雖然UDP提供有錯(cuò)誤檢測(cè),但檢測(cè)到錯(cuò)誤時(shí),UDP不做錯(cuò)誤校正,只是簡單地把損壞的消息段扔掉,或者給應(yīng)用程序提供警告信息。UDP協(xié)議的幾個(gè)特性

4、(1)UDP是一個(gè)無連接協(xié)議,傳輸數(shù)據(jù)之前源端和終端不建立連接,當(dāng)它想傳送時(shí)就簡單地去抓取來自應(yīng)用程序的數(shù)據(jù),并盡可能快地把它扔到網(wǎng)絡(luò)上。在發(fā)送端,UDP傳送數(shù)據(jù)的速度僅僅是受應(yīng)用程序生成數(shù)據(jù)的速度、計(jì)算機(jī)的能力和傳輸帶寬的限制;在接收端,UDP把每個(gè)消息段放在隊(duì)列中,應(yīng)用程序每次從隊(duì)列中讀一個(gè)消息段。(2)由于傳輸數(shù)據(jù)不建立連接,因此一臺(tái)服務(wù)機(jī)可同時(shí)向多個(gè)客戶機(jī)傳輸相同的消息。(3DUDP信息包的標(biāo)題很短,只有因此也就不需要維護(hù)連接狀態(tài),包括收發(fā)狀態(tài)等,8個(gè)字節(jié),相對(duì)于TCPO20個(gè)字節(jié)信息包的額外開銷很小。(4D吞吐量不受擁擠控制算法的調(diào)節(jié),只受應(yīng)用軟件生成數(shù)據(jù)的速率、傳輸帶寬、源端和終端

5、主機(jī)性能的限制。(5DUDP使用盡最大努力交付,即不保證可靠交付,因此主機(jī)不需要維持復(fù)雜的鏈接狀態(tài)表(這里面有許多參數(shù)D。UDP是UserDatagramProtocolODO,中文名是用戶數(shù)據(jù)包協(xié)議,是考模型中一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡單不可靠信息傳送服務(wù)。它是RFC768是UDP的正式規(guī)范。UDP報(bào)頭UDP報(bào)頭由4個(gè)域組成,其中每個(gè)域各占用2個(gè)字節(jié),具體如下:源端口號(hào)目標(biāo)端口號(hào)數(shù)據(jù)報(bào)長度校驗(yàn)值UDP協(xié)議使用端口號(hào)為不同的應(yīng)用保留其各自的數(shù)據(jù)傳輸通道。是采用這一機(jī)制實(shí)現(xiàn)對(duì)同一時(shí)刻內(nèi)多項(xiàng)應(yīng)用同時(shí)發(fā)送和接收數(shù)據(jù)的支持。以是客戶端或服務(wù)器端)將UDP數(shù)據(jù)報(bào)通過源端口發(fā)送出去,而數(shù)據(jù)接

6、端口接收數(shù)據(jù)。有的網(wǎng)絡(luò)應(yīng)用只能使用預(yù)先為其預(yù)留或注冊(cè)的靜態(tài)端口;(6)UDP是面向報(bào)文的。發(fā)送方的UDP對(duì)應(yīng)用程序交下來的報(bào)文,在添加首部后就向下交付給IP層。既不拆分,也不合并,而是保留這些報(bào)文的邊界,因此,應(yīng)用程序需要選擇合適的報(bào)文大小。雖然UDP是一個(gè)不可靠的協(xié)議,但它是分發(fā)信息的一個(gè)理想?yún)f(xié)議。例如,在屏幕上報(bào)告股票市場(chǎng)、在屏幕上顯示航空信息等等。UDP也用在路由信息協(xié)議RIPDRoutingInformationProtocol)中修改路由表。在這些應(yīng)用場(chǎng)合下,如果有一個(gè)消息丟失,在幾秒之后另一個(gè)新的消息就會(huì)替換它。UDP廣泛用在多媒體應(yīng)用中,例如,ProgressiveNetwork

7、s公司開發(fā)的RealAudioDO,它是在因特網(wǎng)上把預(yù)先錄制的或者現(xiàn)場(chǎng)音樂實(shí)時(shí)傳送給客戶機(jī)的一種軟件,該軟件使用的RealAudioaudio-on-demandprotocol協(xié)議就是運(yùn)行在UDP之Socket的方法來實(shí)現(xiàn)上的協(xié)議,大多數(shù)因特網(wǎng)電話軟件產(chǎn)品也都運(yùn)行在UDPSocket的方法來實(shí)現(xiàn)我們先使用服務(wù)器代碼:服務(wù)器代碼:日代碼usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Net;usingSystem.Net.Sockets;namespaceUDPclassProgramstatic

8、voidMain(stringargs)intrecv;bytedata=newbyte1024;/得到本機(jī)IP,DOTCP端口號(hào)IPEndPointip=newIPEndPoint(IPAddress.Any,8001);Socketnewsock=newSocket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);/綁定網(wǎng)絡(luò)地址newsock.Bind(ip);Console.WriteLine(ThisisaServer,hostnameis0,Dns.GetHostName();/等待客戶機(jī)連接Console.

9、WriteLine(Waitingforaclient);/得到客戶機(jī)IPIPEndPointsender=newIPEndPoint(IPAddress.Any,0);EndPointRemote=(EndPoint)(sender);recv=newsock.ReceiveFrom(data,refRemote);Console.WriteLine(Messagereceivedfrom0:,Remote.ToString();Console.WriteLine(Encoding.ASCII.GetString(data,0,recv);/客戶機(jī)連接成功后,發(fā)送信息stringwelcom

10、e=你好!;/字符串與字節(jié)數(shù)組相互轉(zhuǎn)換data=Encoding.ASCII.GetBytes(welcome);/發(fā)送信息newsock.SendTo(data,data.Length,SocketFlags.None,Remote);while(true)data=newbyte1024;/發(fā)送接受信息recv=newsock.ReceiveFrom(data,refRemote);Console.WriteLine(Encoding.ASCII.GetString(data,0,recv);newsock.SendTo(data,recv,SocketFlags.None,Remote)

11、;客戶端代碼:日代碼usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Net;usingSystem.Net.Sockets;namespaceUDPClientclassProgramstaticvoidMain(stringargs)bytedata=newbyte1024;stringinput,stringData;/構(gòu)建TCP服務(wù)器Console.WriteLine(ThisisaClient,hostnameis0,Dns.GetHostName();/

12、設(shè)置服務(wù)IP,設(shè)置TCP端口號(hào)IPEndPointip=newIPEndPoint(IPAddress.Parse(),8001);/定義網(wǎng)絡(luò)類型,數(shù)據(jù)連接類型和網(wǎng)絡(luò)協(xié)議UDPSocketserver=newSocket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);stringwelcome=你好!;data=Encoding.ASCII.GetBytes(welcome);server.SendTo(data,data.Length,SocketFlags.None,ip);IPEndPointsender=ne

13、wIPEndPoint(IPAddress.Any,0);EndPointRemote=(EndPoint)sender;data=newbyte1024;/對(duì)于不存在的IP地址,加入此行代碼后,可以在指定時(shí)間內(nèi)解除阻塞模式限制intrecv=server.ReceiveFrom(data,refRemote);Console.WriteLine(Messagereceivedfrom0:,Remote.ToString();Console.WriteLine(Encoding.ASCII.GetString(data,0,recv);while(true)input=Console.Read

14、Line();if(input=exit)break;server.SendTo(Encoding.ASCII.GetBytes(input),Remote);data=newbyte1024;recv=server.ReceiveFrom(data,refRemote);stringData=Encoding.ASCII.GetString(data,0,recv);Console.WriteLine(stringData);Console.WriteLine(StoppingClient.);server.Close();下面咱們?cè)賮硎褂肬dpClient來實(shí)現(xiàn)他們之間的通信服務(wù)器端代碼日

15、代碼usingSystem;usingusingusingSystem.Net;System.Net.Sockets;System.Text;publicclassCustomprivatestaticreadonlyIPAddressGroupAddress=IPAddress.Parse(IP地址);privateconstintGroupPort=11000;privatestaticvoidStartListener()booldone=false;1n,UdpClientlistener=newUdpClient();IPEndPointgroupEP=newIPEndPoint(G

16、roupAddress,GroupPort);trylistener.JoinMulticastGroup(GroupAddress);listener.Connect(groupEP);while(!done)Console.WriteLine(Waitingforbroadcast);bytebytes=listener.Receive(refgroupEP);Console.WriteLine(Receivedbroadcastfrom0:ngroupEP.ToString(),Encoding.ASCII.GetString(bytes,0,bytes.Length);listener

17、.Close();catch(Exceptione)Console.WriteLine(e.ToString();publicstaticintMain(Stringargs)StartListener();return0;客戶端代碼:日代碼usingSystem;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.Text;publicclassClientprivatestaticIPAddressGroupAddress=IPAddress.Parse(IP地址);privatestaticintGroupPort=11000;privatestaticvoidSend(Stringmessage)UdpClientsender=newUdpClient();IPEndPointgroupEP=newIPEndPoint(GroupAddress,GroupPort);tryConsole.WriteLine(Sendingdatagram:0,message);bytebytes=Encoding.ASCII.GetBytes(message);sender

溫馨提示

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

評(píng)論

0/150

提交評(píng)論