当前位置: 首页 > news >正文

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/

http://www.cnnetsun.cn/news/4888.html

相关文章:

  • L-ink_Card终极指南:STM32L0 Keil工程配置与NFC墨水屏开发实战
  • TorrServer 实用指南:高效种子流媒体服务器
  • Wan2.2-T2V-5B如何实现秒级响应?技术细节曝光
  • Wan2.2-T2V-A14B能否替代传统视频剪辑?一线创作者这样说
  • 14、iOS界面开发:自定义视图、自动布局、尺寸类及交互特性解析
  • 15、移动应用网络优化与用户体验提升
  • 5、Objective-C 内存管理与编程技巧深度解析
  • 3步搞定Bagisto容器化部署:新手也能搭建高可用电商平台
  • Directory Lister 终极指南:一键搭建高效文件浏览系统
  • 开源WMS终极指南:基于.NET 9.0的仓库管理系统完整教程
  • Wan2.2-T2V-A14B如何实现机械运动的精确建模?
  • 3个技巧让z命令成为你的终端导航神器
  • CinoLib:颠覆传统的高性能多面体网格处理引擎
  • 什么是内存泄漏?你在项目中是怎么排查OOM问题的?常用的JVM调优参数你知道哪些?
  • Esprima终极指南:轻松掌握JavaScript代码解析的5大核心技巧
  • 证件照在家拍攻略:记住这3点,你也能拍出让人眼前一亮的证件照
  • 智慧校园建设中的技术选型之道:让每一分投入都物有所值
  • Silvaco TCAD中文用户手册:半导体仿真入门到精通完整指南
  • openssh-master代码分析-sandbox-rlimit.c
  • baresip实战指南:SIP账户配置从入门到精通
  • 测试报告不再单调:用Allure2生成高大上的测试报告
  • Ultimate Vocal Remover GUI:快速上手音频分离工具完整指南
  • 错过将淘汰!PHP开发者必须掌握的低代码组件化新范式
  • R语言Copula模型实战精要(金融风险管理中的隐秘武器)
  • 基于Vue.js的甜品销售数据可视化系统的设计与实现开题报告
  • Prisma批处理终极指南:5分钟掌握百万数据高效操作技巧
  • 基于Vue.js的甜品销售数据可视化系统的设计与实现任务书
  • Zotero文献管理终极指南:从零开始构建个人学术资料库
  • Agent 智能体实战课- 0基础搭建自动化副业提效系统
  • ruoyi-vue-plus登录助手LoginHelper