2014-12-03 117 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