Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: IDUDPClient: IP-Adresse vom Sender

  Alt 16. Dez 2024, 00:18
Dann kommst Du um einen UDP-Server nicht herum, welcher auf einen festen Port (z.B. 8889) lauscht!

Nur bei TCP kannst du auf eine eingehende Connection über dessen Port antworten (bis die Connection getrennt wird).
Das stimmt nicht. Hole Punching (Firewall), Antworten usw. funktioniert auch problemlos mit UDP. Das sollte so direkt funktionieren:
Delphi-Quellcode:
// Server:
  UDPServer.DefaultPort := 9999;
  UDPServer.Active := True;
  UDPServer.OnUDPRead := UDPServerUDPRead;

procedure TFormExample.UDPServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle);
begin
  ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, 'Test');
end;

// Client:
var
  UdpClient: TIdUDPClient;
  ReceivedData: string;
begin
  UdpClient := TIdUDPClient.Create(nil);
  try
    UdpClient.Host := '127.0.0.1';
    UdpClient.Port := 9999;
    UdpClient.Active := True;

    UdpClient.Send('Hallo Welt');

    ReceivedData := UdpClient.ReceiveString(5000);
    if ReceivedData <> 'then
      ShowMessage('Antwort: ' + ReceivedData)
    else
      ShowMessage('Keine Antwort erhalten.');
  finally
    UdpClient.Free;
  end;
end;
Da der Client kein Empfangsevent hat, bietet es sich an, einen Thread zu verwenden.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat