Einzelnen Beitrag anzeigen

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