在 Visual Studio C# 中发出 Ping 请求

Posted

技术标签:

【中文标题】在 Visual Studio C# 中发出 Ping 请求【英文标题】:Make Ping request in Visual Studio C# 【发布时间】:2021-11-12 00:09:29 【问题描述】:

所以我对 Visual Studio 和 C# 非常陌生,但是在我的应用程序中创建 Ping cmd 时遇到了麻烦。我已经包含了代码和图像。基本上,当我运行应用程序并尝试发出 ping 请求时,它只会将我带到 App.g.i.cs 文件并突出显示此代码

#if DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
            UnhandledException += (sender, e) =>
            
                if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break();
            ;
#endif
        
    

所以我不知道我到底哪里错了。我知道这可能是一个非常愚蠢的问题,但我还不熟悉 Visual Studio。希望有任何建议:) 这是代码

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using System.Net;
using System.Net.NetworkInformation;
using System.Text;
using System.ComponentModel;
using System.Threading;

// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409

namespace Ping_IP

    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    
        public MainPage()
        
            this.InitializeComponent();
        

        private void Button_Click(object sender, RoutedEventArgs e)
        
            Ping pingsender = new Ping();

            PingReply reply = pingsender.Send(ip_address.ToString());
            if (reply.Status == IPStatus.Success)
            
                status_info.Text = "Sucess! - " + DateTime.Now.ToLocalTime();  //reply.Status.ToString();
             else
            
                status_info.Text = "Failed... - " + DateTime.Now.ToLocalTime();
            
        
    

【问题讨论】:

检查调试器中的e 参数——它会告诉你出了什么问题。假设ip_address 是一个WPF 文本框,使用ip_address.Text 来获取输入的文本,而不是ip_address.ToString()。您可能希望在事件处理程序处设置断点并逐步执行以获取更多信息。 @KlausGütter 好的谢谢你还是一样的东西,但我确实把它改成了ip_address.Text 在代码中检查e 会是什么样子? 在调试模式下禁用未处理的异常处理程序。它会阻止 Visual Studio 识别异常并停止异常真正发生的位置。 您也可以将整个事件处理程序包装在try...catch 中,如果出现异常,请将异常消息写入status_info.Text @ThomasWeller 好吧,这听起来是个好主意,我只是不知道该怎么做哈哈。有什么建议吗? 【参考方案1】:

参考了Klaus Gütter的意见,成功返回数据。

PingReply reply = pingsender.Send(ip_address.Text);

完整代码

private void Button_Click(object sender, RoutedEventArgs e) 
            Ping pingsender = new Ping();
            PingReply reply = pingsender.Send(ip_address.Text);
            if (reply.Status == IPStatus.Success) 
                status_info.Text = "Sucess! - " + DateTime.Now.ToLocalTime();  //reply.Status.ToString();
             else 
                status_info.Text = "Failed... - " + DateTime.Now.ToLocalTime();
            
        

尝试捕捉

        private void Button_Click(object sender, RoutedEventArgs e) 
            Ping pingsender = new Ping();
            try 
                PingReply reply = pingsender.Send(ip_address.Text);
                if (reply.Status == IPStatus.Success) 
                    status_info.Text = "Sucess! - " + DateTime.Now.ToLocalTime();  //reply.Status.ToString();
                 else 
                    status_info.Text = "Failed... - " + DateTime.Now.ToLocalTime();
                
             catch (Exception) 
                MessageBox.Show("something wrong");
                  
        
    

尝试失败时提示。

【讨论】:

非常感谢您!所以trycatch 有效,因为它不断抛出Exception,我不知道为什么。我确实看到了这一点 Exception thrown: 'System.PlatformNotSupportedException' in System.Net.Ping.dll Exception thrown: 'System.Net.NetworkInformation.PingException' in System.Private.CoreLib.dll 您能否更新您的问题并提供更多信息? 如果您不介意,可以点击“✔”将我的回复标记为已接受答案。它还将帮助其他人解决类似的问题。

以上是关于在 Visual Studio C# 中发出 Ping 请求的主要内容,如果未能解决你的问题,请参考以下文章

禁止对 Visual Studio 中的所有项目发出警告

Visual Studio 中的 M_PI 问题

如何将 Raspberry Pi 3 连接到 Visual Studio? (更新)

visual studio 2013 中更改C#项目的 Framework 版本

如何在一个 Visual Studio 解决方案中的 2 个内部 API 之间发出 API 请求?

为啥visual studio 2013安装后,没有c#模板?