【C#】测试网络IP连通

目录

前言

一、问题描述

二、解决方案

三、软件开发(源码)

3.1 方法一:TcpClient

3.2 方法二:Ping

四、项目展示

4.1 程序界面设计

4.2 调用代码

4.3 命令行测试

4.4 更换成方法二测试

五、系列文章


前言

我能抽象出整个世界,但是我不能抽象你。 想让你成为私有常量,这样外部函数就无法访问你。 又想让你成为全局常量,这样在我的整个生命周期都可以调用你。 可惜世上没有这样的常量,我也无法定义你,因为你在我心中是那么的具体。

哈喽大家好,本专栏为【项目实战】专栏,有别于【底层库】专栏,我们可以发现增加 了『问题描述』、『项目展示』章节,十分符合项目开发流程,让读者更加清楚项目解决的问题、以及产品能够达到的效果。本专栏收纳项目开发过程的解决方案,是我项目开发相对成熟、可靠方法的提炼,我将这些问题的解决思路梳理,撰写本文分享给大家,大家遇到类似问题,可按本文方案处理。

本专栏会持续更新,不断完善,专栏文章关联性较弱(文章之间依赖性较弱,没有阅读顺序)。大家有任何问题,可以私信我。如果您对本专栏感兴趣,欢迎关注吧,我将带你用最简洁的代码,实现复杂的功能。

·提示:本专栏为项目实战篇,未接触项目开发的同学可能理解困难,不推荐阅读。

一、问题描述

二、解决方案

第一个ip(192.168.*)是外网地址,第二ip(211.103.*)是公网地址,第三ip(202.101.*)是公网地址。客户要求功能程序通用性,在以上三个环境,任意一个都可以访问数据,并实时更新组件。所以我们要按以上顺序,快速判断是否可以连接,连接不上的自动切换下一个ip,而不是等待卡死。

三、软件开发(源码)

3.1 方法一:TcpClient

        /// <summary>
        /// 测试服务器连通,默认5
        /// </summary>
        /// <param name="millisecondsTimeout"></param>
        /// <returns></returns>
        public bool TestConnection(int millisecondsTimeout = 5)
        {
            TcpClient client = new TcpClient();
            try
            {
                var ar = client.BeginConnect(Str_ServerIP, Int_port, null, null);
                ar.AsyncWaitHandle.WaitOne(millisecondsTimeout);
                return client.Connected;
            }
            catch (Exception)
            {
                return false;
            }
            finally
            {
                client.Close();
            }
        }

3.2 方法二:Ping

创建类PingIpHelper.cs,复制以下代码:

        /// <summary>
        /// 测试服务器连通
        /// </summary>
        /// <param name="millisecondsTimeout"></param>
        /// <returns></returns>
        public bool TestConnection()
        {
            Ping pingSender = new Ping();

            try
            {
                PingReply reply = pingSender.Send(Str_ServerIP, 120);
                return reply.Status == IPStatus.Success;
            }
            catch (PingException)
            {
                return false;
            }
        }

四、项目展示

4.1 程序界面设计

就是一个按钮,检测能否连接上数据库。这里我使用方法一,提示连接不上,其实可以连接的。

4.2 调用代码

使用MySQLcommand访问数据库。

        /// <summary>
        /// 执行SQL语句,返回影响的记录数
        /// </summary>
        /// <param name="SQLString">SQL语句</param>
        /// <returns>影响的记录数</returns>
        public int ExecuteSql(string SQLString)
        {
            using (MySqlConnection connection = new MySqlConnection(Str_Connection))
            {
                using (MySqlCommand cmd = new MySqlCommand(SQLString, connection))
                {
                    try
                    {
                        connection.Open();
                        return cmd.ExecuteNonQuery();
                    }
                    catch (MySqlException e)
                    {
                        throw e;
                    }
                    finally
                    {
                        cmd.Dispose();
                        connection.Close();
                    }
                }
            }
        }
        #region 数据库测试
        private void BTN_DBTest_Click(object sender, EventArgs e)
        {
            dxErrorProvider1.ClearErrors();//清空一下错误,不然上一次错误依旧在
            if (text_serverIP.Text == "")
            {
                dxErrorProvider1.SetError(text_serverIP, "服务器IP不为空!");
                text_serverIP.Focus();
                return;
            }

            if (text_uid.Text == "")
            {
                dxErrorProvider1.SetError(text_uid, "用户名不为空!");
                text_uid.Focus();
                return;
            }

            if (text_pwd.Text == "")
            {
                dxErrorProvider1.SetError(text_pwd, "密码不为空!");
                text_pwd.Focus();
                return;
            }

            MySQLHelper mySQL = new MySQLHelper();

            if (mySQL.TestConnection())
            {
                FrmTips.ShowTipsSuccess(this, "数据库连接成功!");
            }
            else
            {
                FrmTips.ShowTipsSuccess(this, "数据库连接失败,请检查!");
            }
        }
        #endregion

4.3 命令行测试

我使用Telnet,测试连接。

提示是3306端口访问不了,还有乱码,我服务器上数据库管理工具未激活,并且到期了,不知道是不是这个原因。

4.4 更换成方法二测试

更换成方法二测试成功,这两个方法建议都试一试,没有谁好谁坏,都是一样的,只是环境不同会导致结果不同。

五、系列文章

 C#项目--业务单据号生成器(定义规则、自动编号、流水号)
本文链接:C#项目--业务单据号生成器(定义规则、自动编号、流水号)_花北城的博客-CSDN博客

C#项目--开始日期结束日期范围计算(上周、本周、明年、前年等)
本文链接:C#项目--开始日期结束日期范围计算(上周、本周、明年、前年等)_c# 上周_花北城的博客-CSDN博客

C#项目--数据实体类使用
本文链接:C#底层库--数据实体类_c#实体类_花北城的博客-CSDN博客

C#项目--单据审批流方案
本文链接:C# 单据审批流方案_c# 审批流_花北城的博客-CSDN博客

C#项目--二维码标签制作及打印(完整版)
本文链接:C# 二维码标签制作及打印(完整版)_c# 打印标签_花北城的博客-CSDN博客

C#项目--条码管理操作手册
本文链接:条码管理操作手册_花北城的博客-CSDN博客

C#项目--WebAPI发布和IIS部署,及异常处理
本文链接:C# WebAPI项目发布和IIS部署_webapi发布到iis_花北城的博客-CSDN博客

C#项目--提高编程效率,代码自动生成
本文链接:C#提高编程效率--自动代码生成器_c# 代码生成器_花北城的博客-CSDN博客

C#项目--提高编程效率,Excel数据导入工具
本文链接:C#提高编程效率专辑—数据导入工具_c# 导表工具_花北城的博客-CSDN博客

C#项目--Windows服务(Service)安装及启停方案
本文链接:Windows服务(Service)安装及启动停止方案_windows服务安装_花北城的博客-CSDN博客

C#项目--穿透Session隔离,服务调用外部程序(无窗体界面解决)
本文链接:C#项目--穿透Session隔离,服务调用窗体程序(详细)_c# 服务打开程序没有界面_花北城的博客-CSDN博客

C#项目--任务计划实现,使用Quartz类
本文链接:Quartz封装任务计划管理类_花北城的博客-CSDN博客

C#项目--《周计划管理关于产前准备模块》解决方案20200203
本文链接:《周计划管理关于产前准备模块》解决方案20200203_花北城的博客-CSDN博客

C#项目--项目中,源码解析的正则表达式
本文链接:代码解析正则表达式_代码转换正则表达式_花北城的博客-CSDN博客

C#项目--如何获取文件版本和MD5值
本文链接:C#获取文件版本和MD5值_花北城的博客-CSDN博客

C#项目--如何测试网络是否连通方法
本文链接:C#测试网络是否能够访问_花北城的博客-CSDN博客

C#项目--打印模板解决方案(自定义模板、条形码、二维码、图片)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129415723

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花北城

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值