当我使用 C# 代码 ping IP 时,我得到的回复与通过命令行 ping 时不同。为什么?

问题描述 投票:0回答:1

我有以下 C# 代码用于 ping IP,并将结果写入日志。

private async ValueTask PingMachine() {
        var timesToPing = 4;
        var counter = 1;

        while (counter <= timesToPing) {
            var reply = await Pinger();
            foreach (var r in reply) {
               TagService.log_PLC.AppendLine($" Pinged {TagService.IP_PLC_List} {counter} times time:{r.RoundtripTime} status: {r.Status.ToString()}");
            }
        }
        counter++;
}

private async Task<IEnumerable<PingReply>> Pinger() {
    List<string> addresses = new List<string>();
    if (Check_IP_Correct(TagService.IP_PLC_List) == true) {
        addresses.Add(TagService.IP_PLC_List);
    }

    var tasks = addresses.Select(async ip => await new Ping().SendPingAsync(ip, 1000));
    var reply = await Task.WhenAll(tasks);
    return reply;
}

当我 ping 一个正常在线的 IP 时,没有问题,但是当我 ping 一个无法访问的特定 IP 进行测试时,日志中总是出现以下情况。 (3次

TimedOut
,第四次回复始终是
DestinationHostUnreachable

Pinged 10.92.XXX.XX 1 times time:0 status: TimedOut
Pinged 10.92.XXX.XX 2 times time:0 status: TimedOut
Pinged 10.92.XXX.XX 3 times time:0 status: TimedOut
Pinged 10.92.XXX.XX 4 times time:0 status: DestinationHostUnreachable

当我在具有相同 IP 的同一服务器中进行测试时,但这次直接在命令行中,我总是得到类似

Destination host unreachable
的回复。

Reply from 100.72.XXX.XX: Destination host unreachable.
Reply from 100.72.XXX.XX: Destination host unreachable.
Reply from 100.72.XXX.XX: Destination host unreachable.
Reply from 100.72.XXX.XX: Destination host unreachable.

我认为命令行中的回复应该是正确的。为什么我的代码得到不同的回复?可能出了什么问题?

c# asynchronous command-line task ping
1个回答
0
投票

据我所知,TCP/IP 中没有规范说明当 ping 在超时之前没有得到响应时必须告诉用户什么。

因此每个客户端只是尝试向用户提供适当且有用的消息。

看起来 ping.exe 命令行工具的创建者选择说“来自 100.72.XXX.XX 的回复:目标主机无法访问。”

无论您用于从 C# ping 的库的创建者都选择了“Pinged 10.92.XXX.XX 3 次 time:0 status: TimedOut”

它们不同对你来说重要吗?

© www.soinside.com 2019 - 2024. All rights reserved.