AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

UDP Datentransfer

Ein Thema von hanspeter · begonnen am 27. Jun 2011 · letzter Beitrag vom 28. Jun 2011
Antwort Antwort
Klaus01

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

AW: UDP Datentransfer

  Alt 27. Jun 2011, 20:16
Guten Abend,

sind die Rechner im einem LAN miteinander verbunden - oder liegt das "Internet dazwischen"?

Hast Du die Möglichkeit den Traffic mitzuschneiden (mit Wireshark ..)?

Liegt eventuell ein Fehler im Client vor?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#2

AW: UDP Datentransfer

  Alt 27. Jun 2011, 20:39
ReceiveString() ist soviel ich weiss blocking bzw. hat standardmäßig ein unendliches Timeout.
Nur eine vermutung (habe mit Indy-UDP noch nie gearbeitet): Kann es sein, dass bei einem Verbindungsabbruch während ReceiveString() ein Fehler auftritt ("connection reset" oder dergleichen) und noch Daten im Receive-Buffer hängen, so dass der Client nie weitergeht?

P.S.: Ich wollte mit meinem Beitrag nicht "klugscheissen" oder dir an den Karren pissen. Wenn dir das so vorkam, sorry, aber es hätte ja sein können, dass du nicht gewusst hast, dass bei UDP nicht unbedingt immer alle Daten ankommen...

Geändert von blackfin (27. Jun 2011 um 20:42 Uhr)
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#3

AW: UDP Datentransfer

  Alt 27. Jun 2011, 21:29
Die Rechner hängen normal im Lan. (Betriebsnetz) und stehen beide auf meinem Schreibtisch, da ich die Lösung erst erprobe. (Ist die Protokollierung einer Maschinensteuerung.)
Die Frage stelle ich deshalb weil ich zu den Indys, je tiefer ich eindringe, immer weniger Vertrauen habe.
Ich verwende einen eigenen Timeout. Kommt innerhalb einer bestimmten Zeit keine Antort, dann setze ich die Steuerung komplett zurück und der Client sendet zyklisch einen Request an den Server. Ist der Server nicht bereit, dann wird die Ablaufsteuerung rückgesetzt und nach 3 Sek. ein neuer Request gesendet.
Der Server empfängt diesen auch und antwortet mit ACK (Ich schreibe ein Logfile.). Diese Antwort ( über die Bindings oder auch an den Serverport adressiert) kommt aber nicht an.
Ich will probieren den Verkehr mit zu protokollieren, da fehlt mir im Moment aber noch ein Tip für ein geeignetes Werkzeug.

Und an blackfin, sorry wenn meine Antwort ungehalten klang, war nicht so gemeint.
Mir passiertes bei einer Frage in diesem Forum in letzter Zeit halt öfter mal, dass man eine Antwort erhält, die völlig an der Fragestellung vorbeigeht. Irgendwann ist die eigentliche Frage total zerredet.
Ich selbst bin Diplominformatiker und seit über 40 Jahren im Fach. Mein erstes "größeres" Programm war 2.500 Lochkarten lang.
Wenn ich ein Thema angehe, dann beschäftige ich mich erst mit den Grundlagen. Um das Rad nicht nochmal zu erfinden, suche ich im Netz zwar nach vorhandenen Code.
Den verwende ich aber erst, wenn ich die Funktionalität verstanden habe.


Peter
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#4

AW: UDP Datentransfer

  Alt 27. Jun 2011, 21:36
Schon ok

Zitat:
Ich will probieren den Verkehr mit zu protokollieren, da fehlt mir im Moment aber noch ein Tip für ein geeignetes Werkzeug.
Klaus01 hat ja bereits Wireshark erwähnt. Ich denke, damit solltest du alles sehen können, was über das Netzwerk läuft.

Achja, evtl. hilft dir bei dem Problem auch noch dieser Beitrag aus den EDN-Foren.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: UDP Datentransfer

  Alt 27. Jun 2011, 23:31
Wenn Server und Client den gleichen UDP-Port benützen, wie verhinderst du dann, dass jeder Teilnehmer sofort seine eigenen gesendeten Daten empfängt?
Es müsste also irgendwo eine Abfrage geben: "if IPAdr=EigeneIPAdr then IngoreData".

Hast du Virenscanner und Personal Firewall testweise ausgeschaltet? (beide können nämlich den Empfang von Daten verhindern)
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#6

AW: UDP Datentransfer

  Alt 28. Jun 2011, 09:37
@sx2008: Client und Server haben natürlich unterschiedliche IP-Adressen!

Ich vermute einen Fehler beim Anworten auf die Anfrage. Bei mir ist die Antwort so realisiert:

ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, AData);
Wäre es möglich, dass bei Dir der PeerPort gecached wird und deshalb zeitweise nicht korrekt ist?
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#7

AW: UDP Datentransfer

  Alt 28. Jun 2011, 12:17
Ich bin jetzt soweit, dass wohl beim Client der Abfrage-Thread terminiert, wenn ich versuche einen
String mit LRead := FClient.ReceiveString(); abzufragen und der Server nicht gestartet ist.
Timeout ist auf 0 bzw. auf -2 (Defaultwert) gesetzt.
So wie es aussieht wartet der Client für eine feste Zeit (Timeout) auf Daten.
Diese Zeit muss extern vorgegeben werden.
Das Handling bei verzögerter Serverantwort scheint etwas problematisch zu sein.












Peter

Geändert von hanspeter (28. Jun 2011 um 12:48 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz