AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy10 Kommunikation über UDP mit 8 Bit Codierung
Thema durchsuchen
Ansicht
Themen-Optionen

Indy10 Kommunikation über UDP mit 8 Bit Codierung

Ein Thema von AJ_Oldendorf · begonnen am 12. Jun 2009 · letzter Beitrag vom 16. Jun 2009
Antwort Antwort
AJ_Oldendorf

Registriert seit: 12. Jun 2009
486 Beiträge
 
Delphi 12 Athens
 
#1

Re: Indy10 Kommunikation über UDP mit 8 Bit Codierung

  Alt 15. Jun 2009, 15:25
Hallo Assertor,
ich hatte anscheind irgendwie eine andere Version erwischt...
Jetzt sieht man, dass man bei der Funktion .Send ein Encoding Format angeben kann.
Leider funktioniert die 8bit Übertragung nicht.

Ich hänge dir mal zwei Beispielprojekte an.

Die Testanwendungen zum Senden und Empfangen mit UDP.
Die Datei UDPSendSequenz-BDS2006.zip enthält Quelltext und Anwendung zum Senden einer fortlaufenden wort-breiten Sequenznummer an die angegebene Ip-Adresse.
Compliert mit BDS 2006. Das klappt auch!

Die Datei UDPSendReceive-BDS2009.zip enthält Quelltext und die Anwendung für Senden und Empfangen unter Verwendung der neuen Indys (die du mir genannt hast).
Das Ding kann Senden (fehlerhaft) und Empfangen (da kommen die richtigen Werte, die man mit der BDS 2006 Anwendung abgschickt hat).

Zwischen 128 und 159 werden die Sequenzen verfälscht..
Schuld daran ist das Verwenden von Codepages. Wir müssen hier aber 8bit binär (1:1 !) übertragen.

IdGlobal; Zeile 2280 ff.
// RLebeau: TODO - implement a custom 8-bit encoding class?
//
// We need a class that converts UFT-16 codeunits in the $00-$FF range
// to/from their numeric values as-is. Was previously using "Windows-1252"
// (codepage 1252) for that, which does so for most codeunits, however
// codeunits $80-$9F in Windows-1252 map to different codepoints in Unicode,
// which we don't want. "ISO 8859-1" (codepage 28591), on the other hand,
// treats codeunits $00-$FF as-is, and seems to be just as widely supported
// as codepage 1252 on most systems, so we'll use that for now...

Delphi-Quellcode:
{$IFDEF DOTNET}
function Indy8BitEncoding: TIdTextEncoding;
{$IFDEF USEINLINE}inline;{$ENDIF}
begin
 Result := TIdTextEncoding.GetEncoding(28591);
end;
{$ELSE}
 {$IFDEF USE_ICONV}
function Indy8BitEncoding(const AOwnedByIndy: Boolean = True): TIdTextEncoding;
var
 LEncoding: TIdTextEncoding;
begin
 if not AOwnedByIndy then begin
   LEncoding := TIdTextEncoding.GetEncoding('ISO-8859-1');
 end else
 begin
   if GId8BitEncoding = nil then begin
     LEncoding := TIdTextEncoding.GetEncoding('ISO-8859-1');
     if InterlockedCompareExchangePtr(Pointer(GId8BitEncoding), LEncoding, nil) <> nil then begin
       LEncoding.Free;
     end;
   end;
   LEncoding := GId8BitEncoding;
 end;
 Result := LEncoding;
end;
Ich hoffe, du verstehst unser Problem und kannst mir hierzu noch weiterhelfen.
Wie oben geschrieben brauchen wir unbedingt eine 8bit (1:1) Übertragung.

Viele Grüße
Alex
Angehängte Dateien
Dateityp: zip udpsendsequenz-bds2006_110.zip (288,3 KB, 9x aufgerufen)
Dateityp: zip udpsendreceive-bds2009_155.zip (347,4 KB, 15x aufgerufen)
  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 12:12 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