C#使用udp如何实现消息的接收和发送

下面是详细讲解“C#使用udp如何实现消息的接收和发送”的攻略,希望对您有所帮助。

UDP协议简介

UDP(User Datagram Protocol,用户数据报协议)是一种面向无连接的传输协议,能够在局域网和广域网的IP网络中实现高效的数据传输。它在传输数据时不提供可靠性和完整性的保证,但是却具有速度快、延迟低等优点,因此在实时性较高的应用场景中被广泛使用,如音视频传输、实时游戏等。

消息的发送

引入命名空间

使用UDP协议发送消息,需要使用System.Net.Sockets命名空间下的UdpClient类。因此,需要先在代码文件开头添加引用。

using System.Net.Sockets;

创建UDP连接

使用UdpClient创建UDP连接,并指定对方IP地址和端口号。如果希望发送广播消息,可以将IP地址设置为“255.255.255.255”。

UdpClient udpClient = new UdpClient();
IPEndPoint ipEndPoint= new IPEndPoint(IPAddress.Parse("192.168.1.100"), 8001);  // 发送给指定的IP和端口
//IPEndPoint ipEndPoint= new IPEndPoint(IPAddress.Broadcast, 8001);  // 发送广播消息

构造UDP数据包

使用Encoding对象将消息转换成字节数组,然后将字节数组封装进一个UdpClient标准数据包中。

string message = "Hello World!";
byte[] sendBytes = Encoding.UTF8.GetBytes(message);
UdpClient udpClient = new UdpClient();
IPEndPoint ipEndPoint= new IPEndPoint(IPAddress.Parse("192.168.1.100"), 8001);
udpClient.Send(sendBytes, sendBytes.Length, ipEndPoint);

消息的接收

引入命名空间

使用UDP协议接收消息,同样需要使用System.Net.Sockets命名空间下的UdpClient类。因此,需要先在代码文件开头添加引用。

using System.Net.Sockets;

创建UDP连接

使用UdpClient创建UDP连接,并指定监听的本地IP地址和端口号。

UdpClient udpClient = new UdpClient(8001);  //监听本地端口8001

接收消息

使用UdpClient的Receive方法从网络接收消息,该方法会一直阻塞等待,直到接收到消息。

byte[] receiveBytes = udpClient.Receive(ref ipEndPoint);
string message = Encoding.UTF8.GetString(receiveBytes, 0, receiveBytes.Length);

示例说明

示例1:UDP发送和接收消息

下面来看具体的代码,使用UDP协议发送一条消息“Hello World!”到指定的IP地址和端口,接收端收到消息后回复一条消息“Nice to meet you!”,发送端收到回复后打印出来。

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        // 发送端
        UdpClient udpClient = new UdpClient();
        IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Parse("192.168.1.100"), 8001);
        string message = "Hello World!";
        byte[] sendBytes = Encoding.UTF8.GetBytes(message);
        udpClient.Send(sendBytes, sendBytes.Length, remoteIpEndPoint);

        // 接收端
        UdpClient listener = new UdpClient(8001);
        IPEndPoint localIpEndPoint = new IPEndPoint(IPAddress.Any, 8001);
        byte[] receiveBytes = listener.Receive(ref localIpEndPoint);
        string receiveMessage = Encoding.UTF8.GetString(receiveBytes, 0, receiveBytes.Length);
        Console.WriteLine($"接收到消息:{receiveMessage}");

        // 发送回复
        string reply = "Nice to meet you!";
        byte[] replyBytes = Encoding.UTF8.GetBytes(reply);
        udpClient.Send(replyBytes, replyBytes.Length, remoteIpEndPoint);

        // 接收回复
        receiveBytes = listener.Receive(ref localIpEndPoint);
        receiveMessage = Encoding.UTF8.GetString(receiveBytes, 0, receiveBytes.Length);
        Console.WriteLine($"接收到回复:{receiveMessage}");
    }
}

运行结果如下:

接收到消息:Hello World!
接收到回复:Nice to meet you!

示例2:使用Task异步接收消息

上面的示例中接收消息的代码是同步的,会阻塞主线程。在实际应用中,可能需要使用异步方式接收消息,以免阻塞主线程。下面来看一个使用Task异步接收UDP消息的示例。

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        UdpClient listener = new UdpClient(8001);
        IPEndPoint localIpEndPoint = new IPEndPoint(IPAddress.Any, 8001);
        while (true)
        {
            UdpReceiveResult receiveResult = await listener.ReceiveAsync();
            string receiveMessage = Encoding.UTF8.GetString(receiveResult.Buffer, 0, receiveResult.Buffer.Length);
            Console.WriteLine($"接收到消息:{receiveMessage},来自:{receiveResult.RemoteEndPoint}");
        }
    }
}

运行该程序后,可以在其他终端上使用UDP协议向本机发送消息,程序会非阻塞地接收并打印出消息内容和发送方的地址信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#使用udp如何实现消息的接收和发送 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • 如何在C#项目中链接一个文件夹下的所有文件详解

    当我们需要在C#项目中链接一个文件夹下的所有文件时,可以通过以下方式实现: 在 Visual Studio 中创建 C# 项目。选择 “File” > “New” > “Project”,然后选择 “Visual C#” > “Windows” > “Console Application”。 在项目中添加文件夹。右键项目,选择 “A…

    C# 2023年6月1日
    00
  • C#开源的AOP框架–KingAOP基础

    简介 KingAOP 是一款开源的 C# AOP 框架,基于 Castle DynamicProxy 实现,提供了一套功能强大、易于使用、可扩展的 AOP 解决方案。KingAOP 支持对任意类型的任意方法(包括私有方法)进行代理,并且支持多种拦截器模式,可以满足大多数 AOP 场景的需求。 安装 KingAOP 要使用 KingAOP,需要先安装它。Kin…

    C# 2023年6月1日
    00
  • C#使用FileSystemWatcher控件实现的文件监控功能示例

    在C#中,可以使用FileSystemWatcher控件实现文件监控功能。FileSystemWatcher控件可以监视指定目录中的文件和子目录的更改,并在发生更改时引发事件。本文将提供详解如何使用FileSystemWatcher控件实现文件监控功能的完整攻略,包括如何创建FileSystemWatcher控件、如何设置监视目录和文件类型、如何处理File…

    C# 2023年5月15日
    00
  • 对C# 多态的理解

    对C#多态的理解 什么是多态 多态是定义在父类中的函数被子类继承之后,可以具有不同的实现方式的一种能力。C#中的多态主要有两种实现方式:重载和重写。 重载 重载是通过定义同名的方法,但拥有不同的参数列表,实现多态的一种方式。C#中的重载函数必须拥有不同的参数个数或参数类型,否则编译器无法识别。 下面是一个求两个整数和的函数Add的重载示例: public i…

    C# 2023年5月15日
    00
  • ASP.NET MVC结合JavaScript登录、校验和加密

    ASP.NET MVC结合JavaScript登录、校验和加密是一个比较常见的需求,可以通过以下步骤实现: 步骤一:创建ASP.NET MVC项目 在Visual Studio中创建ASP.NET MVC项目,选择“Empty”模板即可。 步骤二:添加登录页面 在Views文件夹下创建登录页面,命名为Login.cshtml。该页面包含用户名和密码的输入框,…

    C# 2023年5月31日
    00
  • C# Path.Combine()方法: 将一个或多个路径组合成一个路径

    C# 的 Path.Combine() 方法用于将两个或多个路径字符串组合成一个完整的路径字符串。该方法会自动检测并添加路径分隔符,使得最终的路径字符串符合当前操作系统的路径规范。Path.Combine() 方法的返回结果可以作为参数传递给其他 Path 类中的方法中。 方法原型 public static string Combine(params st…

    C# 2023年4月19日
    00
  • ASP.NET Core Api网关Ocelot的使用初探

    下面是“ASP.NET Core Api网关Ocelot的使用初探”的完整攻略: 什么是ASP.NET Core Api网关Ocelot? ASP.NET Core Api网关Ocelot是一个开源的API网关,用于管理和路由HTTP请求。它提供了一组API和UI组件,用于配置和管理API网关,包括路由、认证、授权、限流、缓存等方面。 如何使用ASP.NET…

    C# 2023年5月16日
    00
  • .NET(C#):Emit创建异常处理的方法

    谢谢你的提问,下面我将详细讲解“.NET(C#):Emit创建异常处理的方法”的攻略。 什么是 Emit Emit 是 C# 语言中的一种反射机制,可以动态创建和编译 IL(Intermediate Language)代码。通过 Emit,可以生成动态程序集、动态类型和动态方法等。 如何使用 Emit 创建异常处理的方法 使用 Emit 创建异常处理的方法需…

    C# 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部