gpt4 book ai didi

德尔福印地 Ping 错误 10040

转载 作者:行者123 更新时间:2023-12-03 15:09:20 25 4
gpt4 key购买 nike

我有一小段代码,可以通过 ping 来检查计算机是否处于事件状态。我们曾经有一个有 40 台计算机的房间,我想通过我的程序远程检查它是否处于事件状态。

因此我使用 indy 编写了一个小 ping 函数

function TMainForm.Ping(const AHost : string) : Boolean;
var
MyIdIcmpClient : TIdIcmpClient;
begin
Result := True;

MyIdIcmpClient := TIdIcmpClient.Create(nil);
MyIdIcmpClient.ReceiveTimeout := 200;
MyIdIcmpClient.Host := AHost;

try
MyIdIcmpClient.Ping;
Application.ProcessMessages;
except
Result := False;
MyIdIcmpClient.Free;
Exit;
end;
if MyIdIcmpClient.ReplyStatus.ReplyStatusType <> rsEcho Then result := False;

MyIdIcmpClient.Free;
end;

所以我在家里的 WiFi 网络上开发了它,一切都工作正常。

当我回去工作时,我进行了测试,并收到一条错误消息

Socket Errod # 10040 Message too long

在工作中,我们有固定的 IP,并且所有计算机和我都在同一子网中。

我尝试断开与固定IP的连接并连接到wifi,当然这是DHCP并且不在同一子网中,并且它工作正常。

我尝试在互联网上搜索此错误以及如何解决它,但没有找到太多信息。

当然,我尝试将默认缓冲区大小更改为更大的值,但它没有改变任何内容,我仍然在同一子网内的固定 IP 上收到错误。

此外,我不知道这是否可以帮助找到解决方案,但我的代码处理异常,但在这种情况下,大约需要 3-4 秒才能引发错误,而超时设置为 200 毫秒。我不能在每次 ping 时等待那么长时间。

顺便说一句,我使用delphi 2010,我认为它是indy 10。我也在XE2上进行了测试,但同样的错误。

任何想法

-----编辑-----

这个问题已得到解答,现在我尝试让它在多线程中运行,并且我为此提出了另一个问题 Delphi (XE2) Indy (10) Multithread Ping

最佳答案

PacketSize 属性设置为 24:

function TMainForm.Ping(const AHost : string) : Boolean;
var
MyIdIcmpClient : TIdIcmpClient;
begin
Result := True;

MyIdIcmpClient := TIdIcmpClient.Create(self);
MyIdIcmpClient.ReceiveTimeout := 200;
MyIdIcmpClient.Host := AHost;
MyIdIcmpClient.PacketSize := 24;
MyIdIcmpClient.Protocol := 1;
MyIdIcmpClient.IPVersion := Id_IPv4;

try
MyIdIcmpClient.Ping;
// Application.ProcessMessages; // There's no need to call this!
except
Result := False;
Exit;
end;
if MyIdIcmpClient.ReplyStatus.ReplyStatusType <> rsEcho Then result := False;

MyIdIcmpClient.Free;
end;

关于德尔福印地 Ping 错误 10040,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12723081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com