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#常见的几种集合 ArrayList,Hashtable,List,Dictionary 遍历方法对比

    C#常见集合的遍历方法对比 在 C# 中,集合是一种存储数据的容器,通常使用集合来代替数组。常见的集合类型有 ArrayList,Hashtable,List 和 Dictionary。 下面将从以下几个方面来对比这些集合的遍历方法: 遍历方式 遍历性能 ArrayList ArrayList 是一个可变的数组,可以在运行时动态添加或删除元素。它的遍历方式有…

    C# 2023年6月7日
    00
  • SQL2005CLR函数扩展-繁简转换的实现代码

    SQL2005CLR函数扩展-繁简转换的实现代码的完整攻略如下: 1. 确定需求并搜集资料 首先,我们需要确定我们要实现的是一个繁简转换的函数。繁简转换是指将繁体中文转换为简体中文,或将简体中文转换为繁体中文。为了实现这个功能,我们需要搜集相关的资料,包括繁简转换的算法和实现思路等。 2. 编写CLR函数代码 在了解了繁简转换的实现思路后,我们可以开始编写C…

    C# 2023年6月7日
    00
  • .net实现裁剪网站上传图片的方法

    实现裁剪网站上传图片的方法需要以下步骤: 1. 安装相关依赖 安装 .NET Core SDK 安装 ImageSharp 包(用于图片处理) 可以使用以下命令安装 ImageSharp 包: dotnet add package SixLabors.ImageSharp 2. 实现图片上传功能 可以使用 ASP.NET Core 提供的 IFormFile…

    C# 2023年5月31日
    00
  • .NET 6开发TodoList应用实现结构搭建

    下面是详细讲解“.NET 6开发TodoList应用实现结构搭建”的完整攻略。 1. 概述 在本教程中,我们将使用.NET 6和C#构建一个简单的ToDoList应用程序。这个应用程序将包括一个基本的用户界面,允许用户创建、修改和删除待办任务。 我们将使用ASP.NET Core MVC框架来构建TodoList应用程序,并将其连接到一个SQLite数据库。…

    C# 2023年6月3日
    00
  • c#实现多线程局域网聊天系统

    C#实现多线程局域网聊天系统攻略 前言 本文介绍如何使用C#语言编写多线程局域网聊天系统。局域网聊天系统主要用于小范围内的通信,可以在公司、学校或家庭之间使用。使用多线程技术可以提升系统的并发性能,增强用户体验。本文将使用Visual Studio开发工具来进行程序设计和实现。 程序设计 整体架构 客户端程序:用于与其他用户进行通信和交流,需要与服务器程序进…

    C# 2023年6月6日
    00
  • .NET Core单文件发布静态编译AOT CoreRT的方法详解

    .NET Core 单文件发布静态编译 AOT CoreRT 的方法详解 在 .NET Core 中,单文件发布是一种将应用程序打包成单个可执行文件的机制,它可以简化应用程序的部署和分发。静态编译 AOT CoreRT 是一种将应用程序编译成本地机器码的机制,它可以提高应用程序的性能和安全性。本攻略将详细讲解 .NET Core 单文件发布静态编译 AOT …

    C# 2023年5月17日
    00
  • React项目中fetch实现跨域接收传递session的解决方案

    React项目中fetch实现跨域接收传递session的解决方案 在 React 项目中,使用 fetch 发送跨域请求时,如果需要接收和传递 session,需要进行一些特殊的处理。本攻略将介绍如何在 React 项目中使用 fetch 实现跨域接收传递 session 的解决方案。 解决方案 以下是在 React 项目中使用 fetch 实现跨域接收传…

    C# 2023年5月17日
    00
  • C#多线程TPL模式高级用法探秘

    C#多线程TPL模式高级用法探秘 什么是TPL? TPL全称为Task Parallel Library,是基于.NET Framework中Task类的一个多线程编程框架。TPL框架提供了简单、易用、高效、稳定的多线程编程方式,减少了多线程互斥锁、线程池调度等复杂的细节操作,方便开发人员快速开发高并发、多线程应用程序。 TPL的高级用法 1. 合并多个Ta…

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