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

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

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.mrgr.cn/news/48783.html

相关文章:

  • 在SpringBoot+VUE中 实现登录-RSA的加密解密
  • Spring Boot 项目中 Redis 与数据库性能对比实战:从缓存配置到时间分析,详解最佳实践
  • 【Java知识】java进阶-手撕动态代理
  • 【AI论文精读12】RAG论文综述2(微软亚研院 2409)P4-隐性事实查询L2
  • 16路舵机控制芯片lu9685使用技巧
  • 数据结构-5.4.二叉树的性质
  • 认识C++的变量与整型
  • threejs-补间动画Tween应用
  • [Linux] Linux 进程程序替换
  • 【C++】关联式容器——map和set的使用
  • 可观察性的三大支柱:统一日志、指标和跟踪
  • 衡石分析平台系统管理手册-智能运维之系统日志
  • SpringBoot接口异常:Request header is too large
  • MySQL表的操作
  • Git Commit 规范
  • 对偶范数(Dual Norm)
  • Java-学生管理系统[初阶]
  • uniapp-小程序开发0-1笔记大全
  • sklearn pipeline
  • 中科星图GVE(案例)——AI实现建筑用地变化前后对比情况