C# Udp测试工具开发
2023-09-11 14:16:29 时间
1、软件UI测试界面
2、创建Config.ini配置文件
[系统参数]
本地UDP地址=192.168.124.4
本地UDP端口=7788
目标控制器IP地址=192.168.124.255
目标控制器端口号=6666
3、创建全局变量
IniFile ini = new IniFile("./Config.ini");
bool isUdpConnected = false;
static Socket client;
Thread threadRecv;
string recv;
string LocalIp = "192.168.1.25";
int LocalPort = 1000;
string TargetIp = "192.168.1.255";
int TargetPort = 10000;
4、添加UdpForm_Load事件程序
private void UdpForm_Load(object sender, EventArgs e)
{
try
{
LocalIp = ini.IniReadValue("系统参数", "本地UDP地址");
LocalPort = int.Parse(ini.IniReadValue("系统参数", "本地UDP端口"));
TargetIp = ini.IniReadValue("系统参数", "目标控制器IP地址");
TargetPort = int.Parse(ini.IniReadValue("系统参数", "目标控制器端口号"));
txtLocalIp.Text = LocalIp;
txtLocalPort.Text = LocalPort.ToString();
txtTargetIp.Text = TargetIp;
txtTargetPort.Text = TargetPort.ToString();
client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
client.Bind(new IPEndPoint(IPAddress.Parse(LocalIp), LocalPort));
Thread.Sleep(50);
txtUdpState.Text = "本地Udp创建成功";
isUdpConnected = true;
}
catch
{
txtUdpState.Text = "本地Udp创建失败";
isUdpConnected = false;
}
threadRecv = new Thread(ReciveMsg);
threadRecv.Start();
timer1.Start();
}
5、创建线程ReciveMsg()处理函数
/// <summary>
/// 接收发送给本机ip对应端口号的数据报
/// </summary>
void ReciveMsg()
{
while (true)
{
if(isUdpConnected)
{
EndPoint point = new IPEndPoint(IPAddress.Any, 0);//用来保存发送方的ip和端口号
byte[] buffer = new byte[1024];
int length = client.ReceiveFrom(buffer, ref point);//接收数据报
if(length>0)
{
//显示对方ip地址和端口号
string fromIp = point.ToString();
recv += fromIp;
recv += "\r\n";
//显示发送时间
string sTime = DateTime.Now.ToString();
recv += sTime;
recv += ":";
}
recv += Encoding.UTF8.GetString(buffer, 0, length);
recv += "\r\n";
/*
EndPoint point = new IPEndPoint(IPAddress.Any, 0);//用来保存发送方的ip和端口号
byte[] buffer = new byte[1024];
int length = client.ReceiveFrom(buffer, ref point);//接收数据报
recv += Encoding.UTF8.GetString(buffer, 0, length);
recv += "\r\n";
//txtReciv.Text += recv;
*/
}
}
}
6、添加btnSend_Click按钮事件程序
private void btnSend_Click(object sender, EventArgs e)
{
try
{
UdpSend(txtSend.Text, TargetIp, TargetPort);
}
catch
{
}
}
7、封装UdpSend方法
/// <summary>
/// 本地Udp对外单播
/// </summary>
/// <param name="strSend"></param>
/// <param name="ip"></param>
/// <param name="port"></param>
private void UdpSend(string strSend, string ip, int port)
{
try
{
if (isUdpConnected)
{
string targetIp = ip;
//int targetPort = int.Parse(port);
EndPoint point = new IPEndPoint(IPAddress.Parse(targetIp), port);
string msg = strSend;
client.SendTo(Encoding.UTF8.GetBytes(msg), point);
}
}
catch { }
}
8、关闭程序,关闭创建的所有线程
private void UdpForm_FormClosing(object sender, FormClosingEventArgs e)
{
System.Environment.Exit(0); //强制关闭所有线程
}
下载连接
https://download.csdn.net/download/panjinliang066333/85567657
相关文章
- Unity3D热更新全书-脚本(四) 用C#LightEvil搭建实际开发使用的脚本框架
- C# String 前面不足位数补零的方法
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- c#打包文件解压缩 C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法 一个简单例子理解C#的协变和逆变 对于过长字符串的大小比对
- 利用反射快速给Model实体赋值 使用 Task 简化异步编程 Guid ToString 格式知多少?(GUID 格式) Parallel Programming-实现并行操作的流水线(生产者、消费者) c# 无损高质量压缩图片代码 8种主要排序算法的C#实现 (一) 8种主要排序算法的C#实现 (二)
- 拒绝“高冷”词汇!初学C#中的委托
- 用C#开发的一个通用的地铁换乘查询工具
- c# asp.mvc 从客户端(...)中检测到有潜在危险的 Request.Form 值
- C#,数值计算,矩阵的行列式(Determinant)、伴随矩阵(Adjoint)与逆矩阵(Inverse)的算法与源代码
- C#,入门教程(02)—— Visual Studio 2022开发环境搭建图文教程
- 基于C#+MySQL实现(WinForm)停车场管理系统【100010066】
- C#字节数组与字符串转换
- 用c#开发微信 (16) 微活动 2 刮刮卡
- 解决关闭窗口,C#报错"在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke"
- C#解压和压缩文件
- Unity之C#高级开发①
- VS2017的C#语言与matlab2014A的m语言混合编程的方法
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- C#+winform登陆界面案例