【问题标题】:simple UDP example/demo application for Delphi XE-7 and Indy 10.6.0.5169Delphi XE-7 和 Indy 10.6.0.5169 的简单 UDP 示例/演示应用程序
【发布时间】:2014-12-03 20:03:17
【问题描述】:

我正在为 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;

【问题讨论】:

  • 没有特定于 XE7 的示例。如果你有一个特定的演示你想使用,但它没有编译,然后显示代码并且有人(可能是我)会为你调整它以便它编译。
  • 我尝试使用此处列出的应用程序:delphi.about.com/library/weekly/code/src101105.zip
  • 我收到一个错误:
  • SendBuffer 在这里给我一个错误:TUDPSearchForm.SearchPartner; var x: Array[0..3] of Byte;开始 RadioGroup1.Items.Clear; RadioGroup1.ItemIndex := -1;身高:= 50+13;顶部:=顶部;左:=左;显示; IdUDPClient1.Host := '255.255.255.255'; IdUDPClient1.Active := true; IdUDPClient1.BroadcastEnabled := True; x[0] := $00; // 搜索接收者 x[1] := $00; // 搜索 x[2] := MessageCount div $100; x[3] := MessageCount mod $100;公司(消息计数); IdUDPClient1.Port := UDPDefaultPort; IdUDPClient1.SendBuffer(x, 4); IdUDPClient1.BroadcastEnabled := False;结束;

标签: delphi udp indy10 delphi-xe7


【解决方案1】:

该示例适用于 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;

【讨论】:

  • 谢谢。我正在挂断设置“UDPSearchForm.OnUDPRead := UDPRead;”在 TForm1.Activate 中。它需要一个 idUDPServer.TIdUDPListnerThread。
  • 那你到底是怎么“挂断”的? TIdUDPListenerThreadIdUDPServer 单元中声明,与TUDPReadEvent 相同。确保该单位在您的 uses 子句中。
猜你喜欢
  • 2011-09-18
  • 2011-12-21
  • 1970-01-01
  • 2011-03-27
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
相关资源
最近更新 更多