C# udp通信测试助手-点对点-网络断开检测

devtools/2024/10/19 13:27:27/

1、界面和功能如下,实现功能

(1)100毫秒接收一次,超过1秒钟没有接收到目标信息,则视为连接断开

(2)接收的Soecket目标地址、端口号显示

(3)1秒钟自动发送

(4)本机地址和端口号、目标地址和端口号,从配置文件中读取。

2、代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;namespace UdpTest
{public partial class MaiForm : Form{public MaiForm(){InitializeComponent();}//IniFile ini = new IniFile("./Config.ini");//bool isRecvIpShow = false;bool isContinueSend = false;        //是否连续发送bool isAutoNewLine = false;         //是否自动换行// 创建UdpClient实例Socket udpClient;Thread t;Thread t2;string udpRecv;string target_IpPort;long heartFlag = 0;long nRecvLengthSum = 0;private void MaiForm_Load(object sender, EventArgs e){//char ch = '1';//string str = "";//str = ch.ToString();//string str = "1,2,3";//char ch1 = str[0];//char ch2 = str[2];//char ch3 = str[4];//long a = 6553611111111111111;try{//txtLocalIp.Text = ini.IniReadValue("系统参数", "本机IP地址");txtLocalPort.Text = ini.IniReadValue("系统参数", "本机端口号");txtSendIp.Text = ini.IniReadValue("系统参数", "目标IP地址");txtSendPort.Text = ini.IniReadValue("系统参数", "目标端口号");//udpClient = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);udpClient.Bind(new IPEndPoint(IPAddress.Parse(txtLocalIp.Text), int.Parse(txtLocalPort.Text)));t = new Thread(sendMsg);t.Start();t2 = new Thread(ReciveMsg);t2.Start();timer1.Start();target_IpPort = txtSendIp.Text + ":" + txtSendPort.Text;txtLocalUdpState.Text = "Udp创建成功";}catch {txtLocalUdpState.Text = "Udp创建失败";}}/// <summary>/// 向特定ip的主机的端口发送数据报/// </summary>void sendMsg(){EndPoint point = new IPEndPoint(IPAddress.Parse(txtSendIp.Text), int.Parse(txtSendPort.Text));while (true){if(isContinueSend){string msg = txtSend.Text;udpClient.SendTo(Encoding.Default.GetBytes(msg), point);Thread.Sleep(1000);}                }}/// <summary>/// 接收发送给本机ip对应端口号的数据报/// </summary>void ReciveMsg(){while (true){try{EndPoint point = new IPEndPoint(IPAddress.Any, 0);//用来保存发送方的ip和端口号byte[] buffer = new byte[1024];int length = udpClient.ReceiveFrom(buffer, ref point);//接收数据报string strRecvTemp = Encoding.UTF8.GetString(buffer, 0, length);if (length > 0){nRecvLengthSum += length;//是否显示接收的ip地址和端口号if (isRecvIpShow){//是否自动换行if (!isAutoNewLine){udpRecv += point.ToString() + ": " + strRecvTemp;}else{udpRecv += point.ToString() + ": " + strRecvTemp + "\r\n";}}else{if (!isAutoNewLine){udpRecv +=  strRecvTemp;}else{udpRecv +=  strRecvTemp + "\r\n";}}string str = point.ToString();if (target_IpPort == str){heartFlag = 0;}}Thread.Sleep(100);}catch { }}}private void btnSend_Click(object sender, EventArgs e){EndPoint point = new IPEndPoint(IPAddress.Parse(txtSendIp.Text), int.Parse(txtSendPort.Text));string msg = txtSend.Text;udpClient.SendTo(Encoding.UTF8.GetBytes(msg), point);}private void timer1_Tick(object sender, EventArgs e){isAutoNewLine = checkAutoNewLine.Checked;isRecvIpShow = check_接收Ip地址和端口号.Checked;txtUdpRecv.Text = udpRecv;txtRecvLength.Text = nRecvLengthSum.ToString();if (heartFlag > 10){txtTargetConnectState.Text = "连接断开";}else{txtTargetConnectState.Text = "连接成功";}heartFlag++;//if (heartFlag > 65534)//{//    heartFlag = 100;//}txtDisConnectTime.Text = (heartFlag / 10).ToString();}private void MaiForm_FormClosing(object sender, FormClosingEventArgs e){System.Environment.Exit(0);         //强制关闭所有线程   Application.Exit();}private void checkContinueSend_CheckedChanged(object sender, EventArgs e){isContinueSend = checkContinueSend.Checked;if(isContinueSend){btnSend.Enabled = false;}else{btnSend.Enabled = true;}}private void btnClear_Click(object sender, EventArgs e){txtUdpRecv.Text = "";udpRecv = "";nRecvLengthSum = 0;}}
}

3、下载连接

https://download.csdn.net/download/panjinliang066333/89879538


http://www.ppmy.cn/devtools/127017.html

相关文章

Java开发中知识点整理

正则表达式 测试网址 Git 分支和主分支有冲突 先checkout origin/分支把origin/master pull进本地分支 修改冲突MergeCommit and Push

网络安全领域红蓝对抗里关于红队全方位解析

提到红队&#xff0c;似乎行内都会默认为红队就是攻击队&#xff0c;而蓝队则是防守队&#xff0c;大部分文章也会把红队解释为是一种全范围的多层攻击模拟&#xff0c;我们平常沟通确实也会这样说&#xff0c;而事实上&#xff0c;到底什么才是红队&#xff1f; 红队一般是以…

Vscode的远程开发之VScode优势(一)

一、VSCode 优势 时代的弄潮儿 vscode是微软开源的基于electron的编辑器&#xff0c;通过各种各样的插件&#xff0c;它能够变成你最花里胡哨的IDE。 vscode 最大的特点与优势就是它将Server与Client解耦&#xff1a; 作为Client的vscode&#xff0c;他只负责作为文本编辑器…

10月18日笔记(基于系统服务的权限提升)

系统内核漏洞提权 当目标系统存在该漏洞且没有更新安全补丁时&#xff0c;利用已知的系统内核漏洞进行提权&#xff0c;测试人员往往可以获得系统级别的访问权限。 查找系统潜在漏洞 手动寻找可用漏洞 在目标主机上执行以下命令&#xff0c;查看已安装的系统补丁。 system…

Midjourney中文版:开启AI绘画新时代

在数字时代&#xff0c;艺术创作已经不再是传统艺术家的专属领地。随着人工智能技术的飞速发展&#xff0c;一款名为Midjourney的AI绘画工具正引领着艺术创作的革命。如今&#xff0c;Midjourney中文版已经上线&#xff0c;为中文用户提供了一个全新的、触手可及的创作平台。 …

LockSupport

LockSupport类为构建锁和同步器提供了基本的线程阻塞唤醒原语&#xff0c;JDK中我们熟悉的AQS基础同步类就使用了它来控制线程的阻塞和唤醒&#xff0c;也许我们更加熟悉的阻塞唤醒操作是wait/notify方式&#xff0c;它主要以Object的角度来设计。而LockSupport提供的park/unpa…

【Unity - 屏幕截图】技术要点

在Unity中想要实现全屏截图或者截取某个对象区域的图片都是可以通过下面的函数进行截取 Texture2D/// <summary>/// <para>Reads the pixels from the current render target (the screen, or a RenderTexture), and writes them to the texture.</para>/…

Scala入门基础(12)抽象类

抽象类&#xff0c;制定标准&#xff0c;不要求去具体实现 包含了抽象方法的类就是抽象类。抽象方法只是有方法名&#xff0c;没有具体方法体的方法 定义抽象类要用abstract&#xff08;抽象&#xff09;关键字 用智能驾驶技术举例&#xff1a;演示&#xff09…