程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#運用UdpClient類停止復雜通訊的實例

C#運用UdpClient類停止復雜通訊的實例

編輯:C#入門知識

C#運用UdpClient類停止復雜通訊的實例。本站提示廣大學習愛好者:(C#運用UdpClient類停止復雜通訊的實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#運用UdpClient類停止復雜通訊的實例正文


UdpClient 類提供了一些復雜的辦法,用於在阻止同步形式下發送和接納無銜接 UDP 數據報。 由於 UDP 是無銜接傳輸協議,所以不需求在發送和接納數據前樹立近程主機銜接。但您可以選擇運用上面兩種辦法之一來樹立默許近程主機:

運用近程主機名和端口號作為參數創立 UdpClient 類的實例。 創立 UdpClient 類的實例,然後調用 Connect 辦法。

可以運用在 UdpClient 中提供的任何一種發送辦法將數據發送到近程設備。 運用 Receive 辦法可以從近程主機接納數據。

UdpClient 辦法還允許發送和接納多路播送數據報。 運用 JoinMulticastGroup 辦法可以將 UdpClient 預訂給多路播送組。 運用 DropMulticastGroup 辦法可以從多路播送組中取消對 UdpClient 的預訂。

/// <summary>
/// 客戶端
/// </summary>
class UDPSender
{
  static void Main(string[] args)
  {
    //創立一個UdpClient對象,0表示零碎自動分配發送端口
    //(若同時在本機運轉服務端和客戶端,則服務端接納和客戶端發送需求運用不同端口,否則兩個順序運用同一端口將引發抵觸)
    UdpClient udpSender = new UdpClient(0);
    //銜接到服務端並指定接納端口
    udpSender.Connect("localhost", 11000);
    //銜接到子網播送地址並指定接納端口
    //udpSender.Connect("192.168.1.255", 11000);
    //(在運用TCP/IP協議的網絡中,主機標識段全為1的IP地址為播送地址,播送地址傳送給主機標識段所觸及的一切計算機。
    //例如,關於192.168.1.0(255.255.255.0)網段,其播送地址為192.168.1.255(255的2進制即為11111111),
    //當收回目的地址為192.168.1.255時,它將分發給該網段上的一切計算機。)
    //把音訊轉換成字節流發送到服務端
    byte[] sendBytes = Encoding.ASCII.GetBytes("Is anybody there?");
    udpSender.Send(sendBytes, sendBytes.Length);
    //封閉鏈接
    udpSender.Close();
  }
}
/// <summary>
/// 服務端
/// </summary>
class UDPReceive
{
  static void Main(string[] args)
  {
    //創立一個UdpClient對象,11000為接納端口
    UdpClient udpReceive = new UdpClient(11000);
    //設置近程主機,(IPAddress.Any, 0)代表接納一切IP一切端口發送的數據
    IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);//或 IPEndPoint remoteIpEndPoint = null;
    //監聽數據,接納到數據後,把數據轉換成字符串並輸入
    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();
  }
}

備注:需求先運轉服務端,再運轉客戶端。否則客戶端在服務端運轉之前就曾經收回數據,則服務端不會接納到數據。

上面是運用 UdpClient 類停止多路播送組的復雜例子,參加相反的播送組地址即可完成多播。多路播送地址的范圍從 224.0.0.0 到 239.255.255.255 ,服務端和客戶端運用同一播送地址即可完成多播。

/// <summary>
/// 多路播送組客戶端
/// </summary>
class MulticastGroupClient
{
  static void Main(string[] args)
  {
    //創立一個UdpClient對象,0表示零碎自動分配發送端口
    var client = new UdpClient(0);
    //將播送地址添加到多路播送組,生活期(路由器跳數)為10
    var ip = IPAddress.Parse("234.56.78.90");
    client.JoinMulticastGroup(ip, 10);
    //定義終結點(服務端IP和接納端口),把音訊轉換成字節流後發送到服務端
    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)
  {
    //創立一個UdpClient對象,7788為接納端口
    var client = new UdpClient(7788);
    //將播送地址添加到多路播送組,生活期(路由器跳數)為10
    var ip = IPAddress.Parse("234.56.78.90");
    client.JoinMulticastGroup(ip, 10);
    //設置近程主機,(IPAddress.Any, 0)代表接納一切IP一切端口發送的數據
    var multicast = new IPEndPoint(IPAddress.Any, 0);//或 IPEndPoint multicast = null;
    //監聽數據,接納到數據後,把數據轉換成字符串並輸入
    byte[] bytes = client.Receive(ref multicast);
    string msg = Encoding.ASCII.GetString(bytes);
    Console.WriteLine(msg);
  }
}

以上就是本文的全部內容,希望本文的內容對大家的學習或許任務能帶來一定的協助,同時也希望多多支持!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved