delphi Indy SOCKET ERROR #1 on MacOS,using IdIcmpClient,works fine on Windows

pod7payv  于 2023-11-18  发布在  Mac
关注(0)|答案(1)|浏览(203)

嘿,所有我得到“套接字错误#1”在macOS上使用indy,此代码在Windows上工作正常.使用FMX在这里.使用macOS索诺马防火墙在macOS主机上关闭.

  1. procedure TFrame_PingIPDomain.PingIPDomain;
  2. begin
  3. memOutput.Lines.Clear;
  4. IdIcmpClient.ReceiveTimeout := Round(sbTimeout.Value);
  5. // IdIcmpClient.PacketSize := Round(sbPacketSize.Value);
  6. IdIcmpClient.Host := edtIPDomain.Text;
  7. memOutput.Lines.Add('Pings:');
  8. memOutput.Lines.Add('======================================');
  9. var AvgTime: Double := 0.0;
  10. var PingTimes := TList<Double>.Create;
  11. for var I := 1 to Round(sbPingCount.Value) do
  12. begin
  13. IdIcmpClient.Ping();
  14. if IdIcmpClient.ReplyStatus.ReplyStatusType = rsEcho then
  15. begin
  16. var RoundTripTime := IdIcmpClient.ReplyStatus.MsRoundTripTime;
  17. PingTimes.Add(RoundTripTime);
  18. memOutput.Lines.Add('Reply from ' + IdIcmpClient.ReplyStatus.FromIpAddress + ': time=' + RoundTripTime.ToString + 'ms');
  19. end
  20. else if IdIcmpClient.ReplyStatus.ReplyStatusType = rsTimeout then
  21. memOutput.Lines.Add('Ping request timed out')
  22. else
  23. memOutput.Lines.Add('Ping request failed');
  24. end;
  25. PingTimes.Sort;
  26. for var I := 1 to PingTimes.Count-1 do
  27. AvgTime := AvgTime + PingTimes.Items[I];
  28. AvgTime := AvgTime / PingTimes.Count;
  29. memOutput.Lines.Add('======================================');
  30. memOutput.Lines.Add('Statistics:');
  31. memOutput.Lines.Add('======================================');
  32. memOutput.Lines.Add('Min Time: ' + PingTimes.First.ToString + 'ms');
  33. memOutput.Lines.Add('Max Time: ' + PingTimes.Last.ToString + 'ms');
  34. memOutput.Lines.Add('Avg Time: ' + AvgTime.ToString + 'ms');
  35. end;

字符串
插槽错误#1

wn9m85ua

wn9m85ua1#

我根据@RemyLebeau的评论发布了一个答案:
MacOS上的SOCKET ERROR #1表示不允许操作
您需要使用管理权限运行应用。TIdIcmpClient使用RAW套接字,大多数平台仅限管理员使用RAW套接字。
所以你的代码是好的,你只需要运行你的应用程序与管理权限。
从@GorhinStroebel的评论中,如果你想通过终端在MacOS上使用Admin插件运行你的应用,你可以运行:

  1. sudo path-to.app/Contents/MacOS/Your_App_Name

字符串

相关问题