0

我正在为 Delphi XE-7 和 Indy 10.6.0.5169 寻找一个简单的 UDP 示例/演示应用程序。

我一直在寻找一段时间,我一直在寻找的所有内容都是针对不再编译的旧版本的 Indy 或 Delphi。

我需要实现 UDP 客户端以处理 WS-Discovery 消息。

我尝试使用此处列出的应用程序:

http://delphi.about.com/library/weekly/code/src101105.zip

SendBuffer在这里给我一个错误:

procedure TUDPSearchForm.SearchPartner;
var
  x: Array[0..3] of Byte;
begin
  RadioGroup1.Items.Clear;
  RadioGroup1.ItemIndex := -1;
  Height := 50+13;
  Top := Top;
  Left := left;
  Show;
  IdUDPClient1.Host := '255.255.255.255';
  IdUDPClient1.Active := true;
  IdUDPClient1.BroadcastEnabled := True;
  x[0] := $00; // Search Receivers
  x[1] := $00; // Search
  x[2] := MessageCount div $100;
  x[3] := MessageCount mod $100;
  inc(MessageCount);
  IdUDPClient1.Port := UDPDefaultPort;
  IdUDPClient1.SendBuffer(x, 4);
  IdUDPClient1.BroadcastEnabled := False;
end;
4

1 回答 1

2

该示例适用于 Indy 9。对于 Indy 10,您必须使用TIdBytes而不是固定数组,例如:

procedure TUDPSearchForm.SearchPartner;
var
  x: TIdBytes;
begin
  RadioGroup1.Items.Clear;
  RadioGroup1.ItemIndex := -1;
  Height := 50+13;
  Top := Top;
  Left := left;
  Show;
  IdUDPClient1.Host := '255.255.255.255';
  IdUDPClient1.Active := true;
  IdUDPClient1.BroadcastEnabled := True;
  SetLength(x, 4);
  x[0] := $00; // Search Receivers
  x[1] := $00; // Search
  x[2] := MessageCount div $100;
  x[3] := MessageCount mod $100;
  inc(MessageCount);
  IdUDPClient1.Port := UDPDefaultPort;
  IdUDPClient1.SendBuffer(x);
  IdUDPClient1.BroadcastEnabled := False;
end;

您可以通过使用Broadcast()方法而不是SendBuffer()

procedure TUDPSearchForm.SearchPartner;
var
  x: TIdBytes;
begin
  RadioGroup1.Items.Clear;
  RadioGroup1.ItemIndex := -1;
  Height := 50+13;
  Top := Top;
  Left := left;
  Show;
  SetLength(x, 4);
  x[0] := $00; // Search Receivers
  x[1] := $00; // Search
  x[2] := MessageCount div $100;
  x[3] := MessageCount mod $100;
  inc(MessageCount);
  IdUDPClient1.Broadcast(x, UDPDefaultPort);
end;
于 2014-12-03T21:45:16.537 回答