0

0

C#怎么进行UDP通信 C# UdpClient实现UDP协议编程

月夜之吻

月夜之吻

发布时间:2025-11-08 22:29:29

|

584人浏览过

|

来源于php中文网

原创

使用UdpClient类可简化C#中的UDP通信。1. 发送数据:创建UdpClient实例,调用Send()方法指定目标IP和端口,如向127.0.0.1:8888发送"Hello UDP!";2. 接收数据:绑定端口(如8888),使用Receive()阻塞等待数据,通过IPEndPoint获取发送方信息;3. 异步通信:使用ReceiveAsync()实现非阻塞接收,适合长时间监听;4. 广播支持:设置EnableBroadcast=true后可向局域网广播消息。UDP无连接、高效但不保证可靠,适用于实时性要求高的场景,需应用层处理丢包与顺序问题。

c#怎么进行udp通信 c# udpclient实现udp协议编程

使用C#进行UDP通信主要依赖于UdpClient类,它位于System.Net.Sockets命名空间中,封装了底层Socket操作,让UDP协议编程更加简单直观。UDP是一种无连接、不可靠但传输效率高的协议,适合对实时性要求高、能容忍少量丢包的场景,比如音视频传输、心跳包、广播通知等。

1. 使用UdpClient发送UDP数据

要发送UDP数据,创建一个UdpClient实例,调用Send()方法指定目标IP和端口即可。

示例:向本地127.0.0.1:8888发送一条消息:

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

UdpClient sender = new UdpClient();
byte[] data = Encoding.UTF8.GetBytes("Hello UDP!");
sender.Send(data, data.Length, "127.0.0.1", 8888);
sender.Close();
  • Send(byte[], int, string, int):传入字节数组、长度、目标IP和端口号。
  • 无需建立连接,直接发送。
  • 发送后应调用Close()释放资源,或使用using语句自动管理。

2. 使用UdpClient接收UDP数据

接收端需绑定到指定IP和端口,然后调用Receive()方法等待数据到来。

示例:监听本机8888端口接收消息:

居然设计家
居然设计家

居然之家和阿里巴巴共同打造的家居家装AI设计平台

下载
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

UdpClient receiver = new UdpClient(8888); // 绑定端口
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);

try {
    byte[] receivedData = receiver.Receive(ref remoteEP);
    string message = Encoding.UTF8.GetString(receivedData);
    Console.WriteLine($"收到来自 {remoteEP} 的消息:{message}");
}
catch (Exception ex) {
    Console.WriteLine("接收出错:" + ex.Message);
}
finally {
    receiver.Close();
}
  • new UdpClient(8888)表示绑定本机8888端口。
  • IPEndPoint用于接收发送方的信息(IP和端口)。
  • Receive()是阻塞方法,直到收到数据才返回。

3. 实现异步UDP通信(非阻塞)

为避免主线程被Receive()阻塞,可使用异步方式接收数据。

推荐使用ReceiveAsync()(.NET Framework 4.5+ 或 .NET Core/5+):

UdpClient udpClient = new UdpClient(8888);

async Task ListenAsync() {
    while (true) {
        var result = await udpClient.ReceiveAsync();
        string message = Encoding.UTF8.GetString(result.Buffer);
        Console.WriteLine($"来自 {result.RemoteEndPoint}:{message}");
    }
}

// 启动监听
await ListenAsync();
  • ReceiveAsync()返回ValueTask,包含数据和远程地址。
  • 可用于构建服务端或长时间运行的监听程序。
  • 注意循环中避免死锁,合理处理异常和取消逻辑。

4. 广播与多播(可选扩展)

UDP支持向局域网广播消息,只需将目标IP设为广播地址(如192.168.1.255)并启用广播选项:

UdpClient broadcaster = new UdpClient();
broadcaster.EnableBroadcast = true;

byte[] msg = Encoding.UTF8.GetBytes("Broadcast message");
broadcaster.Send(msg, msg.Length, "192.168.1.255", 8888);
broadcaster.Close();
  • 必须设置EnableBroadcast = true,否则会抛出异常。
  • 广播仅限局域网,路由器通常不会转发。

基本上就这些。UdpClient简化了UDP编程,适合快速实现轻量级通信。注意UDP不保证送达、不保证顺序,应用层需自行处理可靠性问题。如果需要稳定传输,建议使用TCP或在UDP基础上加确认机制。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

311

2023.08.02

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

311

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

510

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

46

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

174

2025.08.29

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

462

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

462

2023.08.10

tcp和udp的区别
tcp和udp的区别

TCP和UDP的区别,在连接性、可靠性、速度和效率、数据报大小以及适用场景等方面。本专题为大家提供tcp和udp的区别的相关的文章、下载、课程内容,供大家免费下载体验。

115

2023.07.25

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

10

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 4万人学习

Sass 教程
Sass 教程

共14课时 | 0.7万人学习

Pandas 教程
Pandas 教程

共15课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号