AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IDUDPClient: IP-Adresse vom Sender
Thema durchsuchen
Ansicht
Themen-Optionen

IDUDPClient: IP-Adresse vom Sender

Ein Thema von Helmi · begonnen am 15. Dez 2024 · letzter Beitrag vom 16. Dez 2024
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#1

IDUDPClient: IP-Adresse vom Sender

  Alt 15. Dez 2024, 10:33
Hallo Zusammen,

ich nutze die Indy Komponente "IdUDPClient", um einen String an einen ESP32 zu schicken.
Dafür nutz ich neben der IP des ESP32 den Port 8888.
Alles soweit so gut.

Auf der Empfängerseite bekomm ich die Infos, dass an die IP-Adresse des ESP32 + Port 8888 gesendet wurde und zwar vom Sender (meiner Rechner-IP) mit dem Port 58467.

Nun würd ich gerne an meine Rechner-IP, an den Port 58467, Daten zurückschicken.
Aktuell nehm ich dazu einfach den Sende-Port plus eins (8889).

Ich habe noch keine Möglichkeit gefunden, über die Indy-Komponente rausfinden zu können, wie ich an den Port 58467 komme.
Denn dann könnte ich diesen Port auch für die Verbindung vom ESP32 zu meinem Programm verwenden zu können.

Testweise nehme ich auch die SW https://packetsender.com/, anstatt mein Programm und dort erhalte ich auch die Sender-Port-Nr. 58467

Gibt es eine Möglichkeit an die Port-Nr. zu kommen und falls ja, wie?
Vor allem, da sich diese Port-Nr. nach jedem Verbindungsaufbau ggf. anders sein kann
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<

Geändert von Helmi (15. Dez 2024 um 10:50 Uhr)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: IDUDPClient: IP-Adresse vom Sender

  Alt 15. Dez 2024, 11:08
.. UDP baut keine Verbindung auf, es sendet Daten ohne Kenntnis ob die Daten ankommen oder nicht.
Wenn Du eine Bidirectionale Verbindung haben willst, solltest Du TCP (Client/Server) verwenden.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#3

AW: IDUDPClient: IP-Adresse vom Sender

  Alt 15. Dez 2024, 11:53
.. UDP baut keine Verbindung auf, es sendet Daten ohne Kenntnis ob die Daten ankommen oder nicht.
Wenn Du eine Bidirectionale Verbindung haben willst, solltest Du TCP (Client/Server) verwenden.

Grüße
Klaus
Dem bin ich mir bewusst und hab absichtlich UDP dafür verwendet
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
972 Beiträge
 
Delphi 6 Professional
 
#4

AW: IDUDPClient: IP-Adresse vom Sender

  Alt 15. Dez 2024, 21:22
Hmm..

.. UDP baut keine Verbindung auf, es sendet Daten ohne Kenntnis ob die Daten ankommen oder nicht.
Wenn Du eine Bidirectionale Verbindung haben willst, solltest Du TCP (Client/Server) verwenden.

Grüße
Klaus
Dem bin ich mir bewusst und hab absichtlich UDP dafür verwendet
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).
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: IDUDPClient: IP-Adresse vom Sender

  Alt 15. Dez 2024, 22:15
Jupp, UDP sendet, ohne dass es im Protokoll eine Rückantwort gibt.
Ob es überhaupt empfangen und verarbeitet wurde und wenn man Daten als Antwort zurück senden will, darum muß man sich dann selber in der Anwendungsebene kümmern.
Drum will man ja auch HTTP auf UDP umstellen, um so den Transfer im Internet zu beschleunigen, weil nicht jede Zwischenstelle auf Empfangsbestätigungen usw. warten muß ... TCP-Handshake. (HTTP/3 mit Bei Google suchenQUIC)


Eigentlich sollte doch im UDP-Header der Quell- und Ziel-Port drin stehen?
Bei der Sender-IP bin ich mir nur nicht sicher.
[edit] Doch, die auch ... jedenfalls im IP-Header darüber mit enthalten.
udp-headers-rfc-768-5%5B1%5D.jpg
Somit müsste es doch eine Möglichkeit geben, sich diese Info ausgeben zu lassen.

Und es dürfte auch OK sein, wenn auf beiden Seiten der selbe gleiche Port genutzt wird, um Daten zurückzuschicken.
$2B or not $2B

Geändert von himitsu (15. Dez 2024 um 22:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.647 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
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#7

AW: IDUDPClient: IP-Adresse vom Sender

  Alt 16. Dez 2024, 07:02
Hallo Zusammen,

Danke für die Antworten.

Ich hatte mich damals für UDP entschieden, da ich nur Text zum ESP schicken will, ohne eine Abhängigkeit zu schaffen.
Mein (Delphi-)Programm schickt, egal ob der andere auf Empfang ist oder nicht.
Wenn der andere empfangsbereit ist, dann nimmt er die Daten an, wenn nicht, dann nicht.
Die Daten können von meinem Programm kommen, aber auch von anderen UDP-Sendern.

Dabei handelt es sich um eine Tankanzeige für eine Modelleisenbahn (Spur N, falls es jemanden interessiert).
Ein OLED-Display hängt dabei an einem ESP, dass die Preise anzeigt (und noch vieles mehr).
Bei den Daten handelt es sich u. a. um Preise (die Preise hol ich mir im Delphi-Programm aus dem Internet).
Daher ist es egal, ob ein Datensatz mal mitbekommen wird oder nicht.

Der ESP sendet per UDP nur zurück, wenn er Fehler in den Daten festgestellt hat (weil z. B. das Format nicht stimmt).
Aber auch das ist nicht tragisch, wenn es nicht ankommt.

Über IdUDPClient.BoundIP kann ich einen Sender-Port angeben, wie ich jetzt festgestellt hab.
Der scheint aber dann belegt zu sein.
Ist dies 0, so wird ein Port "gewürfelt" (ja, bitte nicht erschlagen - da ist ein System dahinter).

Bin jetzt wieder auf einen festen Port zum Senden gegangen: Empfangsport + 1, also 8889.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73
Online

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
755 Beiträge
 
#8

AW: IDUDPClient: IP-Adresse vom Sender

  Alt 16. Dez 2024, 07:39
Über IdUDPClient.BoundIP kann ich einen Sender-Port angeben, wie ich jetzt festgestellt hab.
Der scheint aber dann belegt zu sein.
Geht denn das was Jaenicke gepostet hat nicht?
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#9

AW: IDUDPClient: IP-Adresse vom Sender

  Alt 16. Dez 2024, 07:44
Über IdUDPClient.BoundIP kann ich einen Sender-Port angeben, wie ich jetzt festgestellt hab.
Der scheint aber dann belegt zu sein.
Geht denn das was Jaenicke gepostet hat nicht?
Hab ich noch nicht ausprobiert - mach ich später, wenn die Arbeit es zulässt
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#10

AW: IDUDPClient: IP-Adresse vom Sender

  Alt 16. Dez 2024, 08:34
Hab jetzt mal ein kleines Testprogramm gebastelt.

Zum vom Client einfach einen Button genommen und zum Empfangen testweise nen Timer.

Aber wenn Server und Client beide die gleichen Daten haben, dann erhalte ich folgende Fehlermeldung beim aktivieren:

Code:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project2.exe ist eine Exception der Klasse EIdCouldNotBindSocket mit der Meldung 'Socket konnte nicht gebunden werden. Adresse und Port werden bereits verwendet.' aufgetreten.
---------------------------
Anhalten  Fortsetzen  Hilfe  
---------------------------
Aber ich versteh Gedanken von jaenicke dahinter.

Ich werd das später mal in Verbindung mit dem ESP ausprobieren.
Also im Delphi-Programm keinen Server, nur einen Client und den ReceiveString davon abfragen.
(mit nur noch einem Port)
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<

Geändert von Helmi (16. Dez 2024 um 08:41 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz