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

server/2024/10/18 16:46:24/

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/server/130772.html

相关文章

Oceanbase学习之—docker下oceanbase部署体验

一、操作系统及配置 [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]# free -g total used free shared buff/cache available Mem: 15 3 7 0 …

Linux Cent7 已安装MySQL5.7.X,再安装MYSQL8.4.2

一、 下载安装 检查Linux系统的glibc版本rpm -qa | grep glibc结果&#xff1a;glibc-common-2.17-260.el7_6.6.x86_64 glibc-2.17-260.el7_6.6.x86_64 glibc-headers-2.17-260.el7_6.6.x86_64 glibc-devel-2.17-260.el7_6.6.x86_64访问MySQL官网&#xff0c;下载对应版本数据…

【通过zip方式安装mysql服务】

通过zip方式安装mysql服务 Mysql安装包下载mysql安装及环境配置1.解压缩配置环境变量初始化mysql配置安装mysql服务启动MySQL服务连接mysql修改root用户密码 Mysql安装包下载 通过访问mysql官网下载&#xff1a;mysql下载地址 mysql安装及环境配置 1.解压缩 下载完成后&am…

成像基础 -- 景深计算

景深计算 景深&#xff08;Depth of Field, DOF&#xff09;指的是在摄影中&#xff0c;能够清晰成像的物体前后距离的范围。景深的大小取决于多个因素&#xff0c;包括焦距、光圈值、物距以及相机感光元件的尺寸。 1. 景深的主要参数 焦距&#xff08; f f f&#xff09;&a…

基于springboot vue 电影推荐系统

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php python(flask Django) 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找…

应对网站IP劫持的有效策略与技术手段

摘要&#xff1a; IP劫持是一种常见的网络攻击方式&#xff0c;攻击者通过非法手段获取目标网站服务器的控制权&#xff0c;进而改变其网络流量的路由路径&#xff0c;导致用户访问错误的站点。本文将介绍如何识别IP劫持&#xff0c;并提供一系列预防和应对措施&#xff0c;以确…

单片机教案 1.1 ATmega2560单片机概述

第一章 迈进单片机的大门 Arduino是一款便捷灵活、方便上手的开源电子原型平台&#xff0c;为迈进单片机的大门提供了良好的入门途径。以下是对Arduino的详细介绍&#xff1a; 一、Arduino简介 Arduino是一个能够用来感应和控制现实物理世界的一套工具&#xff0c;它由一个基…

高频历史行情数据获取和策略分享

标题&#xff1a;量化高频价差交易&#xff1a;技术与策略的完美结合 一、概述 量化高频价差交易&#xff0c;作为金融市场的一种新兴交易方式&#xff0c;以其独特的优势在众多交易策略中脱颖而出。本文将探讨量化高频价差交易的原理、策略及其在实战中的应用&#xff0c;…