Visual C# UDP協(xié)議的收發(fā)實(shí)現(xiàn)
前面我們對(duì)UDP協(xié)議的面向鏈接問(wèn)題進(jìn)行了簡(jiǎn)單的描述。這里我們主要介紹一下Visual C# UDP的主要類(lèi)和使用方法。那么在C#中來(lái)完成UDP協(xié)議的數(shù)據(jù)發(fā)送、接收包使用等問(wèn)題。讓我們一起看看主要內(nèi)容吧。
Visual C# UDP數(shù)據(jù)的發(fā)送、接收包使用的主要類(lèi)及其用法:
用Visual C# UDP協(xié)議的實(shí)現(xiàn),最為常用,也是最為關(guān)鍵的類(lèi)就是UdpClient,UdpClient位于命名空間System.Net.Sockets中,Visual C# UDP數(shù)據(jù)包的發(fā)送、接收都是通過(guò)UdpClient類(lèi)的。表01和表02是UdpClient類(lèi)中常用方法和屬性及其簡(jiǎn)要說(shuō)明。
方法 說(shuō)明 Close 關(guān)閉 UDP 連接 Connect 建立與遠(yuǎn)程主機(jī)的連接 DropMulticastGroup 退出多路廣播組 JoinMulticastGroup 將 UdpClient 添加到多路廣播組 Receive 返回已由遠(yuǎn)程主機(jī)發(fā)送的 UDP 數(shù)據(jù)文報(bào) Send 將 UDP 數(shù)據(jù)文報(bào)發(fā)送到遠(yuǎn)程主機(jī)。
屬性 說(shuō)明 Active 獲取或設(shè)置一個(gè)值,該值指示是否已建立了與遠(yuǎn)程主機(jī)的連接 Client 獲取或設(shè)置基礎(chǔ)網(wǎng)絡(luò)套接字 表02:UdpClient類(lèi)中常用方法及其說(shuō)明。
1.Visual C# UdpClient類(lèi)發(fā)送UDP數(shù)據(jù)包:
在具體使用中,一般分成二種情況:
(1). 知道遠(yuǎn)程計(jì)算機(jī)IP地址:
"Send"方法的調(diào)用語(yǔ)法如下:
- public int Send ( byte[] dgram , int bytes , IPEndPoint endPoint ) ;
參數(shù)說(shuō)明:
dgram 要發(fā)送的 UDP 數(shù)據(jù)文報(bào)(以字節(jié)數(shù)組表示)。
bytes 數(shù)據(jù)文報(bào)中的字節(jié)數(shù)。
endPoint 一個(gè) IPEndPoint,它表示要將數(shù)據(jù)文報(bào)發(fā)送到的主機(jī)和端口。
返回值 已發(fā)送的字節(jié)數(shù)。
下面使用UdpClient發(fā)送UDP數(shù)據(jù)包的具體的調(diào)用例子:
- IPAddress HostIP = new IPAddress.Parse ( "遠(yuǎn)程計(jì)算機(jī)IP地址" ) ;
- IPEndPoint host = new IPEndPoint ( HostIP , 8080 ) ;
- UdpClient.Send ( "發(fā)送的字節(jié)" , "發(fā)送的字節(jié)長(zhǎng)度" , host ) ;
(2). 知道遠(yuǎn)程計(jì)算機(jī)名稱(chēng):
知道遠(yuǎn)程計(jì)算機(jī)名稱(chēng)后,利用"Send"方法直接把UDP數(shù)據(jù)包發(fā)送到遠(yuǎn)程主機(jī)的指定端口號(hào)上了,這種調(diào)用方式也是最容易的,語(yǔ)法如下:
- public int Send ( byte[ ] dgram , int bytes , string hostname , int port ) ;
參數(shù)說(shuō)明:
dgram 要發(fā)送的 UDP 數(shù)據(jù)文報(bào)(以字節(jié)數(shù)組表示)。
bytes 數(shù)據(jù)文報(bào)中的字節(jié)數(shù)。
hostname 要連接到的遠(yuǎn)程主機(jī)的名稱(chēng)。
port 要與其通訊的遠(yuǎn)程端口號(hào)。
返回值 已發(fā)送的字節(jié)數(shù)。
2.Visual C# UdpClient類(lèi)接收UDP數(shù)據(jù)包:
接收UDP數(shù)據(jù)包使用的是UdpClient中的“Receive"方法。此方法的調(diào)用語(yǔ)法如下:
- public byte [] Receive ( ref IPEndPoint remoteEP ) ;
參數(shù)說(shuō)明:
remoteEP 是一個(gè) IPEndPoint類(lèi)的實(shí)例,它表示網(wǎng)絡(luò)中發(fā)送此數(shù)據(jù)包的節(jié)點(diǎn)。
如果指定了遠(yuǎn)程計(jì)算機(jī)要發(fā)送到本地機(jī)的端口號(hào),也可以通過(guò)偵聽(tīng)本地端口號(hào)來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)的獲取,下面就是通過(guò)偵聽(tīng)本地端口號(hào)“8080"來(lái)獲取信息代碼:
- server = new UdpClient ( ) ;
- receivePoint = new IPEndPoint (new IPAddress ( "127.0.0.1" ) , 8080 ) ;
- byte[] recData = server.Receive ( ref receivePoint ) ;