雷火电竞-中国电竞赛事及体育赛事平台

歡迎來到入門教程網!

C#教程

當前位置:主頁 > 軟件編程 > C#教程 >

C#使用UdpClient類進行簡單通信的實例

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C#教程|點擊:

UdpClient 類提供了一些簡單的方法,用于在阻止同步模式下發(fā)送和接收無連接 UDP 數據報。 因為 UDP 是無連接傳輸協(xié)議,所以不需要在發(fā)送和接收數據前建立遠程主機連接。但您可以選擇使用下面兩種方法之一來建立默認遠程主機:

  • 使用遠程主機名和端口號作為參數創(chuàng)建 UdpClient 類的實例。
  • 創(chuàng)建 UdpClient 類的實例,然后調用 Connect 方法。

可以使用在 UdpClient 中提供的任何一種發(fā)送方法將數據發(fā)送到遠程設備。 使用 Receive 方法可以從遠程主機接收數據。

UdpClient 方法還允許發(fā)送和接收多路廣播數據報。 使用 JoinMulticastGroup 方法可以將 UdpClient 預訂給多路廣播組。 使用 DropMulticastGroup 方法可以從多路廣播組中取消對 UdpClient 的預訂。

/// <summary>
/// 客戶端
/// </summary>
class UDPSender
{
  static void Main(string[] args)
  {
    //創(chuàng)建一個UdpClient對象,0表示系統(tǒng)自動分配發(fā)送端口
    //(若同時在本機運行服務端和客戶端,則服務端接收和客戶端發(fā)送需要使用不同端口,否則兩個程序使用同一端口將引發(fā)沖突)
    UdpClient udpSender = new UdpClient(0);
    //連接到服務端并指定接收端口
    udpSender.Connect("localhost", 11000);
    //連接到子網廣播地址并指定接收端口
    //udpSender.Connect("192.168.1.255", 11000);
    //(在使用TCP/IP協(xié)議的網絡中,主機標識段全為1的IP地址為廣播地址,廣播地址傳送給主機標識段所涉及的所有計算機。
    //例如,對于192.168.1.0(255.255.255.0)網段,其廣播地址為192.168.1.255(255的2進制即為11111111),
    //當發(fā)出目的地址為192.168.1.255時,它將分發(fā)給該網段上的所有計算機。)
    //把消息轉換成字節(jié)流發(fā)送到服務端
    byte[] sendBytes = Encoding.ASCII.GetBytes("Is anybody there?");
    udpSender.Send(sendBytes, sendBytes.Length);
    //關閉鏈接
    udpSender.Close();
  }
}
/// <summary>
/// 服務端
/// </summary>
class UDPReceive
{
  static void Main(string[] args)
  {
    //創(chuàng)建一個UdpClient對象,11000為接收端口
    UdpClient udpReceive = new UdpClient(11000);
    //設置遠程主機,(IPAddress.Any, 0)代表接收所有IP所有端口發(fā)送的數據
    IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);//或 IPEndPoint remoteIpEndPoint = null;
    //監(jiā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()); 
    //關閉連接
    udpReceive.Close();
  }
}

備注:需要先運行服務端,再運行客戶端。否則客戶端在服務端運行之前就已經發(fā)出數據,則服務端不會接收到數據。

下面是使用 UdpClient 類進行多路廣播組的簡單例子,加入相同的廣播組地址即可實現(xiàn)多播。多路廣播地址的范圍從 224.0.0.0 到 239.255.255.255 ,服務端和客戶端使用同一廣播地址即可實現(xiàn)多播。

/// <summary>
/// 多路廣播組客戶端
/// </summary>
class MulticastGroupClient
{
  static void Main(string[] args)
  {
    //創(chuàng)建一個UdpClient對象,0表示系統(tǒng)自動分配發(fā)送端口
    var client = new UdpClient(0);
    //將廣播地址添加到多路廣播組,生存期(路由器跳數)為10
    var ip = IPAddress.Parse("234.56.78.90");
    client.JoinMulticastGroup(ip, 10);
    //定義終結點(服務端IP和接收端口),把消息轉換成字節(jié)流后發(fā)送到服務端
    var multicast = new IPEndPoint(ip, 7788);
    byte[] bytes = Encoding.ASCII.GetBytes("Hello from multicast.");
    client.Send(bytes, bytes.Length, multicast);
  }
}
/// <summary>
/// 多路廣播組服務端
/// </summary>
class MulticastGroupServer
{
  static void Main(string[] args)
  {
    //創(chuàng)建一個UdpClient對象,7788為接收端口
    var client = new UdpClient(7788);
    //將廣播地址添加到多路廣播組,生存期(路由器跳數)為10
    var ip = IPAddress.Parse("234.56.78.90");
    client.JoinMulticastGroup(ip, 10);
    //設置遠程主機,(IPAddress.Any, 0)代表接收所有IP所有端口發(fā)送的數據
    var multicast = new IPEndPoint(IPAddress.Any, 0);//或 IPEndPoint multicast = null;
    //監(jiān)聽數據,接收到數據后,把數據轉換成字符串并輸出
    byte[] bytes = client.Receive(ref multicast);
    string msg = Encoding.ASCII.GetString(bytes);
    Console.WriteLine(msg);
  }
}

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持我們!

上一篇:C# MVC 微信支付教程系列之公眾號支付代碼

欄    目:C#教程

下一篇:C#實現(xiàn)根據實體類自動創(chuàng)建數據庫表

本文標題:C#使用UdpClient類進行簡單通信的實例

本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/6084.html

網頁制作CMS教程網絡編程軟件編程腳本語言數據庫服務器

如果侵犯了您的權利,請與我們聯(lián)系,我們將在24小時內進行處理、任何非本站因素導致的法律后果,本站均不負任何責任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網 版權所有