news 2026/1/30 2:28:39

C#下UDP通信性能探究

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C#下UDP通信性能探究

查看全文:https://www.longkui.site/program/development/c-udp/6976/


0.前言
一个项目,使用C#做UDP组播通信,发现这个过程中有丢包现象,做个测试看看哪种方式更好。

测试工具:visual studio 2022

语言:C#

框架:.netframework 4.5

网络通信库:udpClinet、socket

方式:本机收发

1.数据发送端
数据发送端用C#编写的winfrom程序,使用的是udpClient,参考代码如下:

string msg=“101010EF62”;//测试发送的数据
string[] str;
try
{
string ip = “224.0.0.85”; //组播地址
int port = 28889; //组播端口
System.Net.Sockets.UdpClient udpClient = new System.Net.Sockets.UdpClient();
str = Enumerable.Range(0, msg.Length / 2).Select(i => msg.Substring(i * 2, 2)).ToArray(); //分割成两个一组
byte[] res = new byte[str.Length];
for (int i = 0; i < str.Length; i++)
{
res[i] = Convert.ToByte(str[i], 16); //信息序号
}
udpClient.Send(res, res.Length, new IPEndPoint(IPAddress.Parse(ip), port));
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
注意,发送方式为没有任何间隔(一般做网络通信时要求有一定的间隔,来减少丢包率,此处为了测试性能,发送过程中没有任何间隔)

2.接收端-UdpClient方式
接收端为C#控制台程序(.netframework4.5),使用UdpClient默认方式如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace UDP_test
{
internal class Program
{
private static UdpClient udpClient; //UDP客户端
static void Main(string[] args)
{
udpClient = new UdpClient(28889);
udpClient.JoinMulticastGroup(IPAddress.Parse(“224.0.0.85”)); // 加入组播组
int sum = 0;//计数器
Console.WriteLine(“开始接收数据”);
while (true)
{
// 接收数据
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 28889);
byte[] receiveData = udpClient.Receive(ref remoteEndPoint);
string data = BitConverter.ToString(receiveData);
//Console.WriteLine(data);
sum = sum + 1;
Console.WriteLine(DateTime.Now.ToString(“mm:ss fff”) + " 第" + sum);
}
}
}
}
发送211940条(每条按照218B计算,大概是211940*218/1024/1024=44MB),测试5次

发送持续时间 发送最后时间 接收最后时间 接收条数
206s 47:14 105 47:14 107 204123
176s 57:18 762 57:18 762 204026
151s 02:20 506 02:20 506 199627
162s 07:23 605 07:23 606 203649
174s 14:20 019 14:20 019 202774
我们把缓冲区加大,代码参考如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace UDP_test
{
internal class Program
{
private static UdpClient udpClient; //UDP客户端
static void Main(string[] args)
{
udpClient = new UdpClient(28889);
udpClient.JoinMulticastGroup(IPAddress.Parse(“224.0.0.85”)); // 加入组播组
int sum = 0;//计数器
Console.WriteLine(“开始接收数据”);
udpClient.Client.ReceiveBufferSize = 810241024; //设置缓冲区
while (true)
{
// 接收数据
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 28889);
byte[] receiveData = udpClient.Receive(ref remoteEndPoint);
string data = BitConverter.ToString(receiveData);
//Console.WriteLine(data);
sum = sum + 1;
Console.WriteLine(DateTime.Now.ToString(“mm:ss fff”) + " 第" + sum);
}
}
}
}
结果如下:

发送持续时间 发送最后时间 接收最后时间 接收条数
158s 44:05 531 44:05 531 211940
164s 50:14 850 50:14 850 211940
154s 54:18 726 54:18 728 211940
153s 59:04 861 59:04 867 211940
160s 04:58 543 04:58 543 211940
结果发现并不丢包。

3.接收端—socket方式
参考代码如下:


点击查看全文:https://www.longkui.site/program/development/c-udp/6976/

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/29 22:19:33

L-ink_Card终极指南:STM32L0 Keil工程配置与NFC墨水屏开发实战

L-ink_Card终极指南&#xff1a;STM32L0 Keil工程配置与NFC墨水屏开发实战 【免费下载链接】L-ink_Card Smart NFC & ink-Display Card 项目地址: https://gitcode.com/gh_mirrors/li/L-ink_Card 在嵌入式开发领域&#xff0c;如何将NFC通信与低功耗墨水屏完美结合一…

作者头像 李华
网站建设 2026/1/29 12:03:00

TorrServer 实用指南:高效种子流媒体服务器

TorrServer 是一个功能强大的开源种子流媒体服务器&#xff0c;能够将种子文件&#xff08;torrent&#xff09;实时转换为 HTTP 流媒体&#xff0c;让用户无需等待完整下载即可观看内容。通过智能缓存和流式传输技术&#xff0c;TorrServer 提供了高效的种子播放体验&#xff…

作者头像 李华
网站建设 2026/1/27 10:41:27

Wan2.2-T2V-5B如何实现秒级响应?技术细节曝光

Wan2.2-T2V-5B 如何实现秒级响应&#xff1f;技术细节全解析 你有没有想过&#xff0c;输入一句话“一只发光水母在深海中缓缓游动”&#xff0c;3秒后就能看到一段流畅的动态视频——画面清晰、运动自然&#xff0c;甚至光影都在微微波动&#xff1f;这不再是科幻电影里的桥段…

作者头像 李华
网站建设 2026/1/29 17:17:01

Wan2.2-T2V-A14B能否替代传统视频剪辑?一线创作者这样说

Wan2.2-T2V-A14B能否替代传统视频剪辑&#xff1f;一线创作者这样说 你有没有过这样的经历&#xff1a;凌晨两点&#xff0c;盯着Premiere里还没调完色的第十个版本广告片&#xff0c;心里默念“要是能一句话出成片该多好”&#xff1f;&#x1f92f; 现在&#xff0c;这个幻想…

作者头像 李华
网站建设 2026/1/28 12:19:02

14、iOS界面开发:自定义视图、自动布局、尺寸类及交互特性解析

iOS界面开发:自定义视图、自动布局、尺寸类及交互特性解析 1. 自定义视图 在非游戏或非动画为中心的应用中,从头开始编写自定义视图并不常见。更常用的方法是使用界面构建器和自定义nib文件创建复合视图。不过,当创建更复杂的用户界面或在表格视图中使用这些复合视图时,性…

作者头像 李华
网站建设 2026/1/25 23:08:47

15、移动应用网络优化与用户体验提升

移动应用网络优化与用户体验提升 1. 用户界面与性能优化 用户界面是用户与应用交互的重要部分,即便应用在数据缓存和网络消耗方面表现出色,但如果界面实现不佳,这些优势也会变得次要。 在视图控制器生命周期方面,我们可以利用其生命周期事件确保应用对用户而言不会显得迟…

作者头像 李华