AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IdUDPServer sendet nicht das was er soll
Thema durchsuchen
Ansicht
Themen-Optionen

IdUDPServer sendet nicht das was er soll

Offene Frage von "-TheCoke-"
Ein Thema von -TheCoke- · begonnen am 25. Sep 2008 · letzter Beitrag vom 26. Sep 2008
Antwort Antwort
-TheCoke-

Registriert seit: 15. Sep 2007
22 Beiträge
 
#1

IdUDPServer sendet nicht das was er soll

  Alt 25. Sep 2008, 00:14
Hallo!

Ich hab noch ein Problem mit dem Indy UDP Server von Delphi 2009.

Ich schreibe gerade ein mit Delphi 7 erstelletes Projekt in Delphi 2009 neu.

Delphi-Quellcode:
string1 := #$7f#$00#$01#$02#$c2#$00#$00#$00#$00#$01#$00#$00#$08#$00#$00#$00#$00#$00#$00#$00...
string2 := #$00#$00#$02#$00#$00#$00#$00#$00#$00#$00#$02#$00#$00#$00#$00#$00#$00#$00#$00#$00...
UdpServer.Send(ABinding.PeerIP, ABinding.PeerPort,string1 + string2);
Das Problem ist nun, dass beim Client nicht das ankommt was ich absende.

In diesem Fall sind z.B. die ersten 4 Bytes richtig, das 5. Byte ist jedoch $41 anstatt $c2.

In Delphi 7 hat es mit dem gleichen Code wunderbar funktioniert. Ich verstehs nicht.

Coke
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

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

Re: IdUDPServer sendet nicht das was er soll

  Alt 25. Sep 2008, 01:12
Zitat von -TheCoke-:
Das Problem ist nun, dass beim Client nicht das ankommt was ich absende.
Der Fehler kann a.) beim Client, b.) beim Server, c.) im Netzwerk oder deren Komponenten oder bei d.) dir selbst (!) liegen.
Nur mit systematischer Fehleranalyse kommst du hier weiter.
Vor allem der Fall d.) ist sehr beliebt. Schon 1000mal gesehen, ein Programmierer ist voll überzeugt irgendetwas müsste so sein. Tage später stellt sich heraus er hat einfach Tomaten auf den Augen gehabt und etwas ganz einfaches übersehen.
Du musst dir einfach selbst misstrauen und alles in Frage stellen und dir selbst misstrauen !!

Schritt 1: was wird Serverseitig wirklich abgeschickt?
Nur wenn du die Daten des Servers in einem String zusammenfasst, in eine Datei speichert und mit einem guten Hexeditor anschaust, kannst du dir selbst beweisen, was der Server versendet.
Delphi-Quellcode:
string1 := #$7f#$00#$01#$02#$c2#$00#$00#$00#$00#$01#$00#$00#$08#$00#$00#$00#$00#$00#$00#$00...
string2 := #$00#$00#$02#$00#$00#$00#$00#$00#$00#$00#$02#$00#$00#$00#$00#$00#$00#$00#$00#$00...
string3 := string1 + string2;
StringToFile(string3, 'C:\server.log'); // mit Hex-Editor prüfen, was in server.log steht !!
UdpServer.Send(ABinding.PeerIP, ABinding.PeerPort,string3);
Hier noch die Hilfsfunktion StringToFile():
Delphi-Quellcode:
procedure StringToFile(const FileName: string; const Contents: AnsiString);
var
  fs: TFileStream;
  Len: Integer;
begin
  fs := TFileStream.Create(FileName, fmCreate);
  try
    Len := Length(Contents);
    if Len > 0 then
      fs.WriteBuffer(BytesOf(Contents), Len);
  finally
    fs.Free;
  end;
end;
Schritt 2: es gilt das Gleiche wie beim Server: du speicherst die Daten in einer Datei und schaust sie mit einem HexEditor an.

Den weltbesten Hexeditor gibt es hier: http://www.delphipraxis.net/internal...ct.php?t=46184

PS: bei D2009 musst du den Datentyp string in AnsiString ändern und zwar an allen Stellen, an denen du davon ausgehst, dass 1 Zeichen = 1 Byte ist.
  Mit Zitat antworten Zitat
-TheCoke-

Registriert seit: 15. Sep 2007
22 Beiträge
 
#3

Re: IdUDPServer sendet nicht das was er soll

  Alt 25. Sep 2008, 02:11
Ich hab das mal getestet.

Der Server schickt garantiert schon das Falsche ab.

Edit:

Ich hab jetzt ein Workaround gefunden:

UdpServer.SendBuffer(ABinding.PeerIP, ABinding.PeerPort,BytesOf(string3)); So kommt das Richtige an
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

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

Re: IdUDPServer sendet nicht das was er soll

  Alt 25. Sep 2008, 03:41
Zitat von -TheCoke-:
Der Server schickt garantiert schon das Falsche ab.
Könnte sein, dass D2009 die Daten automatisch nach WideString wandelt, weil jetzt string und WideString das Gleiche ist.
  Mit Zitat antworten Zitat
molotov13

Registriert seit: 15. Nov 2007
25 Beiträge
 
#5

Re: IdUDPServer sendet nicht das was er soll

  Alt 26. Sep 2008, 14:35
Zitat von -TheCoke-:
Ich hab das mal getestet.

Der Server schickt garantiert schon das Falsche ab.

Edit:

Ich hab jetzt ein Workaround gefunden:

UdpServer.SendBuffer(ABinding.PeerIP, ABinding.PeerPort,BytesOf(string3)); So kommt das Richtige an
Habe das selbe Problem bei mir auch, jedoch nur unter Windows XP Embedded!? Auf Standard-XP kommt das richtige an. Nun wollte ich deinen Code ausprobieren, jedoch weiss ich nicht, wo diese BytesOf-Funktion zu finden ist.
  Mit Zitat antworten Zitat
molotov13

Registriert seit: 15. Nov 2007
25 Beiträge
 
#6

Re: IdUDPServer sendet nicht das was er soll

  Alt 26. Sep 2008, 16:06
Problem gelöst, funktioniert nun mit:

Code:
UDPC.SendBuffer(UDPC.Host,UDPC.Port,BytesOf(msg_temp));

Jedoch bekomme ich nichts zurück:

Code:
antwort:TBytes;
...
UDPC.ReceiveBuffer(antwort);
aw := BytesToString(bt2);
  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 06:51 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