C#使用UdpClient類進(jìn)行簡(jiǎn)單通信的實(shí)例
UdpClient 類提供了一些簡(jiǎn)單的方法,用于在阻止同步模式下發(fā)送和接收無(wú)連接 UDP 數(shù)據(jù)報(bào)。 因?yàn)?UDP 是無(wú)連接傳輸協(xié)議,所以不需要在發(fā)送和接收數(shù)據(jù)前建立遠(yuǎn)程主機(jī)連接。但您可以選擇使用下面兩種方法之一來建立默認(rèn)遠(yuǎn)程主機(jī):
- 使用遠(yuǎn)程主機(jī)名和端口號(hào)作為參數(shù)創(chuàng)建 UdpClient 類的實(shí)例。
- 創(chuàng)建 UdpClient 類的實(shí)例,然后調(diào)用 Connect 方法。
可以使用在 UdpClient 中提供的任何一種發(fā)送方法將數(shù)據(jù)發(fā)送到遠(yuǎn)程設(shè)備。 使用 Receive 方法可以從遠(yuǎn)程主機(jī)接收數(shù)據(jù)。
UdpClient 方法還允許發(fā)送和接收多路廣播數(shù)據(jù)報(bào)。 使用 JoinMulticastGroup 方法可以將 UdpClient 預(yù)訂給多路廣播組。 使用 DropMulticastGroup 方法可以從多路廣播組中取消對(duì) UdpClient 的預(yù)訂。
/// <summary>
/// 客戶端
/// </summary>
class UDPSender
{
static void Main(string[] args)
{
//創(chuàng)建一個(gè)UdpClient對(duì)象,0表示系統(tǒng)自動(dòng)分配發(fā)送端口
//(若同時(shí)在本機(jī)運(yùn)行服務(wù)端和客戶端,則服務(wù)端接收和客戶端發(fā)送需要使用不同端口,否則兩個(gè)程序使用同一端口將引發(fā)沖突)
UdpClient udpSender = new UdpClient(0);
//連接到服務(wù)端并指定接收端口
udpSender.Connect("localhost", 11000);
//連接到子網(wǎng)廣播地址并指定接收端口
//udpSender.Connect("192.168.1.255", 11000);
//(在使用TCP/IP協(xié)議的網(wǎng)絡(luò)中,主機(jī)標(biāo)識(shí)段全為1的IP地址為廣播地址,廣播地址傳送給主機(jī)標(biāo)識(shí)段所涉及的所有計(jì)算機(jī)。
//例如,對(duì)于192.168.1.0(255.255.255.0)網(wǎng)段,其廣播地址為192.168.1.255(255的2進(jìn)制即為11111111),
//當(dāng)發(fā)出目的地址為192.168.1.255時(shí),它將分發(fā)給該網(wǎng)段上的所有計(jì)算機(jī)。)
//把消息轉(zhuǎn)換成字節(jié)流發(fā)送到服務(wù)端
byte[] sendBytes = Encoding.ASCII.GetBytes("Is anybody there?");
udpSender.Send(sendBytes, sendBytes.Length);
//關(guān)閉鏈接
udpSender.Close();
}
}
/// <summary>
/// 服務(wù)端
/// </summary>
class UDPReceive
{
static void Main(string[] args)
{
//創(chuàng)建一個(gè)UdpClient對(duì)象,11000為接收端口
UdpClient udpReceive = new UdpClient(11000);
//設(shè)置遠(yuǎn)程主機(jī),(IPAddress.Any, 0)代表接收所有IP所有端口發(fā)送的數(shù)據(jù)
IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);//或 IPEndPoint remoteIpEndPoint = null;
//監(jiān)聽數(shù)據(jù),接收到數(shù)據(jù)后,把數(shù)據(jù)轉(zhuǎn)換成字符串并輸出
byte[] receiveBytes = udpReceive.Receive(ref remoteIpEndPoint);
string returnData = Encoding.ASCII.GetString(receiveBytes);
Console.WriteLine("This is the message you received " + returnData.ToString());
Console.WriteLine("This message was sent from " + remoteIpEndPoint.Address.ToString() + " on their port number " + remoteIpEndPoint.Port.ToString());
//關(guān)閉連接
udpReceive.Close();
}
}
備注:需要先運(yùn)行服務(wù)端,再運(yùn)行客戶端。否則客戶端在服務(wù)端運(yùn)行之前就已經(jīng)發(fā)出數(shù)據(jù),則服務(wù)端不會(huì)接收到數(shù)據(jù)。
下面是使用 UdpClient 類進(jìn)行多路廣播組的簡(jiǎn)單例子,加入相同的廣播組地址即可實(shí)現(xiàn)多播。多路廣播地址的范圍從 224.0.0.0 到 239.255.255.255 ,服務(wù)端和客戶端使用同一廣播地址即可實(shí)現(xiàn)多播。
/// <summary>
/// 多路廣播組客戶端
/// </summary>
class MulticastGroupClient
{
static void Main(string[] args)
{
//創(chuàng)建一個(gè)UdpClient對(duì)象,0表示系統(tǒng)自動(dòng)分配發(fā)送端口
var client = new UdpClient(0);
//將廣播地址添加到多路廣播組,生存期(路由器跳數(shù))為10
var ip = IPAddress.Parse("234.56.78.90");
client.JoinMulticastGroup(ip, 10);
//定義終結(jié)點(diǎn)(服務(wù)端IP和接收端口),把消息轉(zhuǎn)換成字節(jié)流后發(fā)送到服務(wù)端
var multicast = new IPEndPoint(ip, 7788);
byte[] bytes = Encoding.ASCII.GetBytes("Hello from multicast.");
client.Send(bytes, bytes.Length, multicast);
}
}
/// <summary>
/// 多路廣播組服務(wù)端
/// </summary>
class MulticastGroupServer
{
static void Main(string[] args)
{
//創(chuàng)建一個(gè)UdpClient對(duì)象,7788為接收端口
var client = new UdpClient(7788);
//將廣播地址添加到多路廣播組,生存期(路由器跳數(shù))為10
var ip = IPAddress.Parse("234.56.78.90");
client.JoinMulticastGroup(ip, 10);
//設(shè)置遠(yuǎn)程主機(jī),(IPAddress.Any, 0)代表接收所有IP所有端口發(fā)送的數(shù)據(jù)
var multicast = new IPEndPoint(IPAddress.Any, 0);//或 IPEndPoint multicast = null;
//監(jiān)聽數(shù)據(jù),接收到數(shù)據(jù)后,把數(shù)據(jù)轉(zhuǎn)換成字符串并輸出
byte[] bytes = client.Receive(ref multicast);
string msg = Encoding.ASCII.GetString(bytes);
Console.WriteLine(msg);
}
}
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
- C#中使用UDP通信的示例
- C# 使用Tcp/Udp協(xié)議的示例代碼
- C#實(shí)現(xiàn)的UDP收發(fā)請(qǐng)求工具類實(shí)例
- 基于C#的UDP協(xié)議的同步通信實(shí)現(xiàn)代碼
- C#的Socket實(shí)現(xiàn)UDP協(xié)議通信示例代碼
- C#基于UDP進(jìn)行異步通信的方法
- C#中使用UDP通信實(shí)例
- c#實(shí)現(xiàn)簡(jiǎn)單控制臺(tái)udp異步通信程序示例
- c# socket編程udp客戶端實(shí)現(xiàn)代碼分享
- C# 基于udp廣播收集局域網(wǎng)類所有設(shè)備信息
相關(guān)文章
C#五類運(yùn)算符使用表達(dá)式樹進(jìn)行操作
這篇文章介紹了C#五類運(yùn)算符使用表達(dá)式樹進(jìn)行操作,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01
WPF實(shí)現(xiàn)繪制扇形統(tǒng)計(jì)圖的示例代碼
這篇文章主要介紹了如何利用WPF繪制扇形統(tǒng)計(jì)圖,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下2022-09-09
c#之滾動(dòng)字幕動(dòng)畫窗體的實(shí)現(xiàn)詳解
本篇文章是對(duì)c#中滾動(dòng)字幕動(dòng)畫窗體的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
C#與PHP的md5計(jì)算結(jié)果不同的解決方法
今天在用C#接入我的登錄api發(fā)現(xiàn)了一個(gè)問題,登陸的時(shí)候無(wú)論如何都會(huì)出現(xiàn)用戶名和密碼錯(cuò)誤的問題,后來通過查找排除找的了問題的原因是因?yàn)镃#與PHP的md5計(jì)算結(jié)果不同導(dǎo)致的,下面就來看看如何解決這個(gè)問題吧。2016-12-12
C#利用正則表達(dá)式實(shí)現(xiàn)獲取字符串中漢字的數(shù)量
這篇文章主要為大家詳細(xì)介紹了C#如何利用正則表達(dá)式實(shí)現(xiàn)獲取字符串中漢字的數(shù)量,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01
Unity3D基于陀螺儀實(shí)現(xiàn)VR相機(jī)功能
這篇文章主要為大家詳細(xì)介紹了Unity3D基于陀螺儀實(shí)現(xiàn)VR相機(jī)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04

