![]() |
IdUDPServer sendet nicht das was er soll
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:
Das Problem ist nun, dass beim Client nicht das ankommt was ich absende.
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); 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 |
Re: IdUDPServer sendet nicht das was er soll
Zitat:
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:
Hier noch die Hilfsfunktion StringToFile():
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);
Delphi-Quellcode:
Schritt 2: es gilt das Gleiche wie beim Server: du speicherst die Daten in einer Datei und schaust sie mit einem HexEditor an.
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; Den weltbesten Hexeditor gibt es hier: ![]() 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. |
Re: IdUDPServer sendet nicht das was er soll
Ich hab das mal getestet.
Der Server schickt garantiert schon das Falsche ab. Edit: Ich hab jetzt ein Workaround gefunden:
Delphi-Quellcode:
So kommt das Richtige an :gruebel:
UdpServer.SendBuffer(ABinding.PeerIP, ABinding.PeerPort,BytesOf(string3));
|
Re: IdUDPServer sendet nicht das was er soll
Zitat:
|
Re: IdUDPServer sendet nicht das was er soll
Zitat:
|
Re: IdUDPServer sendet nicht das was er soll
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); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:00 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