Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy Umstellung Delphi 2006 auf Delphi 2010 (https://www.delphipraxis.net/146338-indy-umstellung-delphi-2006-auf-delphi-2010-a.html)

Surrounder 18. Jan 2010 12:12


Indy Umstellung Delphi 2006 auf Delphi 2010
 
Hallo Forum,

ich habe letzte Woche Delphi 2010 installiert und bin nun dabei meine Projekte wieder lauffähig zu bekommen. Nun habe ich ein Problem das mit den Indy Komponenten zusammen hängt. Ich habe einen IdUDPServer und muss damit einen Broadcast erzeugen damit sich meine Hardware im Netzwerk mit ihrer zugehörigen IP Adresse meldet und ich mit ihr dann Verbindung aufnehmen kann. Das ganze hat unter Delphi 2006 immer Problemlos funktioniert.

Mit Delphi 2010 haben sich nun wohl auch schon die Übergabeparameter der Events geändert die der Server auslöst, das konnte ich nun aber schon anpassen. Allerdings wird mein Broadcast nicht mehr richtig ausgeführt. Ich rufe das ganze gleich auf wie unter Delphi 2006, allerdings sehe ich im Netzwerksniffer dass die Daten nicht wie unter Delphi 2006 verschickt werden sondern verdreht sind. Ich kann mir da momentan gar keinen Reim drauf machen. Hat jemand von Euch eine Idee?

Delphi-Quellcode:
var
   s : String;
begin
   s := #$00 + #$00 + #$00 + #$F6;
   IdUDPServer1.Broadcast( s, 30718 );
end;
Unter Delphi 2006 sagt mit der Netzwerksniffer Wireshark dass 4 Byte mit den Daten: 000000F6 verschickt wurden

Unter Delphi 2010 sagt mit der Netzwerksnniffer dass 4 Byte mit den Daten: 0000006F verschickt wurden.

Dass die Werte verdreht sind hat mich erst gewundert, ich habe dann mal andere Werte verschickt und das muss wohl Zufall sein.

Danke für jeden Hinweis.

himitsu 18. Jan 2010 12:27

Re: Indy Umstellung Delphi 2006 auf Delphi 2010
 
Das liegt wohl mit dem Unicode zusammen

bis D2007 war es intern so definiert
Delphi-Quellcode:
var
   s : AnsiString;
begin
ab D2009 ist es jetzt so
Delphi-Quellcode:
var
   s : UnicodeString;
begin
Delphi-Quellcode:
var
   s : AnsiString;
begin //                    vvvvvv den Wert explizit festlegen
       //                    vvvvvv und nicht über CodePage umrechnen      
       //                    vvvvvv (die 00 ist dabei wichtig)
   s := #$00 + #$00 + #$00 + #$00F6;
   IdUDPServer1.Broadcast( s, 30718 );
end;
bzw.
Delphi-Quellcode:
s := #$0000 + #$0000 + #$0000 + #$00F6;
aber bei #$0000 bis #$007F stimmen die Werte (ASCII) sowieso überein

siehe auch Threads wie diesen http://www.delphipraxis.net/internal...t.php?t=153308

Surrounder 18. Jan 2010 12:39

Re: Indy Umstellung Delphi 2006 auf Delphi 2010
 
danke für deine schnelle Antwort. ich habe folgendes versucht:

Delphi-Quellcode:
var
   s : AnsiString;
begin
   s := #$0000 + #$0000 + #$0000 + #$00F6;
   IdUDPServer1.Broadcast( s, 30718 );
end;
hat aber nix gebracht, kommt drotzdem "6F" anstellen von "F6" über das Netzwerk

himitsu 18. Jan 2010 12:45

Re: Indy Umstellung Delphi 2006 auf Delphi 2010
 
hmm, versuch es mal so:
Delphi-Quellcode:
var s: RawByteString;
begin
  s := #$0000 + #$0000 + #$0000 + #$00F6;
  IdUDPServer1.Broadcast( s, 30718 );
end;

var s: RawByteString;
begin
  SetLength(s, 4);
  s[1] := #$0000;
  s[2] := #$0000;
  s[3] := #$0000;
  s[4] := #$00F6;
  IdUDPServer1.Broadcast( s, 30718 );
end;
Aber da Broadcast nur String und TIdBytes anbietet, würde ich dir eher empfehlen es über TIdBytes zu lösen:
Delphi-Quellcode:
var s: TIdBytes;
begin
  SetLength(s, 4);
  s[0] := $00;
  s[1] := $00;
  s[2] := $00;
  s[3] := $F6;
  IdUDPServer1.Broadcast( s, 30718 );
end;

Surrounder 18. Jan 2010 12:59

Re: Indy Umstellung Delphi 2006 auf Delphi 2010
 
Ok, habe nur den Index auf 0 korrigiert, dann geht es

Delphi-Quellcode:
var s: TIdBytes;
begin
  SetLength(s, 4);
  s[0] := $00;
  s[1] := $00;
  s[2] := $00;
  s[3] := $F6;
  IdUDPServer1.Broadcast( s, 30718 );
end;
Jetzt muss ich mal mein komplettes Projekt dazu umstellen. Danke für die schnelle Hilfe

himitsu 18. Jan 2010 13:17

Re: Indy Umstellung Delphi 2006 auf Delphi 2010
 
Ja, daß mit der 0 war mir dann auch schon aufgefallen :oops:

Ansonsten bieten die Indy auch irgendwo Konvertierungsroutinen, für eine String<>TIdBytes-Umwandlung.
Wenn es da auch eine AnsiString-Unterstützung gibt, dann wäre das eventuell auch noch was Praktisches.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:39 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