c#实现简单控制台udp异步通信程序示例

C#实现简单控制台UDP异步通信程序示例

1. 前言

本文介绍如何使用C#实现简单控制台UDP异步通信程序。UDP通信是一种面向无连接的通信方式,它在数据传输时不需要建立连接,可以在不可靠的网络传输中获得更好的性能。本文示例中使用C#提供的异步编程模型,以实现对UDP异步通信程序的实现。

2. 示例1:发送UDP数据

2.1 准备工作

首先,我们需要创建一个控制台项目,并将以下命名空间添加到程序中:

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

此外,我们还需要创建以下变量:

private static UdpClient udpClient;
private static IPEndPoint remoteIPEndPoint;

2.2 初始化

在“Main”方法中,我们需要初始化UDP客户端和远程IPEndPoint。代码如下:

static void Main(string[] args)
{
    udpClient = new UdpClient();
    remoteIPEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);

    // ...
}

这里,UdpClient是一个封装了基础的UDP协议功能的高级客户端类。IPAddress.Parse方法则用于将一个字符串表示的IP地址转换为IPAddress类型的对象。这里,我们将远程服务器的IP地址设置为127.0.0.1,表示本机的一个端口。

2.3 发送数据

完成初始化后,我们可以使用Send方法向远程终端(服务器)发送UDP数据。代码如下:

udpClient.Send(new byte[] {0x01, 0x02, 0x03}, 3, remoteIPEndPoint);

其中,new byte[] {0x01, 0x02, 0x03}表示要发送的数据。3表示要发送的数据的长度(字节数);remoteIPEndPoint则表示远程终端(服务器)的地址。

2.4 完整代码

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

namespace UDPClientSend
{
    class Program
    {
        private static UdpClient udpClient;
        private static IPEndPoint remoteIPEndPoint;

        static void Main(string[] args)
        {
            udpClient = new UdpClient();
            remoteIPEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);

            udpClient.Send(new byte[] {0x01, 0x02, 0x03}, 3, remoteIPEndPoint);

            udpClient.Close();
            Console.ReadKey();
        }
    }
}

3. 示例2:异步接收UDP数据

3.1 准备工作

与发送UDP数据不同,接收UDP数据是需要开启一个异步监听器。因此,我们需要同时初始化UDP客户端和远程IPEndPoint,并创建一个异步接收事件UdpClient.BeginReceive。代码如下:

private static UdpClient udpClient;
private static IPEndPoint remoteIPEndPoint;

static void Main(string[] args)
{
    udpClient = new UdpClient(new IPEndPoint(IPAddress.Any, 8888));
    remoteIPEndPoint = new IPEndPoint(IPAddress.Any, 0);

    udpClient.BeginReceive(new AsyncCallback(ReceiveCallback), null);

    // ...
}

这里,UdpClient的构造函数用于指定本机的IP地址和端口。IPEndPoint.Any表示任何可用IP地址和端口。这里,我们指定8888端口,并将UDP客户端设置为可以接收所有IP地址的数据。另外,UdpClient.BeginReceive方法表示异步接收一个数据报文(数据包),并同时传入一个回调函数ReceiveCallback

3.2 接收数据

当客户端接收到数据报文(数据包)时,异步监听器会调用回调函数ReceiveCallback。代码如下:

private static void ReceiveCallback(IAsyncResult ar)
{
    byte[] data = udpClient.EndReceive(ar, ref remoteIPEndPoint);
    Console.WriteLine("收到来自{0}的数据:{1}", remoteIPEndPoint.ToString(), BitConverter.ToString(data));

    udpClient.BeginReceive(new AsyncCallback(ReceiveCallback), null);
}

这里,UdpClient.EndReceive方法用于获取接收到的数据,并根据数据来源的IPEndPoint设置了remoteIPEndPoint变量。BitConverter.ToString则用于将字节流转换为字符串。

在进行完数据处理后,需要重新启动异步监听器,以等待下一次数据的到来。

3.3 完整代码

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

namespace UDPClientRecv
{
    class Program
    {
        private static UdpClient udpClient;
        private static IPEndPoint remoteIPEndPoint;

        static void Main(string[] args)
        {
            udpClient = new UdpClient(new IPEndPoint(IPAddress.Any, 8888));
            remoteIPEndPoint = new IPEndPoint(IPAddress.Any, 0);

            udpClient.BeginReceive(new AsyncCallback(ReceiveCallback), null);

            Console.ReadKey();
            udpClient.Close();
        }

        private static void ReceiveCallback(IAsyncResult ar)
        {
            byte[] data = udpClient.EndReceive(ar, ref remoteIPEndPoint);
            Console.WriteLine("收到来自{0}的数据:{1}", remoteIPEndPoint.ToString(), BitConverter.ToString(data));

            udpClient.BeginReceive(new AsyncCallback(ReceiveCallback), null);
        }
    }
}

4. 总结

本文介绍了如何使用C#提供的异步编程模型,轻松实现控制台UDP异步通信程序。这里仅介绍了简单的UDP数据发送和接收,读者可以根据自己的需要扩展相关功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c#实现简单控制台udp异步通信程序示例 - Python技术站

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

相关文章

  • .NET Core使用C#扫描并读取图片中的文字

    .NET Core使用C#扫描并读取图片中的文字 在.NET Core中,可以使用C#编写代码来扫描并读取图片中的文字。这可以通过OCR(Optical Character Recognition,光学字符识别)技术实现。本文将介绍如何使用C#和Tesseract OCR库来扫描并读取图片中的文字。 准备工作 在开始之前,需要完成以下准备工作: 安装.NET…

    C# 2023年5月17日
    00
  • C#利用FileSystemWatcher实时监控文件的增加,修改,重命名和删除

    C#利用FileSystemWatcher实时监控文件的增加,修改,重命名和删除 在C#中,可以使用FileSystemWatcher类实现对文件夹进行监视,实现对文件夹中文件的增加、修改、重命名和删除等操作的即时监控。 FileSystemWatcher基本用法 创建FileSystemWatcher对象 FileSystemWatcher watcher…

    C# 2023年5月15日
    00
  • C#通过PInvoke调用c++函数的备忘录的实例详解

    C#通过PInvoke调用C++函数的备忘录 什么是PInvoke PInvoke是Platform Invoke的缩写,是.NET Framework提供给C#程序员调用非托管DLL(Dynamic Link Library)在 Windows 平台上的接口技术。PInvoke 提供的主要技术便是 Marshal 类,Marshal 类可以完成 数据类型 …

    C# 2023年6月7日
    00
  • 在.NET Core使用 HttpClient 的正确方式

    前言 HttpClient 是 .NET Framework、.NET Core 或 .NET 5以上版本中的一个类,用于向 Web API 发送 HTTP 请求并接收响应。它提供了一些简单易用的方法,如 GET、POST、PUT 和 DELETE,可以很容易地构造和发送 HTTP 请求,并处理响应数据。它是我们比较常用的官方HTTP请求组件,那么你们都正确…

    C# 2023年4月17日
    00
  • 深入了解C#设计模式之订阅发布模式

    欢迎来到深入了解C#设计模式之订阅发布模式的完整攻略。本攻略将会带你深入探索这种设计模式,包括其基础知识、应用场景、实现步骤、示例、优缺点等方面。 一、订阅发布模式基础知识 1.1 什么是订阅发布模式? 订阅发布模式(Publish/Subscribe Pattern)是一种事件处理模式,也叫做消息机制或者观察者模式。该模式定义了一种对象间的一对多的关系,让…

    C# 2023年5月15日
    00
  • 不用IDE写C#的Hello World的方法

    下面是不用IDE写C#的HelloWorld的方法的完整攻略。 什么是C#? C# (C Sharp) 是由微软公司开发的一种面向对象、类型安全、高效并且易于学习的编程语言。它是能够在 .NET 平台上开发各种应用程序的一种语言。 需要的工具 .NET Framework(最新版本) 文本编辑器,例如 Notepad++, Sublime Text 等 创建…

    C# 2023年5月14日
    00
  • C# linq查询之动态OrderBy用法实例

    C# LINQ是一种处理数据的标准方式,而OrderBy方法则是集合操作中的一种常见方式,用于排序实例。在使用LINQ的时候,OrderBy方法除了提供常规的静态排序,还可以通过动态排序来满足更灵活的需求。 动态OrderBy方法概述 动态OrderBy方法可以接受一个字符串参数,以便动态指定排序依据。在字符串中传递排序依据属性名称,并指定排序的方式(升序或…

    C# 2023年6月1日
    00
  • 盘点C# 9.0中好用的特性

    顶级语句 将类和类里面Main函数省略,只留下核心的逻辑代码就是顶级语句! 1.顶级语句1 await System.Threading.Tasks.Task.Delay(1000); System.Console.WriteLine(“Hi!”); return 0; static class $Program { static async Task&lt…

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