AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi [Indy10] Fehler beim senden mit UDP - Daten kommen zurück
Thema durchsuchen
Ansicht
Themen-Optionen

[Indy10] Fehler beim senden mit UDP - Daten kommen zurück

Ein Thema von emteg · begonnen am 9. Mai 2010 · letzter Beitrag vom 12. Mai 2010
Antwort Antwort
emteg

Registriert seit: 16. Jun 2005
71 Beiträge
 
Delphi 2009 Architect
 
#1

[Indy10] Fehler beim senden mit UDP - Daten kommen zurück

  Alt 9. Mai 2010, 22:29
Ich habe hier grade ein merkwürdiges und asymmetrisches problem: Ich versuche per UDPClient.Send() einen String an einen Host zu senden. Am anderen Ende kommt nichts an, dafür geht aber sofort auf der sender-seite die UDPServer.OnRead methode auf und erhält die daten, die ich grade gesendet habe. Außerdem behauptet der UDPServer noch, dass die daten von der IP kommen, wo sie eigentlich hin sollten.

Server und client sind broadcast enabled, broadcasts kommen auch in beide richtungen problemlos an.

Delphi-Quellcode:
// Senden
procedure TConnection.Send(Msg, IP: String);
begin
  FUDPClient.Host := IP;
  FUDPClient.Send(Msg);
end;

//Empfangen
procedure TConnection.OnUDPRead(AThread: TIdUDPListenerThread; AData: TBytes;
  ABinding: TIdSocketHandle);
var
  i: integer;
  s: String;
begin
  s := '';

  for i := 0 to Length(AData) - 1 do
    s := s + Chr(AData[i]);

  // << Tue Dinge mit s >>
end;
Jetzt wirds noch ne stufe merkwürdiger: ich habe das gleiche problem, wenn ich das ganze über TCP versuche. Beim empfänger kommt nichts an, dafür springt sofort meine OnExecute methode an, die behauptet sie hätte daten vom zielhost empfangen.
Allerdings muss ich dazu sagen, dass ich mit dem indy10 TCP nocht nicht so ganz firm bin

Delphi-Quellcode:
// Senden
procedure TConnection.Send(Msg, IP: String);
begin
  FTCPClient.Host := IP;
  FTCPClient.IOHandler.Open;
  FTCPClient.IOHandler.WriteLn(Msg);
end;

// Empfangen
procedure TConnection.OnExecute(AContext: TIdContext);
var s: string;
begin
  s := AContext.Connection.IOHandler.ReadLn;

  // << Tue dinge mit s >>
end;
Ich blick da grade echt nicht mehr durch. Mache ich irgendwelche dinge bzgl. indy 10 falsch?
  Mit Zitat antworten Zitat
Klaus01

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

Re: [Indy10] Fehler beim senden mit UDP - Daten kommen zurüc

  Alt 10. Mai 2010, 07:37
Guten Morgen,

hast Du auch irgendwo den Port, wo die Applikation hinsenden soll, definiert?

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

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: [Indy10] Fehler beim senden mit UDP - Daten kommen zurüc

  Alt 10. Mai 2010, 08:05
Hi,

beim TCP tritt bei Dir sofort das OnExecute ein ?!
Das OnExecute gibt es nur beim TIdTCPServer, das was Du brauchst ist der TIdTCPClient.
Genau das gleiche ist bei UDP der Fall das Event OnUDPRead gibt es nur im TIdUDPServer Du brauchst aber den TIdUDPClient !

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
emteg

Registriert seit: 16. Jun 2005
71 Beiträge
 
Delphi 2009 Architect
 
#4

Re: [Indy10] Fehler beim senden mit UDP - Daten kommen zurüc

  Alt 11. Mai 2010, 23:21
Zitat von Klaus01:
Guten Morgen,

hast Du auch irgendwo den Port, wo die Applikation hinsenden soll, definiert?

Grüße
Klaus
Ja

Ich hab inzwischen ne Vermutung, dass es an einer obskuren wlan konfiguration liegen könnte. Der eine PC hängt am wlan, der andere am kabel und es sind verschiedene router dazwischen. Könnte es sein, dass einer von denen die verbindung ablehnt und zurückwirft?

Mich wundert nur, dass die broadcasts durchkommen. Irgendwelche ideen?
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: [Indy10] Fehler beim senden mit UDP - Daten kommen zurüc

  Alt 12. Mai 2010, 07:58
Hi,

hast Du meinen Post überhaupt gelesen ?
D asteht ganz klar wo Dein Problem liegt:

Ein Verbindungsaufbau funktioniert nur von Client ---> Server. Nicht umgekehrt !
Deshalb muss Du in Deiner Client-Applikation TIdUdpClient bzw. TIdTcpClient benutzen und im Server TIdUDPServer bzw. TIdTcpServer.
Die Ereignisse ONUDPRead/OnExecute gibt es nur bei den Serverkomponenten, nicht bei den Clientkomponenten.

Mir scheint Du hast jeweils ein TIdUdpClient und TIdUdpServer in einer Anwendung/auf Deiner Form
und möchtest vom Client zum Server(nicht der Server auf Deiner Form) senden(soweit ok).
Aber um die Antwort zum Empfangen brauchst Du keinen extra Server das funktioniert über die gleiche "Verbindung".


DAmit wir Dir bei der Lösung Deines Problems helfen können brauchen wir ein paar mehr Infos,
für den Anfang wäre eine Erklärung was Du überhaupt vorhast/erreichen wilst nicht schlecht.
Des Weiteren würde mich auch interessieren, wo Du den Port setzt und welche Portnummer Du verwendest.
Außerdem könnntest Du das ganze mal debuggen und uns mitteilen welche IP-Adressen zum verbinden verwendet werden.

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
emteg

Registriert seit: 16. Jun 2005
71 Beiträge
 
Delphi 2009 Architect
 
#6

Re: [Indy10] Fehler beim senden mit UDP - Daten kommen zurüc

  Alt 12. Mai 2010, 08:33
Zitat von DataCool:
Hi,

hast Du meinen Post überhaupt gelesen ?
Ja hab ich, allerdings hab ich ihn nicht verstanden.

Zitat von DataCool:
D asteht ganz klar wo Dein Problem liegt:

Ein Verbindungsaufbau funktioniert nur von Client ---> Server. Nicht umgekehrt !
Deshalb muss Du in Deiner Client-Applikation TIdUdpClient bzw. TIdTcpClient benutzen und im Server TIdUDPServer bzw. TIdTcpServer.
Die Ereignisse ONUDPRead/OnExecute gibt es nur bei den Serverkomponenten, nicht bei den Clientkomponenten.
Weiß ich alles. Ich frage mich jetzt, wo du darauf kommst, dass ich es anders mache. Meine anwendung kann senden (id*Client) und empfange (id*Server). Und natürlich verwende ich zum senden die client komponenten und zum lauschen die server komponenten.

Delphi-Quellcode:
FTCPClient.IOHandler.WriteLn(Msg);
FUDPClient.Send(Msg);
Zitat von DataCool:
Mir scheint Du hast jeweils ein TIdUdpClient und TIdUdpServer in einer Anwendung/auf Deiner Form
und möchtest vom Client zum Server(nicht der Server auf Deiner Form) senden(soweit ok).
Aber um die Antwort zum Empfangen brauchst Du keinen extra Server das funktioniert über die gleiche "Verbindung".
Ja, ich weiß dass das geht, da würde man dann auf der empfänger seite sofort mit
AContext.Connection.IOHandler.WriteLn(Antwort) oder so ähnlich antworten. In dem Protokoll muss halt nicht immer zwangsweise ne antwort zurück kommen, deshalb habe ich das bisher nicht so gelöst. Eventuell könnte ich mein programm so umschreiben, dass die antworten sofort zurückgegeben werden.

Allerdings müsste es doch trotzdem auch so funktionieren, dass man die connection zu macht und dann zum antworten ne neue aufmacht, oder?

Zitat von DataCool:
DAmit wir Dir bei der Lösung Deines Problems helfen können brauchen wir ein paar mehr Infos,
für den Anfang wäre eine Erklärung was Du überhaupt vorhast/erreichen wilst nicht schlecht.
Des Weiteren würde mich auch interessieren, wo Du den Port setzt und welche Portnummer Du verwendest.
Außerdem könnntest Du das ganze mal debuggen und uns mitteilen welche IP-Adressen zum verbinden verwendet werden.

Greetz Data
Ich möchte ein simples text protokoll realisieren. Ich schicke strings über das netz (manchmal auch per broadcast) und eventuell kommt dann auch ne antwort zurück, eventuell auch nicht.

Die Ports habe ich direkt in den eigenschaften der komponenten angepasst und ich hab einfach mal 5000 ausgewählt, weil mir nichts besseres eingefallen ist.

Die IP adressen sind richtig, allerdings kommen die daten halt sofort zurück. Ich vermute wirklich, dass es an dieser merkwürdigen netzwerk konfig liegt, weil in einer anderen umgebung hat das ganze deutlich besser funktioniert. Da hatte ich dann eher damit ein problem, dass UDP + WLan schlecht zusammen geht

Für das Netzwerkproblem spricht auch, dass das problem auch nur in eine richtung besteht.
  Mit Zitat antworten Zitat
Klaus01

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

Re: [Indy10] Fehler beim senden mit UDP - Daten kommen zurüc

  Alt 12. Mai 2010, 08:45
Guten Morgen,

hat der WLAN Router (DSL Router?) irgend eine Art von Firewall?

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

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: [Indy10] Fehler beim senden mit UDP - Daten kommen zurüc

  Alt 12. Mai 2010, 15:07
Hi,

Zitat:
Allerdings müsste es doch trotzdem auch so funktionieren, dass man die connection zu macht und dann zum antworten ne neue aufmacht, oder?
Nein, nicht zwangsläufig ! Es Connection kann immer nur von der Client-Komponente zur Server-Komponente aufgebaut werden.

Ich versuche das mal zu veranschaulichen :

Dein Modell, soweit ich Dich verstanden habe:
PC1 PC2
Udp/Tcp-Client1 ---> connect --> schickt Kommando1 Udp/Tcp-Server2
trennt die Verbindung zu Client 1
Udp/Tcp-Server1 <--- schickt Antwort <--- connect Udp/Tcp-Client2 schickt nacht Zeitpunkt X Antwort zu Kommando 1

Damit das funktioniert müssen für den Server1 und den Server2 jeweils entsprechende Ports im Router freigeschaltet werden,
wenn das ganze nicht Lan-Intern ohne Firewall läuft.


Mein Vorschlag an Dich:
PC1 PC2
Udp/Tcp-Client1 ---> connect --> schickt Kommando1 Udp/Tcp-Server2
udp/TcpClient1 <--- schickt Antwort in gleicher Verbidung das kann auch erst nach xyz Sekunden sein

Nochmal, was willst Du damit im Endeffekt realisieren ?
In meinen Augen gibt es eigentlich keinen Grund für Variante 1!

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  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 16:28 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