2014-12-03 88 views
0

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

我一直在寻找一段时间,我一直发现的一切都是为了不再编译的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; 
+0

有没有具体到XE7例子。如果你有一个特定的演示,但它不能编译,然后显示代码,某人(可能是我)会为你调整它,以便编译。 – 2014-12-03 20:18:17

+0

我试图使用这里列出的应用程序:http://delphi.about.com/library/weekly/code/src101105.zip – wjvandyke 2014-12-03 20:42:02

+0

我得到一个错误: – wjvandyke 2014-12-03 20:42:35

回答

2

这个例子是为印9.印第安纳波利斯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; 
+0

谢谢。我正忙着设置“UDPSearchForm.OnUDPRead:= UDPRead;”在TForm1.Activate。它需要一个idUDPServer.TIdUDPListnerThread。 – wjvandyke 2014-12-03 22:43:58

+0

究竟是什么让你“挂断”? 'TIdUDPListenerThread'在'IdUDPServer'单元中声明,与'TUDPReadEvent'相同。确保该单元在你的'使用'条款中。 – 2014-12-03 23:22:36