delphi - Delphi XE2 TIdUDPClient ReceiveString重载不起作用

标签 delphi compiler-errors delphi-xe2 broadcast indy10

我正在使用Embarcadero RAD Studio XE2 Update 4及其附带的Indy软件包。

我的意图是在局域网中找到一个服务器,该服务器具有TIdUDPClient广播的广播,该服务器等待服务器的响应以获取其IP。如果我使用不带参数的TIdUDPClient方法ReceiveString,则接收数据的效果很好。

但是,当我尝试使用RAD Studio随附的Indy 10文档版本10.5.8.3中的重载版本时,它不会编译并显示'E2250:没有可以使用这些参数调用的'ReceiveString'重载版本' 。
这是我的代码:

unit Client;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdBaseComponent, IdComponent, IdUDPBase,
  IdUDPClient, Vcl.StdCtrls, IdGlobal;

type
  TFormLC = class(TForm)
    UDPClient: TIdUDPClient;
    LServer: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  FormLC: TFormLC;

implementation

{$R *.dfm}

function findServer:string;
var ans, ip : string;
    port: TIdPort;
begin
  with FormLC.UDPClient do begin
    Active := True;
    BroadcastEnabled:=True;
    Broadcast('ServerRequest', 1234);
    ans := ReceiveString(ip, port);
    Active := False;
  end;
  if SameText(ans, 'ServerAccept') then
    result := ip
  else
    result := '';
end;


procedure TFormLC.Button1Click(Sender: TObject);
var ans:string;
begin
  LServer.Caption := findServer;
end;

end.

我注意到Indy的online documentation与IDE随附的文档有所不同,并按此处所述尝试了该文档,但没有成功。

任何帮助将是巨大的!

最佳答案

您的问题是由with语句引起的,您是将portTIdUDPClient属性而不是局部变量port传递给ReceiveString方法。

function findServer:string;
var ans, ip : string;
    port: TIdPort;
begin
  with FormLC.UDPClient do begin
    ....
    ans := ReceiveString(ip, port);//here you are passing the port property 
    Active := False;
  end;
  .... 
end;

解决方法是将您的port本地变量重命名为:
 function findServer:string;
var ans, ip : string;
    vport: TIdPort;
begin
  with FormLC.UDPClient do begin
    .... 
    ans := ReceiveString(ip, vport);//now will work
    Active := False;
  end;
end;

甚至最好不要使用with语句。

关于delphi - Delphi XE2 TIdUDPClient ReceiveString重载不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12791237/

相关文章:

android - 使用 Delphi for Android 显示 TMediaPlayer.Duration 和 TMediaPlayer.CurrentTime 的秒数

java - 可迭代和迭代器 - 编译错误

delphi - (delphi 应用程序)发现错误的位置

delphi - 如何使用Delphi Mocks框架检查参数内容?

c# - 从 Delphi 转换到 .NET/WinForms 的最佳书籍和资源

Delphi 2007(或 2009)构建事件与构建配置相关吗?

delphi - 如何在 TStringList 对象中存储集合?

Oracle 过程编译成功但显示错误

c++ - 我不确定如何解决此错误

delphi - 如何使 Delphi XE2 在 4k 显示器上以 200% 文字大小显示良好?